bloboland
view src/renderer.cc @ 2:1757973feaed
added stereoscopic rendering for no apparent reason
author | John Tsiombikas <nuclear@member.fsf.org> |
---|---|
date | Sun, 16 Dec 2012 00:37:35 +0200 |
parents | |
children | a39c301cdcce |
line source
1 #include "opengl.h"
2 #include "renderer.h"
4 Renderer::Renderer()
5 {
6 leveltex = 0;
7 sdrprog = 0;
8 }
10 Renderer::~Renderer()
11 {
12 shutdown();
13 }
15 bool Renderer::init()
16 {
17 sdrprog = new SdrProg;
18 /*if(!sdrprog->load("sdr/bloboray.v.glsl", "sdr/bloboray.p.glsl")) {
19 return false;
20 }*/
22 leveltex = new Texture3D;
24 return true;
25 }
27 void Renderer::shutdown()
28 {
29 delete leveltex;
30 delete sdrprog;
31 }
33 static void draw_cube(const Vector3 &pos, float sz);
35 void Renderer::render(const Level *lvl) const
36 {
37 Volume *vol = lvl->terrain;
39 glEnable(GL_COLOR_MATERIAL);
40 glColorMaterial(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE);
42 glBegin(GL_QUADS);
43 for(int i=0; i<vol->get_size(0); i++) {
44 for(int j=0; j<vol->get_size(1); j++) {
45 for(int k=0; k<vol->get_size(2) - 1; k++) {
46 Vector4 vox = vol->get_voxel(i, j, k);
47 Vector4 next = vol->get_voxel(i, j, k + 1);
49 if(vox.w > 0.1 && next.w < 0.1) {
50 glColor3f(vox.x, vox.y, vox.z);
52 float x = ((float)i - vol->get_size(0) / 2) * 0.1;
53 float z = ((float)j - vol->get_size(1) / 2) * 0.1;
54 float y = ((float)k - vol->get_size(2) / 2) * 0.1;
55 draw_cube(Vector3(x, y, z), 0.1);
56 }
57 }
58 }
59 }
60 glEnd();
62 glDisable(GL_COLOR_MATERIAL);
63 }
66 static void draw_cube(const Vector3 &pos, float sz)
67 {
68 sz /= 2.0;
70 glNormal3f(0, 0, 1);
71 glVertex3f(pos.x - sz, pos.y - sz, pos.z + sz);
72 glVertex3f(pos.x + sz, pos.y - sz, pos.z + sz);
73 glVertex3f(pos.x + sz, pos.y + sz, pos.z + sz);
74 glVertex3f(pos.x - sz, pos.y + sz, pos.z + sz);
76 glNormal3f(1, 0, 0);
77 glVertex3f(pos.x + sz, pos.y - sz, pos.z + sz);
78 glVertex3f(pos.x + sz, pos.y - sz, pos.z - sz);
79 glVertex3f(pos.x + sz, pos.y + sz, pos.z - sz);
80 glVertex3f(pos.x + sz, pos.y + sz, pos.z + sz);
82 glNormal3f(0, 0, -1);
83 glVertex3f(pos.x + sz, pos.y - sz, pos.z - sz);
84 glVertex3f(pos.x - sz, pos.y - sz, pos.z - sz);
85 glVertex3f(pos.x - sz, pos.y + sz, pos.z - sz);
86 glVertex3f(pos.x + sz, pos.y + sz, pos.z - sz);
88 glNormal3f(-1, 0, 0);
89 glVertex3f(pos.x - sz, pos.y - sz, pos.z - sz);
90 glVertex3f(pos.x - sz, pos.y - sz, pos.z + sz);
91 glVertex3f(pos.x - sz, pos.y + sz, pos.z + sz);
92 glVertex3f(pos.x - sz, pos.y + sz, pos.z - sz);
94 glNormal3f(0, 1, 0);
95 glVertex3f(pos.x - sz, pos.y + sz, pos.z + sz);
96 glVertex3f(pos.x + sz, pos.y + sz, pos.z + sz);
97 glVertex3f(pos.x + sz, pos.y + sz, pos.z - sz);
98 glVertex3f(pos.x - sz, pos.y + sz, pos.z - sz);
100 glNormal3f(0, -1, 0);
101 glVertex3f(pos.x - sz, pos.y - sz, pos.z - sz);
102 glVertex3f(pos.x + sz, pos.y - sz, pos.z - sz);
103 glVertex3f(pos.x + sz, pos.y - sz, pos.z + sz);
104 glVertex3f(pos.x - sz, pos.y - sz, pos.z + sz);
106 }