tutorial triangulo texture iluminacion for dibujar descargar beginners opengl

triangulo - Pregunta para novatos de OpenGL: ¿qué es la eliminación de caras traseras?



opengl tutorial c (4)

La eliminación de caras traseras es cuando los triángulos que apuntan lejos de la cámara / punto de vista no se consideran para dibujar.

Wikipedia define esto como:

Es un paso en la tubería gráfica que prueba si los puntos en el polígono aparecen en sentido horario o en sentido antihorario cuando se proyectan en la pantalla. Si el usuario ha especificado que los polígonos frontales tienen un bobinado en el sentido de las agujas del reloj, si el polígono proyectado en la pantalla tiene un bobinado en sentido contrario a las agujas del reloj, se ha girado hacia la cámara y no se dibujará.

Otros sistemas usan la cara normal y hacen el producto escalar con la dirección de la vista.

Es una manera relativamente rápida de decidir si dibujar un triángulo o no. Considera un cubo. En cualquier momento, 3 de los lados del cubo estarán mirando hacia afuera del usuario y, por lo tanto, no serán visibles. Incluso si se dibujaran, quedarían ocultos por los tres lados enfrentados "hacia adelante". Al realizar la eliminación de caras traseras, se reduce la cantidad de triángulos dibujados de 12 a 6 (2 por lado).

El sacrificio de la parte posterior de la cara funciona mejor con objetos "sólidos" cerrados como cubos, esferas y paredes.

Algunos sistemas no tienen esto, ya que consideran que las caras tienen doble cara y, por lo tanto, son visibles desde cualquier dirección.

¿Qué es exactamente el sacrificio preventivo en OpenGL? ¿Puedes darle a mi un ejemplo específico con, por ejemplo, un triángulo?


Los triángulos tienen sus coordenadas especificadas en un orden específico, IIRC en el sentido de las manecillas del reloj.

Cuando el motor de gráficos mira un triángulo desde una dirección específica, y las coordenadas son en sentido contrario a las agujas del reloj, sabe que está mirando la parte posterior del triángulo a través de un objeto. Como el anverso del objeto cubre el triángulo, no es necesario dibujarlo.


Si miras detenidamente, puedes ver ejemplos de esto en muchos videojuegos. Cada vez que la cámara se mueve accidentalmente a través de un objeto, normalmente un objeto en movimiento como un personaje, observe cómo el mundo continúa renderizando correctamente. Esto se debe a que los lados posteriores de los triángulos que forman la piel del personaje no se representan; ellos son efectivamente transparentes. Si no fuera así, cada vez que la cámara se moviera accidentalmente dentro de un objeto, la pantalla se volvería negra (porque el interior del objeto no está iluminado) o se obtendría una perspectiva extraña de cómo se ve la piel del objeto. desde el interior.


Es solo y una técnica de optimización.

Cuando miras un objeto cerrado, digamos un cubo, solo ves alrededor de la mitad de las caras: las caras que están hacia ti (o, al menos, las caras que no están hacia ti siempre están ocluidas por otra cara que apunta hacia ti)

Si omite dibujar todas estas caras orientadas hacia atrás, tendrá dos consecuencias: - el tiempo de renderización será dos veces mejor (en promedio) - la renderización final no cambiará (ya que otra, cara frontal se dibujará en la parte superior) de uno "culled")

Entonces, básicamente obtienes x2 perf de forma gratuita.

Para saber si el triángulo está orientado hacia adelante o hacia atrás, tome v0-v1 y v0-v2, haga un producto cruzado. Esto te da la cara normal. Si este vector está hacia ti (punto (normal, viewVector) <0), dibuja.