2010-09-24 19 views
5

Soy nuevo en OpenGL. Estoy usando JOGL.OpenGL: Crear un cuadro de cielo?

Me gustaría crear un cielo para mi mundo que pueda texturizar con nubes o estrellas. No estoy seguro de cuál es la mejor manera de hacer esto. Mi primer instinto es crear una esfera realmente grande con orientación cuádrica GLU_INSIDE, y texturizar eso. ¿Hay una mejor manera?

+0

Aquí una [muestra de mapa de cubo de jogl] (https://github.com/java-opengl-labs/jogl-samples/blob/master/jogl-samples/src/tests/gl_320/texture/Gl_320_texture_cube.java) – elect

Respuesta

5

Sí.

Hacer una esfera realmente grande tiene dos problemas principales. Primero, puede encontrar problemas con el recorte. El cielo puede desaparecer si está fuera de la distancia de recorte. Además, los objetos que ingresen a su caja del cielo a distancia pasarán visualmente a través de una pared muy sólida. En segundo lugar, está desperdiciando muchos polígonos (y mucho dolor) para obtener un efecto muy simple.

La mayoría de las personas usa un cubo pequeño (de ahí el nombre "Caja de cielo"). Debe renderizar el cubo en el pre-pase con la prueba de profundidad desactivada. Por lo tanto, todos los objetos se mostrarán en la parte superior del cubo, independientemente de su distancia real hacia usted. Solo asegúrate de que la longitud de un lado sea mayor que el doble de tu distancia de recorte cercana, y deberías estar bien.

10

Un skybox es una muy buena forma de hacerlo. Querrá usar un cube map para esto. Básicamente, renderizas un cubo alrededor de la cámara y trazas una textura en el interior de cada cara del cubo. Creo que OpenGL puede incluir esto en su pipeline de función fija, pero en caso de que esté tomando el enfoque shader (la función fija está obsoleta), querrá usar samplers de mapas en cubos (samplerCUBE en Cg, no estoy seguro acerca de GLSL). Al dibujar el mapa del cubo, también debe eliminar la traducción de la matriz de la vista modelo, pero mantener la rotación (esto hace que la caja del cielo "siga" la cámara pero le permite mirar alrededor en diferentes partes del cielo).

Lo mejor que se puede hacer es dibujar el mapa del cubo después de dibujar todos los objetos opacos. Esto puede parecer extraño porque de forma predeterminada el cielo bloqueará otros objetos, pero utiliza el siguiente truco (si usa sombreadores) para evitar esto: al escribir la posición de salida final en el sombreado de vértices, en lugar de escribir .xyzw, escriba .xyww . Esto forzará el cielo hacia el plano lejano que hace que esté detrás de todo. ¡La ventaja de esto es que hay absolutamente 0 sobregiros!

+0

+1 - Buen punto sobre el sobregiro. En general, esta respuesta es más completa que la mía. – Andres

0

Las esferas son agradables de manejar, ya que evitan fácilmente las distorsiones, las esquinas, etc., que pueden ser visibles en algunas situaciones. Otra posibilidad es un cilindro.

Para un cielo de muy alta calidad puede hacer una simulación de iluminación del cielo, configurando los colores esféricos según el tiempo (=> posición del sol!) Y dirección, y agregue algunas nubes como objetos 3D entre el cielo y la vista posición.

Cuestiones relacionadas