[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    playground/games/astrododge
From:       Rivo Laks <rivolaks () hot ! ee>
Date:       2008-03-16 18:40:21
Message-ID: 1205692821.615461.14670.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 786318 by rivol:

Add shaders for the player's ship and render it

 A             data/shaders/ship.frag  
 A             data/shaders/ship.vert  
 M  +28 -0     src/mainwindow.cpp  
 M  +5 -0      src/mainwindow.h  
 M  +1 -1      src/modelloader.cpp  


--- trunk/playground/games/astrododge/src/mainwindow.cpp #786317:786318
@@ -22,6 +22,7 @@
 #include "gameworld.h"
 #include "inputhandler.h"
 #include "bullet.h"
+#include "modelloader.h"
 
 #include <kgllib/camera.h>
 #include <kgllib/rendertarget.h>
@@ -29,6 +30,7 @@
 #include <kgllib/program.h>
 #include <kgllib/fpscounter.h>
 #include <kgllib/textrenderer.h>
+#include <kgllib/mesh.h>
 
 #include <QTimer>
 #include <QApplication>
@@ -156,6 +158,11 @@
         mAsteroidProgram->bind();
         mAsteroidProgram->setUniform("diffuseTexture", 0);
         mAsteroidProgram->unbind();
+        // ship
+        mShipProgram = loadProgram("ship");
+        if (!mShipProgram) {
+            return;
+        }
         // space
         mSpaceProgram = loadProgram("space");
         if (!mSpaceProgram) {
@@ -177,6 +184,11 @@
         mBlurProgram->bind();
         mBlurProgram->setUniform("inputTexture", 0);
         mBlurProgram->unbind();
+
+        mShipModel = new Mesh();
+        ModelLoader::loadFromObj(mShipModel, "data/models/spaceship.obj");
+        mShipModel->setPrimitiveType(GL_TRIANGLES);
+        mShipModel->setProgram(mShipProgram);
     }
 
 
@@ -381,6 +393,8 @@
     renderSpace();
     // Render asteroids
     renderAsteroids();
+    // Render player's ship
+    renderPlayerShip();
 
     glColor3f(1.0, 1.0, 0.8);
     glPointSize(4.0);
@@ -451,6 +465,20 @@
     mSpaceProgram->unbind();
 }
 
+void MainWindow::renderPlayerShip()
+{
+    glPushMatrix();
+
+    // Calculate rotation matrix for the ship
+    Ship* ship = mWorld->ship();
+
+    glLoadIdentity();
+    glTranslatef(0, -2, -5);
+
+    mShipModel->render();
+    glPopMatrix();
+}
+
 void MainWindow::renderAsteroids()
 {
     mTrianglesRendered = 0;
--- trunk/playground/games/astrododge/src/mainwindow.h #786317:786318
@@ -36,6 +36,7 @@
 class RenderTarget;
 class Program;
 class Texture;
+class Mesh;
 }
 
 using namespace KGLLib;
@@ -83,6 +84,7 @@
     void renderSpace();
     void renderAsteroids();
     void renderAsteroid(const Asteroid* a);
+    void renderPlayerShip();
 
     void renderBlurTextures();
     RenderTarget* getBlurredTexture(Texture* src, int targetw, int targeth, const Vector2f& ramp);
@@ -126,7 +128,10 @@
     Program* mSpaceProgram;
     Program* mToneMappingProgram;
     Program* mBlurProgram;
+    Program* mShipProgram;
     Texture* mAsteroidTexture;
+
+    Mesh* mShipModel;
 };
 
 #endif
--- trunk/playground/games/astrododge/src/modelloader.cpp #786317:786318
@@ -115,7 +115,7 @@
         for (int i = 0; i < normals.count(); i++) {
             normalsArray[i] = normals[i];
         }
-        //recalcNormals(vertices.count(), verticesArray, normalsArray, indices.count(), indicesArray);
+        recalcNormals(vertices.count(), verticesArray, normalsArray, indices.count(), indicesArray);
         batch->setNormals(normalsArray);
     }
 
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic