Ich hatte Probleme, Informationen zu Abziehbildern zu finden. Vielleicht hilft diese Frage anderen. Die Implementierung ist für einen Forward-Renderer.
Könnte jemand bestätigen, ob ich die Implementierung des Abziehbilds richtig gemacht habe?
- Sie definieren einen Würfel mit einer beliebigen Dimension, die das Projektionsvolumen im gemeinsamen Raum definiert. Sie suchen nach Dreiecksschnittpunkten mit dem definierten Würfel, um Dreiecke zu erhalten, auf die sich die Projektion auswirkt.
- Sie schneiden diese Dreiecke ab und speichern sie.
- Anschließend verwenden Sie Matrixtricks, um die UV-Koordinaten für die gespeicherten Dreiecke zu berechnen, die auf die projizierte Textur verweisen.
- Dazu nehmen Sie die Vektoren, die Höhe, Breite und Tiefe des Würfels im gemeinsamen Raum darstellen, so dass z. B. die untere linke Ecke der Ursprung ist.
- Sie setzen das in eine Matrix als i, j, k Einheitsvektoren, setzen die Translation für den Würfel und invertieren dann diese Matrix.
- Sie multiplizieren die Eckpunkte der gespeicherten Dreiecke mit dieser Matrix. Auf diese Weise erhalten Sie ihre Koordinaten innerhalb eines Würfels der Größe 0 bis 1, den Sie als UV-Koordinaten verwenden.
- Auf diese Weise haben Sie die ursprünglichen Dreiecke, auf die Sie projizieren, und Sie haben UV-Koordinaten für diese (die UV-Koordinaten beziehen sich auf die Textur, die Sie projizieren).
- Dann rendern Sie die gespeicherten Dreiecke erneut auf die Szene und sie überschreiben den Projektionsbereich mit dem projizierten Bild.
Nun die Fragen, auf die ich keine Antworten finden konnte. Ist der letzte Punkt richtig? Ich habe noch nie Software-Clipping durchgeführt, aber es scheint aufgrund der begrenzten Genauigkeit fehleranfällig genug zu sein, dass es zu einigen z-Kämpfen für die projizierte Textur kommt. Ist die Art und Weise, UV-Koordinaten zu erhalten, auch korrekt?