tavli
diff src/board.cc @ 11:a8e26f163f99
poulia
author | John Tsiombikas <nuclear@member.fsf.org> |
---|---|
date | Sat, 27 Jun 2015 08:01:51 +0300 |
parents | 8a167149985d |
children | ae1c60726c41 |
line diff
1.1 --- a/src/board.cc Fri Jun 26 05:41:18 2015 +0300 1.2 +++ b/src/board.cc Sat Jun 27 08:01:51 2015 +0300 1.3 @@ -1,3 +1,4 @@ 1.4 +#include <float.h> 1.5 #include "opengl.h" 1.6 #include "board.h" 1.7 #include "meshgen.h" 1.8 @@ -57,6 +58,31 @@ 1.9 #define GAP (HSIZE * 0.025) 1.10 #define HINGE_RAD (GAP * 0.5) 1.11 #define HINGE_HEIGHT (VSIZE * 0.075) 1.12 +#define PIECE_RAD (0.45 * HSIZE / 5.0) 1.13 + 1.14 +static const float piece_cp[][3][2] = { 1.15 + {{0, 0.25}, {1, 0.25}, {2, 0.5}}, 1.16 + {{2, 0.5}, {2.5, 0.5}, {3, 0.5}}, 1.17 + {{3, 0.5}, {4, 0.5}, {4, 0}}, 1.18 + {{4, 0}, {4, -0.5}, {3, -0.5}}, 1.19 + {{3, -0.5}, {2.5, -0.5}, {0, -0.5}}, 1.20 + //{{2, -0.5}, {1, -0.25}, {0, -0.25}} 1.21 +}; 1.22 +static const int piece_ncurves = sizeof piece_cp / sizeof *piece_cp; 1.23 + 1.24 +static Vector2 piece_revol(float u, float v, void *cls) 1.25 +{ 1.26 + if(v >= 1.0) v = 1.0 - 1e-6; 1.27 + int idx = std::min((int)(v * piece_ncurves), piece_ncurves - 1); 1.28 + float t = fmod(v * (float)piece_ncurves, 1.0); 1.29 + 1.30 + Vector2 res; 1.31 + for(int i=0; i<2; i++) { 1.32 + float mid = piece_cp[idx][1][i]; 1.33 + res[i] = bezier(piece_cp[idx][0][i], mid, mid, piece_cp[idx][2][i], t); 1.34 + } 1.35 + return res * 0.25 * PIECE_RAD; 1.36 +} 1.37 1.38 bool Board::generate() 1.39 { 1.40 @@ -129,7 +155,7 @@ 1.41 float sign = i * 2 - 1; 1.42 1.43 // barrel 1.44 - gen_cylinder(&tmp, HINGE_RAD, HINGE_HEIGHT, 10, 1, 1); 1.45 + gen_cylinder(&tmp, HINGE_RAD, HINGE_HEIGHT, 8, 1, 1); 1.46 xform.reset_identity(); 1.47 xform.translate(Vector3(0, WALL_HEIGHT - HINGE_RAD * 0.5, sign * VSIZE / 4.0)); 1.48 xform.rotate(Vector3(-M_PI / 2.0, 0, 0)); 1.49 @@ -183,6 +209,15 @@ 1.50 obj.push_back(dbgobj); 1.51 */ 1.52 1.53 + Mesh *piece = new Mesh; 1.54 + gen_revol(piece, 18, 15, piece_revol, 0); 1.55 + 1.56 + Object *opiece = new Object; 1.57 + opiece->set_mesh(piece); 1.58 + opiece->xform().set_translation(Vector3(0, 0.2, 0)); 1.59 + obj.push_back(opiece); 1.60 + 1.61 + 1.62 // meshgen stats 1.63 printf("Generated board:\n %u meshes\n", (unsigned int)obj.size()); 1.64 unsigned int polycount = 0;