Ich lerne OpenGL-Grafiken und komme in den Schatten. Die Tutorials, die ich lese, sagen mir, dass ich meine Normalen und den Lichtvektor in den Kameraraum umwandeln soll. Warum ist das? Warum kannst du nicht einfach die Koordinaten im Modellraum behalten?Warum verwenden Sie Kameraraum statt Modellraum für Normalen?
Eine weitere Frage dazu ist, wie man mit Modelltransformationen umgehen kann. Ich kann keine definitive Antwort finden. Ich habe derzeit diesen Code:
vec3 normCamSpace = normalize(mat3(V) * normal);"
vec3 dirToLight = (V*vec4(lightPos, 0.0)).xyz;"
float cosTheta = clamp(dot(normCamSpace, dirToLight),0,1);"
V ist die Ansicht Matrix oder die Kameramatrix. Ich bin mir nicht sicher, wie das Licht bewegt oder bearbeitet wird, wenn sich das Modell in Position, Rotation und Skalierung ändert.
In Ordnung, das macht Sinn, obwohl ich diese Ebene der Trennung habe.Ich bin jedoch immer noch unsicher, wie ich die Lichtquelle und die Positionen so verändern soll, dass sie sich für Dinge wie Rotationen und Übersetzungen eignen. – user975989
Der kanonische Weg besteht darin, die Lichtposition so umzuwandeln, wie Sie die Eckpunktposition transformieren. Und im Falle von Spotlights (für die Sie die Spot-Richtung benötigen) transformieren Sie die Spot-Richtung genau so, wie Sie die Normalen transformieren würden. Für jede Transformationsmatrix zwischen Räumen (dies gilt auch für die Transformation von beispielsweise Welt zu Modell lokal) ist die normale Transformation immer die inverse Transponierte der Positionstransformation. – datenwolf