transparencia studio sobre rendicion programacion preguntas móviles desarrollo curso cuentas aplicaciones opengl geometry distance blending

studio - Algunas preguntas sobre la transparencia OpenGL



preguntas sobre transparencia y rendicion de cuentas (1)

Tengo dos preguntas sobre la mezcla de OpenGL.

1) Sé que primero tengo que dibujar objetos opacos y luego dibujar de atrás hacia adelante los que no son opacos. Así que los puse en una lista que depende de la distancia al centro (0,0,0). ¿Pero las transformaciones (rotar y traducir) afectan al "centro" desde donde mido la distancia?

2) Y segundo, si los elementos que dibujo son triángulos, ¿cómo mido la distancia? ¿A su incentro? ¿A su ortocentro?


Sin duda, debe tener en cuenta las transformaciones para la clasificación. Aplicar todas las transformaciones y luego ordenarlas por la profundidad resultante (coordenada z) es el enfoque más directo.

Una forma más eficiente de lograr lo mismo es aplicar las transformaciones inversas a la dirección de visualización una vez para cada objeto (o conjunto de objetos que usan las mismas transformaciones), y luego calcular la profundidad de cada vértice / triángulo como el producto de puntos del vértice con este vector de vista transformado de forma inversa. Esto requerirá solo un producto de puntos por triángulo, en lugar de aplicarles transformaciones completas. Y la cantidad de triángulos suele ser de órdenes de magnitud mayor que la cantidad de objetos.

En cuanto a qué punto usar: Realmente no hay una solución que funcione para todos los casos. El centro del triángulo debería ser tan bueno como cualquier cosa. Este enfoque completo es una aproximación que funcionará suficientemente bien en muchos casos, pero no será del todo correcto en algunos escenarios.

Para ilustrar los desafíos fundamentales con la transparencia dependiente del orden, veamos algunos ejemplos. En la siguiente figura, la dirección de la vista es de izquierda a derecha, y observamos dos triángulos A y B en el borde:

/ / B / / / / / view -----> / A / /

Visualmente, está claro que B está detrás de A, y debe dibujarse primero. Todavía:

  • El punto más cercano de B está más cerca del punto de vista que el punto más cercano de A.
  • El punto más alejado de B está más cerca del punto de vista que el punto más alejado de A.
  • El punto central de B está más cerca del punto de vista que el punto central de A.

No puede ordenar estos triángulos correctamente al comparar un solo valor de profundidad de cada uno de ellos. Para manejar esto correctamente, debe tener en cuenta la geometría y utilizar criterios más complejos para ordenarlos correctamente.

Luego hay casos en los que no hay un pedido válido:

/ / / / view -----> // // B A / /

Aquí, no hay un orden de clasificación para A y B que sea válido. Las partes de B están detrás de A, y partes de A están detrás de B. Este será el caso siempre que tengas triángulos intersecados. La única forma de resolverlo correctamente es dividir triángulos.

También hay configuración sin triángulos que se cruzan donde no hay un orden válido. Este es un ejemplo con 4 triángulos, mirando desde la parte superior esta vez:

___________ |/ / | __|_/________/ |___ | / |__/ | ______/ | |________/ / | | / /_____|__ | /_______/ | __| / | /__| /______________| | / / | |__________/ /|

Estas dificultades son una razón importante por la cual los métodos de representación de transparencia independientes son tan atractivos, más allá de simplemente evitar la sobrecarga de la clasificación.