Pregunta

No estoy del todo seguro de si puedo hacer lo que quiero aquí, pero tengo un montón de objetos que se queden en OpenGL (usando JOGL). Para un grupo de objetos, quiero asegurar que ciertos objetos en ese grupo se representan frente a otros objetos de ese grupo. He intentado borrar el bit de buffer de profundidad y haciendo el "frente" objetos pasada, y que las obras, excepto que meta la pata otra buffer de profundidad en la pantalla.

Lo que se reduce a es que tengo una lista de objetos que se queden y quiero asegurar que ciertos objetos en esa lista se representan frente a otros objetos (todos ellos son al mismo coordenada Z sin embargo). ¿Hay una manera de hacer eso?

gracias, Jeff

¿Fue útil?

Solución

Esta es una técnica muy común para dibujar objetos transparentes (objetos que tienen partes con alfa! = 1).

El método más común es primero construir un árbol de objetos que se desprende que pueda a continuación, ordenar a lo largo de la "profundidad" después de haber pasado a través de las matrices de proyección * de la cámara. Básicamente en lugar de simplemente tirar a ciegas triángulos en la GPU, que envía sus objetos de uno en uno a medida que los está procesando en el mundo a un búfer temporal. Estos objetos tienen un conocimiento completo de cada triángulo y cada color de vértice / Vertex Shader / textura nombre + ID, etc. A continuación, puede ordenar su memoria intermedia (ya sea ingenua, objeto por objeto, o una especie en toda regla sobre la base de parches similares a través de los objetos).

El truco glDepthMask, si no recuerdo mal, es algo como esto:

glDepthMask(true);
drawOpaqueObjects();
glDepthMask(false);
drawTransparentObjects();

Para obtener los mejores resultados los objetos transparentes están ordenadas de regreso a la parte delantera, pero en la mayoría de las aplicaciones (simples) esto no importa.

Edit: Tenga en cuenta que para la segunda técnica, mientras se habilita y luego desactivar la profundidad de almacenamiento temporal ESCRITURA, todavía se utiliza profundidad de almacenamiento temporal PRUEBAS, objetos tan transparentes detrás de los objetos normales (un señalador casco "en" la pantalla por ejemplo) ganó' t se ven inmersos.

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