Nein. Zu keinem Zeitpunkt sollten Sie jemals eine explizite Weltmatrix in Ihrem Shader haben.
Eine ausführliche Erklärung dafür, warum , finden Sie hier , aber die Kurzversion ist wirklich sehr einfach: Sie brauchen sie nie und sie kann Ihre Gleitkommapräzision beeinträchtigen.
Wenn Ihr Weltraum zu groß ist, kann eine Kamera, die weit vom Ursprung entfernt ist, Probleme mit der Gleitkommapräzision verursachen.
Der gesamte Weltraum ist nichts anderes als ein Vermittler zwischen Modellraum und Kameraraum. Hier können Sie die Kamera und alle anderen Objekte im selben Raum ausdrücken. Sie verwenden es jedoch nur, um eine Matrix von Welt zu Kamera zu generieren, die Sie dann auf alle Matrizen von Modell zu Welt anwenden, um Matrizen von Modell zu Kamera zu erstellen.
Sie können Präzisionsprobleme in C ++ lösen, indem Sie für Matrixberechnungen Doubles anstelle von Floats verwenden. Sie können diese wieder in Floats konvertieren, bevor Sie sie in den Shader hochladen.
Warum sollten Sie jemals eine explizite Weltraum-Transformation in Ihrem Shader benötigen ? In Ihrem Quellcode ja. Aber in deinem Shader? Was würden Sie damit machen, was Sie mit dem Kameraraum nicht machen können?
Die Beleuchtung kann im Kameraraum genauso einfach erfolgen wie im Weltraum. Alles, was Sie tun müssen, ist, Ihre Lichtpositionen / -richtungen in Kameraraum umzuwandeln. Immerhin hat der Kameraraum den gleichen Maßstab wie der Weltraum. Sie führen diese Transformation einmal pro Bild und Licht durch. selbst für die CPU kaum eine Leistungsbelastung.
Es macht also absolut keinen Sinn, Ihre Shader jemals einer expliziten Weltraumtransformation auszusetzen . Es ist nur ein Zwischenschritt, den Sie in Ihre Matrizen falten.