[gnome-games/glchess-vala] Fix 3d board normals
- From: Robert Ancell <rancell src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-games/glchess-vala] Fix 3d board normals
- Date: Tue, 11 Jan 2011 17:58:48 +0000 (UTC)
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]