From 6d12f7f78434d3d608f298d268f85c53fba0858c Mon Sep 17 00:00:00 2001 From: Yoann Date: Sun, 2 Oct 2011 15:33:25 +0200 Subject: [PATCH] Optimisation de l'affichage du terrain avec pasage de tableau de sommets. Fonciton displayTree2(). L'ancienne version et displayTree(Triangle*). --- display.c | 51 ++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 50 insertions(+), 1 deletion(-) diff --git a/display.c b/display.c index 8d65ab9..49c6661 100644 --- a/display.c +++ b/display.c @@ -7,10 +7,13 @@ int initWindow(); int mainLoop(); void renderScene(); void displayTree(Triangle *t); +void displayTree2(); void Draw_Axes (); Triangle *t; +int *vertices; int windowWidth = 1024; +int nbVertex = 0; int windowHeight = 768; int xCamera = 1024; int yCamera = -800; @@ -28,6 +31,7 @@ int initWindow() { glLoadIdentity(); gluPerspective(70,(double)windowWidth/windowHeight,1,10000); glEnable(GL_DEPTH_TEST); + glewInit(); return 0; } @@ -102,12 +106,53 @@ void renderScene() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) ; drawAxes(); - displayTree(t); + displayTree2(t,vertices,0); + //displayTree(t); glFlush(); SDL_GL_SwapBuffers(); } +int nbTriangles(Triangle *t) { + int sum = 0; + + if(t->tLeftChild == NULL) { + return 1; + } + else { + sum += nbTriangles(t->tLeftChild); + sum += nbTriangles(t->tRightChild); + } + + return sum; +} + +void insertValues(Triangle *t,int *vertices) { + if(t->tLeftChild == NULL) { + vertices[9*nbVertex] = t->vLeft->x; + vertices[9*nbVertex+1] = t->vLeft->y; + vertices[9*nbVertex+2] = t->vLeft->z; + vertices[9*nbVertex+3] = t->vApex->x; + vertices[9*nbVertex+4] = t->vApex->y; + vertices[9*nbVertex+5] = t->vApex->z; + vertices[9*nbVertex+6] = t->vRight->x; + vertices[9*nbVertex+7] = t->vRight->y; + vertices[9*nbVertex+8] = t->vRight->z; + nbVertex++; + } + else { + insertValues(t->tLeftChild,vertices); + insertValues(t->tRightChild,vertices); + } +} + +void displayTree2() { + glVertexAttribPointer(0, 3, GL_INT, GL_FALSE, 0, vertices); + glEnableVertexAttribArray(0); + glColor3ub(255,255,255); + glDrawArrays(GL_LINE_LOOP,0, nbVertex*3); +} + void displayTree(Triangle *t) { if(t->tLeftChild == NULL) { glBegin(GL_LINE_LOOP); @@ -126,6 +171,10 @@ void displayTree(Triangle *t) { int main() { initWindow(); t = initDefaultExample(); + vertices = (int*) malloc(sizeof(int) * nbTriangles(t)*9+1); + + insertValues(t,vertices); + printf("nombre de triangles : %d\n",nbVertex); mainLoop();