triangle solid how example cubo compiler c++ opengl

solid - opengl c++ example



Opengl: 2d HUD sobre 3D (3)

Si está superponiendo una proyección orto en 2D sobre 3D, generalmente querrá que el búfer de profundidad salga de la ecuación:

glDepthMask(GL_FALSE); // disable writes to Z-Buffer glDisable(GL_DEPTH_TEST); // disable depth-testing

Por supuesto, querrá restablecerlos a sus valores originales antes de realizar su próxima pasada 3D.

He analizado algunas de las preguntas publicadas aquí sobre el tema y todavía no puedo entender por qué aparece mi HUD 2d, pero hace que desaparezca mi mundo Renderizado 3D.

EDITAR: Parece que la escena 2d está tomando el control de toda la pantalla, así que de vez en cuando puedo ver la escena 3D a través de la escena 2d. Por lo tanto, aunque es el único que está representando un cuadrante de 10 x 10 píxeles, esto lo deja en blanco y se queda en blanco en el resto de la pantalla.

glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(40.0,(GLdouble)x/(GLdouble)y,0.5,20.0); glMatrixMode(GL_MODELVIEW); glViewport(0,0,x,y); glClear(GL_COLOR_BUFFER_BIT); glLoadIdentity(); glTranslatef(0.0,-0.5,-6.0); glPushMatrix(); ..Draw some 3d stuff... glPopMatrix(); // Start 2d glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(0, SCREEN_WIDTH, SCREEN_HEIGHT, 0, -1, 1); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glColor3f(0.0f, 255.0f, 1.0f); glBegin(GL_QUADS); glVertex2f(0.0, 0.0); glVertex2f(10.0, 0.0); glVertex2f(10.0, 10.0); glVertex2f(0.0, 10.0); glEnd();

Luego cambio los buffers

Aquí está el orden de mi código. Es como que hace que el espacio 3d luego haga el espacio 2d que a su vez cancela el espacio 3d.


Tomó un poco de tiempo resolverlo, así que en caso de que otros tengan los mismos problemas:

...After Drawing 3d Stuff... glMatrixMode(GL_PROJECTION); glPushMatrix(); glLoadIdentity(); glOrtho(0.0, SCREEN_WIDTH, SCREEN_HEIGHT, 0.0, -1.0, 10.0); glMatrixMode(GL_MODELVIEW); //glPushMatrix(); ----Not sure if I need this glLoadIdentity(); glDisable(GL_CULL_FACE); glClear(GL_DEPTH_BUFFER_BIT); glBegin(GL_QUADS); glColor3f(1.0f, 0.0f, 0.0); glVertex2f(0.0, 0.0); glVertex2f(10.0, 0.0); glVertex2f(10.0, 10.0); glVertex2f(0.0, 10.0); glEnd(); // Making sure we can render 3d again glMatrixMode(GL_PROJECTION); glPopMatrix(); glMatrixMode(GL_MODELVIEW); //glPopMatrix(); ----and this? ...Then swap buffers...

:)


glViewport(0, 0, x, y); //You need to do this only once on viewport resize //Setup for 3D glMatrixMode(GL_PROJECTION); glLoadIdentity; gluPerspective(40.0, (GLdouble)x/(GLdouble)y, 0.5, 20.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity; glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BIT); // ... Render 3D ... //Setup for 2D glMatrixMode(GL_PROJECTION); glLoadIdentity; glOrtho(0, SCREEN_WIDTH, SCREEN_HEIGHT, 0, -1, 1); glMatrixMode(GL_MODELVIEW); glLoadIdentity; glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BIT); // ... Render 2D ... SwapBuffers;

Tenga en cuenta que no es necesario manejar Push / Pop de matrices si renderiza 2D completamente sobre 3D.