Tuve problemas para encontrar información sobre las calcomanías, por lo que tal vez esta pregunta ayude a otros. La implementación es para un renderizador hacia adelante.
¿Alguien podría confirmar si obtuve la implementación correcta de la calcomanía?
- Define un cubo de cualquier dimensión que definirá el volumen de proyección en el espacio común. Verifica la intersección del triángulo con el cubo definido para recibir triángulos a los que afectará la proyección.
- Recorta estos triángulos y guárdelos.
- Luego usa trucos de matriz para calcular las coordenadas UV para los triángulos guardados que harán referencia a la textura que está proyectando.
- Para hacer esto, toma los vectores que representan la altura, el ancho y la profundidad del cubo en el espacio común, de modo que la esquina inferior izquierda es el origen.
- Pones eso en una matriz como los vectores unitarios i, j, k, configuras la traducción para el cubo, luego inviertes esta matriz.
- Multiplica los vértices de los triángulos guardados por esta matriz, de esa manera obtienes sus coordenadas dentro de un cubo de tamaño 0 a 1 que utilizas como coordenadas UV.
- De esta manera, tiene los triángulos originales sobre los que está proyectando y tiene coordenadas UV para ellos (las coordenadas UV hacen referencia a la textura que está proyectando).
- Luego, vuelve a colocar los triángulos guardados en la escena y sobrescriben el área de proyección con la imagen proyectada.
Ahora las preguntas para las que no pude encontrar respuestas. ¿Es correcto el último punto? Nunca he hecho el recorte de software, pero parece bastante propenso a errores, debido a la precisión limitada, que se producirán algunas luchas z por la textura proyectada. ¿También es correcta la forma de obtener coordenadas UV?