2012-06-19 19 views
5

Estoy haciendo una GUI en OpenGL (más específicamente lwjgl). He intentado investigar diferentes formas de hacerlo, pero estoy teniendo dificultades para encontrar exactamente lo que quiero. No quiero usar ninguna biblioteca externa (solo las compiladas en OpenGL, incluso tratando de evitar el uso de GLUT) y me gustaría que funcione en cualquier cosa que admita OpenGL (por ejemplo, los objetos Frame Buffer no funcionan en versiones anteriores). tarjetas gráficas).OpenGL dibujar objeto parcial en el panel desplazable

Estoy haciendo una interfaz gráfica de usuario en 3D con un panel desplazable como componente. El problema es que no sé cómo dibujar un componente de GUI parcial sin hacer muchos cálculos para representar solo una parte. Estoy haciendo que los componentes salgan de las primitivas de OpenGL, no de las texturas. Esperaba que hubiera una manera fácil de hacerlo, como usar múltiples ventanas gráficas. Realmente no entiendo qué son los viewports.

En resumen: Necesito tener un panel desplazable como componente que se superpone a otros componentes de la GUI (ya que será un menú desplegable) y no permitir que ninguno de los componentes de mi panel se dibuje fuera de mi panel.

Respuesta

6

Si solo desea evitar el dibujo de píxeles que están fuera de una región rectangular (y creo que eso es lo que está preguntando), entonces glScissor es exactamente lo que está buscando.

En lwjgl, puede encontrar la función en org.lwjgl.opengl.GL11.

+1

También puede aprovechar GL_GLIP_PLANEs, estos le permitirán recortar en el espacio modelo (en caso de que las coordenadas de su GUI no coincidan con los píxeles de la ventana gráfica). – Kromster

+0

Gracias, eso es exactamente lo que estaba buscando – axelrod360

1

Si desea desplazarse por una escena más grande dentro de una región fija de la pantalla, el camino más directo es modificando la matriz de proyección para la posición de desplazamiento y redibujando la escena. Si está utilizando gluPerspective para configurar su matriz de proyección, deberá convertirla en una llamada directa a glFrustum; si usas glOrtho, es mucho más sencillo.

Tenga en cuenta que "desplazar" una vista en perspectiva no tiene una forma correcta de hacer las cosas: depende del tipo de efecto que desee lograr y del tipo particular de distorsión que desee cerca de los bordes de la ventana gráfica .

Cuestiones relacionadas