[gnome-games/glchess-vala] Fix 3d board normals



commit 61c041a0b751f4093f34cab209b0f3a968130a76
Author: Robert Ancell <robert ancell canonical com>
Date:   Mon Jan 10 08:04:08 2011 +1100

    Fix 3d board normals

 glchess/src/3ds.vala           |    2 +-
 glchess/src/chess-view-3d.vala |   34 ++++++++++++++++++++++++++--------
 2 files changed, 27 insertions(+), 9 deletions(-)
---
diff --git a/glchess/src/3ds.vala b/glchess/src/3ds.vala
index ace7813..9abb6a0 100644
--- a/glchess/src/3ds.vala
+++ b/glchess/src/3ds.vala
@@ -131,7 +131,7 @@ public class TDSModel
                     var x = read_float (stream);
                     var y = read_float (stream);
                     var z = read_float (stream);
-                    var scale = 3.5f;
+                    var scale = 3.5f; // FIXME: Fix the model files
                     vertices[i*3] = scale*x;
                     vertices[i*3+1] = scale*z;
                     vertices[i*3+2] = scale*y;
diff --git a/glchess/src/chess-view-3d.vala b/glchess/src/chess-view-3d.vala
index 1d331b3..d6271e4 100644
--- a/glchess/src/chess-view-3d.vala
+++ b/glchess/src/chess-view-3d.vala
@@ -17,6 +17,7 @@ private class ChessView3D : ChessView
     private TDSModel queen_model;
     private TDSModel king_model;
     private GLfloat[] board_vertices;
+    private GLfloat[] board_normals;    
     private GLushort[] board_quads;
 
     private GLfloat SQUARE_WIDTH;
@@ -134,9 +135,16 @@ private class ChessView3D : ChessView
                           e, 0.0f, k,  b, 0.0f, k,
                           a, -BOARD_CHAMFER, g,  f, -BOARD_CHAMFER, g,
                           f, -BOARD_CHAMFER, l,  a, -BOARD_CHAMFER, l,
-                          a, -BOARD_DEPTH, g,  f, -BOARD_DEPTH, g,  f, -BOARD_DEPTH, l,  a, -BOARD_DEPTH, l};
-        board_quads = {0, 1, 5, 4,  0, 4, 7, 3,  3, 7, 6, 2,  2, 6, 5, 1,
-                       4, 5, 9, 8,  4, 8, 11, 7,  7, 11, 10, 6,  6, 10, 9, 5};
+                          a, -BOARD_DEPTH, g,  f, -BOARD_DEPTH, g,
+                          f, -BOARD_DEPTH, l,  a, -BOARD_DEPTH, l};
+        board_normals = { 0.0f, 1.0f, 0.0f,  0.0f, 0.0f, -1.0f,
+                          1.0f, 0.0f, 0.0f,  0.0f, 0.0f, 1.0f,
+                         -1.0f, 0.0f, 0.0f,  0.0f, 0.707f, -0.707f,
+                          0.707f, 0.707f, 0.0f,  0.0f, 0.707f,  0.707f,
+                         -0.707f, 0.707f, 0.0f };
+        board_quads = {0, 1, 5, 4, 0,  1, 2, 6, 5, 0,  2, 3, 7, 6, 0,  3, 0, 4, 7, 0,
+                       4, 5, 9, 8, 5,  5, 6, 10, 9, 6,  6, 7, 11, 10, 7,  7, 4, 8, 11, 8,
+                       8, 9, 13, 12, 1,  9, 10, 14, 13, 2,  10, 11, 15, 14, 3,  11, 8, 12, 15, 4};
     }
     
     private void realize_cb ()
@@ -282,11 +290,21 @@ private class ChessView3D : ChessView
     {
         glEnable (GL_COLOR_MATERIAL);
         glColor3f (0x2e / 255f, 0x34 / 255f, 0x36 / 255f);
-        glNormal3f (0.0f, 1.0f, 0.0f);
-        glEnableClientState (GL_VERTEX_ARRAY);
-        glVertexPointer (3, GL_FLOAT, 0, board_vertices);
-        glDrawElements (GL_QUADS, (GLsizei) board_quads.length, GL_UNSIGNED_SHORT, board_quads);
-        glDisableClientState (GL_VERTEX_ARRAY);
+        glBegin (GL_QUADS);
+        for (int i = 0; i < board_quads.length; i += 5)
+        {
+            var j = board_quads[i+4] * 3;
+            glNormal3f (board_normals[j], board_normals[j+1], board_normals[j+2]);
+            j = board_quads[i] * 3;
+            glVertex3f (board_vertices[j], board_vertices[j+1], board_vertices[j+2]);
+            j = board_quads[i+1] * 3;
+            glVertex3f (board_vertices[j], board_vertices[j+1], board_vertices[j+2]);
+            j = board_quads[i+2] * 3;
+            glVertex3f (board_vertices[j], board_vertices[j+1], board_vertices[j+2]);
+            j = board_quads[i+3] * 3;
+            glVertex3f (board_vertices[j], board_vertices[j+1], board_vertices[j+2]);
+        }
+        glEnd ();
 
         var selected_piece = options.get_selected_piece ();
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]