Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Fr Jul 18, 2025 15:51

Foren-Übersicht » Programmierung » OpenGL
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 1 Beitrag ] 
Autor Nachricht
 Betreff des Beitrags: Was fehlt, was ist falsch ???
BeitragVerfasst: Mi Jun 14, 2006 10:26 
Offline
DGL Member

Registriert: Mo Mai 22, 2006 16:33
Beiträge: 9
Hallo,

die Funktion computeVisabilityMatrix() soll mir alle vertices liefern, die aus Lichtquellensicht sichtbar sind (im orthogr. Prtojektionsmodus).
Danach will ich nur noch die sichtbaren anzeigen lassen.
Lass ich alle Vertices rendern, ohne vorher computeVisabilityMatrix() aufzurufen, dann werden alle vertices korrekt angezeigt. Lasse ich die Visabilitymatrix berechnen und dann nur die sichtbaren vertices rendern, erhalte ich einen schwarzen Bildschirm. :(
Irgendwas in computeVisabilityMatrix() scheint mir die Anzeige kaputt zu machen, bzw. stelle ich sie danach nicht korerekt ein.
Kann mir jemand sagen wo der Fehler liegt?

Code:
  1.  
  2. void computeVisabilityMatrix() {
  3.  
  4.     int i,j;
  5.     int Pixel;
  6.     int counter;
  7.     GLuint queries[3494];
  8.     GLint available;
  9.  
  10.     glPushMatrix();
  11.     // enable orthographic projection
  12.     glOrtho(0, width, height, 0, NEAR_CLIPPING_PLANE, FAR_CLIPPING_PLANE);
  13.  
  14.     glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE); // disable Colorbuffer
  15.     glEnable(GL_STENCIL_TEST);
  16.     glEnable(GL_DEPTH_TEST);
  17.  
  18.     // Query erzeugen
  19.     glGenQueriesARB(3494, queries);
  20.     counter = 0;
  21.     // for all light directions j do
  22.     for (j=0; j<nLights; j++) {
  23.         // set camera at light direction lj
  24.         gluLookAt(LightPositions[j][0], LightPositions[j][1], LightPositions[j][2], model->BBox->Center.x, model->BBox->Center.y, model->BBox->Center.z, 0.0f,1.0f,0.0f);
  25.         // render object into depth buffer with polygon offset
  26.         glEnable(GL_POLYGON_OFFSET_POINT);
  27.         drawFirstPass();
  28.         // for all vertices i do
  29.         for (i=0; i<model->nVertex; i++) {
  30.             // begin query i
  31.             glBeginQueryARB(GL_SAMPLES_PASSED_ARB,queries[i]);
  32.  
  33.             // render vertex i
  34.             glBegin(GL_POINTS);        
  35.                 glVertex3f(model->VertexArray[i].x, model->VertexArray[i].y, model->VertexArray[i].z);
  36.             glEnd();
  37.  
  38.             //end query i
  39.             glEndQueryARB(GL_SAMPLES_PASSED_ARB);
  40.         }
  41.         // end for
  42.         glFlush();
  43.         // Do other work until "most" of the queries are back, to avoid
  44.         // wasting time spinning
  45.         i = 3494 * 3/4; // N * 3/4 instead of N-1, to prevent the GPU from going idle
  46.         do {
  47.             //DoSomeStuff();
  48.             glGetQueryObjectivARB(queries[i],
  49.                                   GL_QUERY_RESULT_AVAILABLE_ARB,
  50.                                   &available);
  51.         } while (!available);
  52.        
  53.         // for all vertices i do
  54.         for (i=0; i<model->nVertex; i++) {
  55.             // retrieve result from query i
  56.             glGetQueryObjectivARB(queries[i],GL_QUERY_RESULT_ARB,&Pixel);
  57.             //if result is "visible" then
  58.             if (Pixel > 0) {  
  59.                 // Mij = ni(vertex normal) ·(dot product) lj(light direction) ;lj ist wohl gleich lightposition
  60.                 VisMatrix[j][i] = model->NormalArray[i].x * LightPositions[j][0] + model->NormalArray[i].y * LightPositions[j][1] + model->NormalArray[i].z * LightPositions[j][2];
  61.                 counter++;
  62.             } else {
  63.                 VisMatrix[j][i] = 0;
  64.             }
  65.             //end if
  66.         }
  67.         // end for
  68.     }
  69.     // end for
  70.  
  71.     // Query wieder freigeben
  72.     glDeleteQueriesARB(3494, queries);
  73.     GLErrorHandler();
  74.     glPopMatrix();
  75. }
  76.  

Code:
  1.  
  2. void drawFirstPass() {
  3.  
  4.     int i;
  5.     ObjNormal vNormal;
  6.     ObjVertex v1, v2, v3;
  7.  
  8.     // schalte depth testing ein
  9.     glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  10.     glEnable(GL_DEPTH_TEST);
  11.     glDepthFunc(GL_LEQUAL);     // The Type Of Depth Testing To Do
  12.  
  13.     glBegin(GL_TRIANGLES);
  14.         for (i=0; i<model->nPolygon; i++) {
  15.             if (model->nNormal > 0) {
  16.                 glVertex3f(model->VertexArray[model->PolygonArray[i].Vertex[0] - 1].x, model->VertexArray[model->PolygonArray[i].Vertex[0] - 1].y, model->VertexArray[model->PolygonArray[i].Vertex[0] - 1].z);
  17.                 glNormal3f(model->NormalArray[model->PolygonArray[i].Normal[0] - 1].x, model->NormalArray[model->PolygonArray[i].Normal[0] - 1].y, model->NormalArray[model->PolygonArray[i].Normal[0] - 1].z);
  18.                 glVertex3f(model->VertexArray[model->PolygonArray[i].Vertex[1] - 1].x, model->VertexArray[model->PolygonArray[i].Vertex[1] - 1].y, model->VertexArray[model->PolygonArray[i].Vertex[1] - 1].z);
  19.                 glNormal3f(model->NormalArray[model->PolygonArray[i].Normal[1] - 1].x, model->NormalArray[model->PolygonArray[i].Normal[1] - 1].y, model->NormalArray[model->PolygonArray[i].Normal[1] - 1].z);
  20.                 glVertex3f(model->VertexArray[model->PolygonArray[i].Vertex[2] - 1].x, model->VertexArray[model->PolygonArray[i].Vertex[2] - 1].y, model->VertexArray[model->PolygonArray[i].Vertex[2] - 1].z);
  21.                 glNormal3f(model->NormalArray[model->PolygonArray[i].Normal[2] - 1].x, model->NormalArray[model->PolygonArray[i].Normal[2] - 1].y, model->NormalArray[model->PolygonArray[i].Normal[2] - 1].z);
  22.             } else {
  23.                 v1 = model->VertexArray[model->PolygonArray[i].Vertex[0] - 1];
  24.                 v2 = model->VertexArray[model->PolygonArray[i].Vertex[1] - 1];
  25.                 v3 = model->VertexArray[model->PolygonArray[i].Vertex[2] - 1];
  26.                 vNormal = CalcNormal(v1, v2, v3);
  27.                 glNormal3f(vNormal.x, vNormal.y, vNormal.z);
  28.                 glVertex3f(v1.x, v1.y, v1.z);
  29.                 glVertex3f(v2.x, v2.y, v2.z);
  30.                 glVertex3f(v3.x, v3.y, v3.z);
  31.             }
  32.         }
  33.     glEnd();
  34. }
  35.  

Code:
  1.  
  2. void renderSceneAO(void) {
  3.  
  4.  
  5.     glClear(GL_COLOR_BUFFER_BIT | GL_ACCUM_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
  6.  
  7.     glPushMatrix();
  8.  
  9.     if (LightsOn) {
  10.         // switch on lights
  11.         glEnable(GL_LIGHTING);
  12.         glEnable(GL_LIGHT0);
  13.     } else {
  14.         // switch off lights
  15.         glDisable(GL_LIGHTING);
  16.         glDisable(GL_LIGHT0);
  17.     }
  18.  
  19.     glMatrixMode(GL_MODELVIEW);
  20.  
  21.     gluLookAt(model->BBox->Center.x, model->BBox->Center.y, model->BBox->Center.z + distance, model->BBox->Center.x + lx, model->BBox->Center.y + ly, model->BBox->Center.z + lz, 0.0f,1.0f,0.0f);
  22.  
  23.     drawSecondPass();
  24.  
  25.     glPopMatrix();
  26.  
  27.     glutSwapBuffers();
  28.  
  29.     GLErrorHandler();
  30. }
  31.  

Code:
  1.  
  2. void drawSecondPass() {
  3.  
  4.     int i;
  5.     BOOL drawVertex;
  6.     setObjectMaterial();
  7.  
  8.     glPointSize(1.0);
  9.     glDisable(GL_DEPTH_TEST);
  10.     glPolygonOffset(1.0, 1.0);
  11.     drawVertex = FALSE;
  12.     for (i=0; i<model->nVertex; i++) {
  13.         drawVertex = setLights(i);
  14.         if (drawVertex) {
  15.             glBegin(GL_POINTS);
  16.                 glVertex3f(model->VertexArray[i].x, model->VertexArray[i].y, model->VertexArray[i].z);
  17.                 glNormal3f(model->NormalArray[i].x, model->NormalArray[i].y, model->NormalArray[i].z);
  18.             glEnd();
  19.         }
  20.         GLErrorHandler();
  21.     }
  22. }
  23.  


Ich weiß nicht weiter!


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 1 Beitrag ] 
Foren-Übersicht » Programmierung » OpenGL


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 7 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.008s | 16 Queries | GZIP : On ]