summaryrefslogtreecommitdiffstats
path: root/DisplayClass.cpp
diff options
context:
space:
mode:
authorMatthias Schiffer <matthias@gamezock.de>2009-12-10 09:08:16 +0100
committerMatthias Schiffer <matthias@gamezock.de>2009-12-10 09:08:16 +0100
commit1a321ed999334f0d9f5255249ebeeed0278871d6 (patch)
treefee0b09118849287d11346ee262dfc2ac81800ec /DisplayClass.cpp
parent59b00645ccfbade509b1d1694c9fcfc68e013a10 (diff)
downloadc3d-1a321ed999334f0d9f5255249ebeeed0278871d6.tar
c3d-1a321ed999334f0d9f5255249ebeeed0278871d6.zip
Benutzte BSPTrees zum rendern
Diffstat (limited to 'DisplayClass.cpp')
-rw-r--r--DisplayClass.cpp79
1 files changed, 23 insertions, 56 deletions
diff --git a/DisplayClass.cpp b/DisplayClass.cpp
index b82b18e..206556e 100644
--- a/DisplayClass.cpp
+++ b/DisplayClass.cpp
@@ -4,35 +4,23 @@
#include "BSPTree.h"
-void DisplayClass::RenderVisitor::operator() (const Triangle &t) const {
- t.render();
-}
+DisplayClass::OpaqueRenderer DisplayClass::opaqueRenderer;
+DisplayClass::TransparentRenderer DisplayClass::transparentRenderer;
DisplayClass::DisplayClass() {
- static const float pos[5] = {-3.0, -2.0, 0.0, 2.0, 3.0};
-
- for(int i = 0; i < 5; ++i) {
- for(int j = 0; j < 5; ++j) {
- for(int k = 0; k < 5; ++k) {
- cubes[i][j][k].setSize(0.5, 0.5, 0.5);
- cubes[i][j][k].setPos(pos[k], pos[j], pos[i]);
- }
- }
- }
+ cubeing[0] = Trapezocube(11.0, 10.0, 10.0, 0.5, 0.0, 0.0, 1.75, 0);
+ cubeing[1] = Trapezocube(10.0, 9.0, 9.0, 0.5, 0.0, 0.0, 2.25, 90);
+ cubeing[2] = Trapezocube(9.0, 8.0, 8.0, 0.5, 0.0, 0.0, 2.75, 180);
+ cubeing[3] = Trapezocube(8.0, 7.0, 7.0, 0.5, 0.0, 0.0, 3.25, 270);
+ cubeing[4] = Trapezocube(7.0, 6.0, 6.0, 0.5, 0.0, 0.0, 3.75, 0);
+ cubeing[5] = Trapezocube(6.0, 5.0, 5.0, 0.5, 0.0, 0.0, 4.25, 90);
+ cubeing[6] = Trapezocube(5.0, 4.0, 4.0, 0.5, 0.0, 0.0, 4.75, 180);
+ cubeing[7] = Trapezocube(4.0, 3.0, 3.0, 0.5, 0.0, 0.0, 5.25, 270);
}
void DisplayClass::renderScene(unsigned long delta)
{
- //Cubehole cubeing(3.0, 1.0, 1.0, 0.0, 0.0, 0.0, 1.0, 0.5);
- Trapezocube cubeing1(11.0, 10.0, 10.0, 0.5, 0.0, 0.0, 1.75, 0);
- Trapezocube cubeing2(10.0, 9.0, 9.0, 0.5, 0.0, 0.0, 2.25, 90);
- Trapezocube cubeing3(9.0, 8.0, 8.0, 0.5, 0.0, 0.0, 2.75, 180);
- Trapezocube cubeing4(8.0, 7.0, 7.0, 0.5, 0.0, 0.0, 3.25, 270);
- Trapezocube cubeing5(7.0, 6.0, 6.0, 0.5, 0.0, 0.0, 3.75, 0);
- Trapezocube cubeing6(6.0, 5.0, 5.0, 0.5, 0.0, 0.0, 4.25, 90);
- Trapezocube cubeing7(5.0, 4.0, 4.0, 0.5, 0.0, 0.0, 4.75, 180);
- Trapezocube cubeing8(4.0, 3.0, 3.0, 0.5, 0.0, 0.0, 5.25, 270);
static float angle = 0.0;
angle += delta*0.025;
if(angle >= 360)
@@ -40,9 +28,6 @@ void DisplayClass::renderScene(unsigned long delta)
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
- //Matrix p(GL_PROJECTION_MATRIX);
- //Matrix m;
-
std::list<Triangle> triangles;
glLoadIdentity(); // Clean up matrix
@@ -52,42 +37,24 @@ void DisplayClass::renderScene(unsigned long delta)
glRotatef(angle*3, 0.0, 0.0, 1.0);
glRotatef(-angle*5, 1.0, 1.0, 1.0);
- //m.store(); // Save current transformation
- /*for(int i = 0; i < 5; ++i) {
- for(int j = 0; j < 5; ++j) {
- for(int k = 0; k < 5; ++k) {
- std::list<Triangle> ct = cubes[i][j][k].getTriangles(m);
- triangles.splice(triangles.end(), ct);
- }
- }
- }*/
- std::list<Triangle> ct1 = cubeing1.getTriangles();
- triangles.splice(triangles.end(), ct1);
- std::list<Triangle> ct2 = cubeing2.getTriangles();
- triangles.splice(triangles.end(), ct2);
- std::list<Triangle> ct3 = cubeing3.getTriangles();
- triangles.splice(triangles.end(), ct3);
- std::list<Triangle> ct4 = cubeing4.getTriangles();
- triangles.splice(triangles.end(), ct4);
- std::list<Triangle> ct5 = cubeing5.getTriangles();
- triangles.splice(triangles.end(), ct5);
- std::list<Triangle> ct6 = cubeing6.getTriangles();
- triangles.splice(triangles.end(), ct6);
- std::list<Triangle> ct7 = cubeing7.getTriangles();
- triangles.splice(triangles.end(), ct7);
- std::list<Triangle> ct8 = cubeing8.getTriangles();
- triangles.splice(triangles.end(), ct8);
-
- //glLoadIdentity();
+ for(int i = 0; i < 8; ++i) {
+ std::list<Triangle> t = cubeing[i].getTriangles();
+ triangles.splice(triangles.end(), t);
+ }
BSPTree tree(triangles);
+ vmml::mat4f transform, inverseTransform;
+ glGetFloatv(GL_MODELVIEW_MATRIX, transform.array);
+
+ transform.inverse(inverseTransform);
+ inverseTransform.set_translation(vmml::vec3f());
+ vmml::vec3f viewVector = inverseTransform*vmml::vec3f(0, 0, -1);
+
glBegin(GL_TRIANGLES);
- /*for(std::list<Triangle>::reverse_iterator t = triangles.rbegin(); t != triangles.rend(); ++t) {
- t->render();
- }*/
- tree.visit(RenderVisitor(), vmml::vec3f(0, 0, -1));
+ tree.visit(opaqueRenderer, -viewVector);
+ tree.visit(transparentRenderer, viewVector);
glEnd();
glFlush();