Necesito saber cómo puedo hacer que el palco aparezca como está en el infinito? Sé que es algo relacionado con la profundidad, pero no sé exactamente qué desactivar o habilitar?OpenGL: ¿Cómo puedo poner el palco en el infinito
Respuesta
En primer lugar, apague la profundidad escribe/prueba (que no tiene que molestarse con la desactivación de las pruebas de profundidad si se dibuja el palco primero y despejar su buffer de profundidad):
glDisable(GL_DEPTH_TEST);
glDepthMask(false);
A continuación, mover la cámara al origen y girarlo la inversa de la matriz modelview:
// assume we're working with the modelview
glPushMatrix();
// inverseModelView is a 4x4 matrix with no translation and a transposed
// upper 3x3 portion from the regular modelview
glLoadMatrix(&inverseModelView);
Ahora, llamar su cuadro de cielo y girar de nuevo en profundidad escribe:
DrawSkybox();
glPopMatrix();
glDepthMask(true);
glEnable(GL_DEPTH_TEST);
Probablemente querrá usar glPush/PopAttrib()
para asegurarse de que sus otros estados se configuren correctamente después de dibujar el skybox también (asegúrese de apagar cosas como encender o mezclar si es necesario).
Debería hacer esto antes de dibujar cualquier cosa para que todas las memorias de búfer de color sucedan en la parte superior de su casilla de cielo.
Lo mejor que puedo pensar es dibujarlo en una primera pasada (o capa), luego borrar solo el buffer de profundidad. Después de eso simplemente dibuja el resto de la escena en otro pase. De esta forma, la caja del cielo siempre permanecerá "detrás" de la escena. Solo recuerde usar la misma cámara para ambos pases y de alguna manera ajustar el palco celeste a la cámara.
Primero, despeje el almacenamiento intermedio.
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
Luego, guarde su matriz modelview actual y cargue la identidad.
glPushMatrix();
glLoadIdentity();
A continuación, renderice su skybox.
Skybox.render();
A continuación, borrar el buffer de profundidad y continuar normalmente con la representación
glClear(GL_DEPTH_BUFFER_BIT);
OtherStuff.render();
glutSwapBuffers();
El único problema con el dibujo de la caja cielo es primero es que el sombreado de píxeles se ejecutará para cada píxel en el cuadro de cielo. Solo para ser sobreescrito por otro objeto en tu mundo más adelante. Su mejor opción es renderizar primero todos los objetos opacos y luego renderizar su casilla celeste. De esta forma, el sombreador de píxeles para el recuadro del cielo solo se ejecuta para el píxel que pasa la prueba del tampón z.
- 1. ¿Cómo expresar el infinito en Ruby?
- 2. costuras Skybox en OpenGL
- 3. Cómo vibrar un iPhone hasta el infinito
- 4. Hasta el infinito y volver
- 5. Cómo poner una vista en el paquete
- 6. cómo poner texto en el borde
- 7. ¿Cómo poner el texto en un dibujable?
- 8. ¿Cómo organizar el bucle while infinito en SQL Server?
- 9. ¿Cómo se divide un infinito para el bucle (;;) en C?
- 10. Deliberadamente definir el tipo infinito en haskell
- 11. Las pruebas para el infinito en CUDA
- 12. ¿Cómo puedo poner comillas en una cadena?
- 13. ¿Cómo poner timedelta en el modelo django?
- 14. ¿Cómo poner borde en el área?
- 15. Cómo poner una lista en el intento
- 16. ¿Cómo puedo poner [] (corchetes) en RegExp javascript?
- 17. ¿Cómo se calcula el FPS en OpenGL?
- 18. ¿Cómo mostrar el texto Unicode en OpenGL?
- 19. No puedo poner el archivo en RAM con ftp seguro
- 20. ¿Puedo poner diferentes tipos de objetos en el mismo NSMutableArray?
- 21. ¿Cómo puedo poner datos JSON en CoffeeScript?
- 22. ¿Cómo puedo poner Regex.Matches en una matriz?
- 23. Cómo detener el bucle infinito en script bash con gracia?
- 24. ¿Puedo poner el código de Java dentro del .jrxml (jasperreport)?
- 25. PHP: establecer la variable hasta el infinito
- 26. Jugar con el infinito: aritméticos vagos
- 27. IIS 7.5 Reescribir el error? Bucle infinito
- 28. ¿cómo puedo poner un punto de interrupción en "algo está impreso en el terminal" en gdb?
- 29. ¿Cómo puedo verificar si un número se evalúa hasta el infinito?
- 30. ¿Cómo puedo configurar el receiveTimeout y sendTimeout al infinito con este contacto WCF?
skybox como lo primero que se representa es la mejor manera de perder un montón de ancho de banda. – Bahbar
Es cierto, sin embargo, creo que el OP aún no está preocupado por el rendimiento. Dibujar el último palco es más complicado ya que debes asegurarte de haber manejado los objetos transparentes y lejanos correctamente para no engancharlos en el palco celestial. La optimización para la prueba Z temprana debe realizarse después de que tenga una implementación en funcionamiento. –