Pregunta

Me gustaría tratar de poner en práctica algunas de HCl para mi aplicación OpenGL existentes. Si es posible, los menús deben aparecer en frente de mis gráficos en 3D que sería en el fondo.

Yo estaba pensando en dibujar un cuadrado directamente en frente de la "cámara", y luego, ya sea dibujo texturas o más primatives en la parte superior de la "base" cuadrado.

Mientras que los menús están activas la cámara no puede moverse, por lo que la cámara no se ve fuera de los menús.

¿Suena esto ahora feteched a cualquiera o estoy en el camino correcto? ¿Cómo sería que todos los demás hacerlo?

¿Fue útil?

Solución

Me acaba de glPushMatrix, glLoadIdentity, hacer su dibujo, a continuación, glPopMatrix y no preocuparse por su cámara, donde es.

También tendrá que deshabilitar y volver a habilitar la prueba de profundidad, iluminación y tal

Otros consejos

No es la biblioteca GLUI para hacer esto (sin experiencia personal)
O si está utilizando Qt hay formas de representación componentes Qt forma transparente en la parte superior del modelo de OpenGL, también hay soporte beta para la prestación de todos Qt en OpenGL.

También se puede hacer todo el procesamiento de 3D, a continuación, cambiar a la proyección ortográfica y sacar todos los objetos de menú. Esto sería mucho más fácil que poner todo en una gran quad con cartel como usted sugiere.

este exerpt , específicamente el epígrafe "Las transformaciones de proyección".

Como se ha dicho aquí , es necesario aplicar una traducción de 0.375 en X e y para obtener una alineación perfecta de píxeles:

glViewport(0, 0, width, height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0, width, 0, height);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslatef(0.375, 0.375, 0.0);
/* render all primitives at integer positions */

El algoritmo es simple:

  1. Dibujar la escena 3D, presumiblemente con la prueba de la profundidad habilitado.
  2. Desactivar las pruebas de profundidad para que sus elementos GUI dibujarán sobre la materia 3D.
  3. Uso glPushMatrix a que almacena vista del modelo actual y matrices de proyección (suponiendo que desea restaurar ellos - de lo contrario, solo triunfo en ellos)
  4. configurar su vista de modelo y de proyección matrices como se describe en el código anterior
  5. Dibujar su materia interfaz de usuario
  6. Uso glPushMatrix para restaurar sus matrices empujadas (suponiendo que los empujó)

Hacerlo de esta manera hace que la posición de la cámara irrelevante - de hecho, como la cámara se mueve, las piezas 3D se verán afectados de forma normal, pero la superposición 2D permanece en su lugar. Estoy esperando que este es el comportamiento que desea.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top