Tive problemas ao encontrar informações sobre decalques, talvez essa pergunta ajude outras pessoas. A implementação é para um renderizador de encaminhamento.
Alguém poderia confirmar se a implementação do decalque está correta?
- Você define um cubo de qualquer dimensão que definirá o volume da projeção no espaço comum. Você verifica a interseção do triângulo com o cubo definido para receber triângulos que a projeção afetará.
- Você corta esses triângulos e os salva.
- Em seguida, você usa truques de matriz para calcular coordenadas UV para os triângulos salvos que farão referência à textura que você está projetando.
- Para fazer isso, você pega os vetores que representam a altura, largura e profundidade do cubo no espaço comum, para que o canto inferior esquerdo seja a origem.
- Você coloca isso em uma matriz como os vetores unitários i, j, k, define a conversão para o cubo e depois inverte essa matriz.
- Você multiplica os vértices dos triângulos salvos por esta matriz, para obter as coordenadas deles dentro de um cubo de 0 a 1 tamanho que você usa como coordenadas UV.
- Dessa forma, você tem os triângulos originais nos quais está projetando e possui coordenadas UV para elas (as coordenadas UV referenciam a textura que você está projetando).
- Em seguida, você renderiza novamente os triângulos salvos na cena e eles substituem a área de projeção pela imagem projetada.
Agora, as perguntas para as quais não consegui encontrar respostas. O último ponto está certo? Eu nunca fiz o recorte de software, mas parece propenso a erros, devido à precisão limitada, que haverá alguma briga pela textura projetada. Também é a maneira de obter as coordenadas UV corretas?