vrshoot

view src/level.cc @ 0:b2f14e535253

initial commit
author John Tsiombikas <nuclear@member.fsf.org>
date Sat, 01 Feb 2014 19:58:19 +0200
parents
children e7ca128b8713
line source
1 #include "level.h"
2 #include "logger.h"
4 static void gen_mesh(Mesh *mesh);
6 Level::Level()
7 {
8 dlimit_near = -2;
9 dlimit_far = 8;
11 gen_mesh(&tile_mesh);
13 tile_obj = new Object;
14 tile_obj->set_mesh(&tile_mesh);
15 }
17 Level::~Level()
18 {
19 delete tile_obj;
20 }
22 void Level::set_draw_limits(float dnear, float dfar)
23 {
24 dlimit_near = dnear;
25 dlimit_far = dfar;
26 }
28 void Level::draw() const
29 {
30 AABox bbox = tile_obj->get_aabbox();
31 float zsize = bbox.max.z - bbox.min.z;
32 float zoffs = -zsize / 2.0;
34 float z = dlimit_near;
35 while(z < dlimit_far) {
36 tile_obj->set_position(Vector3(0, 0, -(z - zoffs)));
37 tile_obj->draw();
38 z += zsize;
39 }
40 }
42 static void gen_mesh(Mesh *mesh)
43 {
44 /* left vertical side */
45 mesh->normal(1, 0, 0);
46 mesh->texcoord(0, 0); mesh->vertex(-2, 0, 1);
47 mesh->texcoord(1, 0); mesh->vertex(-2, 0, -1);
48 mesh->texcoord(1, 1); mesh->vertex(-2, 1, -1);
49 mesh->texcoord(0, 1); mesh->vertex(-2, 1, 1);
51 /* left diagonal */
52 Vector3 dnorm = Vector3(0.5, 1, 0).normalized();
53 mesh->normal(dnorm.x, dnorm.y, dnorm.z);
54 mesh->texcoord(0, 0); mesh->vertex(-1, -0.5, 1);
55 mesh->texcoord(1, 0); mesh->vertex(-1, -0.5, -1);
56 mesh->texcoord(1, 1); mesh->vertex(-2, 0, -1);
57 mesh->texcoord(0, 1); mesh->vertex(-2, 0, 1);
59 /* floor */
60 mesh->normal(0, 1, 0);
61 mesh->texcoord(0, 0); mesh->vertex(-1, -0.5, 1);
62 mesh->texcoord(1, 0); mesh->vertex(1, -0.5, 1);
63 mesh->texcoord(1, 1); mesh->vertex(1, -0.5, -1);
64 mesh->texcoord(0, 1); mesh->vertex(-1, -0.5, -1);
66 /* right vertical side */
67 mesh->normal(-1, 0, 0);
68 mesh->texcoord(0, 0); mesh->vertex(2, 0, -1);
69 mesh->texcoord(1, 0); mesh->vertex(2, 0, 1);
70 mesh->texcoord(1, 1); mesh->vertex(2, 1, 1);
71 mesh->texcoord(0, 1); mesh->vertex(2, 1, -1);
73 /* right diagonal */
74 dnorm = Vector3(-0.5, 1, 0).normalized();
75 mesh->normal(dnorm.x, dnorm.y, dnorm.z);
76 mesh->texcoord(0, 0); mesh->vertex(1, -0.5, -1);
77 mesh->texcoord(1, 0); mesh->vertex(1, -0.5, 1);
78 mesh->texcoord(1, 1); mesh->vertex(2, 0, 1);
79 mesh->texcoord(0, 1); mesh->vertex(2, 0, -1);
81 // quad face index buffer
82 int nverts = mesh->get_attrib_count(MESH_ATTR_VERTEX);
83 for(int i=0; i<nverts; i+=4) {
84 mesh->face(i, i + 1, i + 2);
85 mesh->face(i, i + 2, i + 3);
86 }
88 info_log("generated level trough mesh: %d polygons\n", mesh->get_poly_count());
89 }