Suchergebnisse
Suchergebnisse 1-4 von insgesamt 4.
Konnte das Problem lösen. Hatte nicht daran gedacht, zur Berechnung der Normalenmatrix nur den Diagonalanteil in Betracht zu ziehen: Quellcode 1 2 3 4 vec3 c1 = vec3(1.0f / Scaling.x, 0.0f, 0.0f); vec3 c2 = vec3(0.0f, 1.0f / Scaling.y, 0.0f); vec3 c3 = vec3(0.0f, 0.0f, 1.0f / Scaling.z); mat3 normalMat = mat3(c1, c2, c3); Damit funktioniert es nun einwandfrei.
Die Normalen müssten sich doch immer mehr dem Up-Vektor angleichen, je niedriger die Y-Koordinate skaliert wird. Oder sehe ich das falsch? Nochmal zur Info: Die Skalierung der Achsen ist unabhängig möglich. D. h., es kann auch z. B. nur in Y-Richtung skaliert werden.
Schon einmal danke für die schnellen Antworten! Eine Rotation des Modells findet nicht statt. Nur eine Skalierung in X-, Y- und Z-Richtung. Was ich mit keinerlei Auswirkung meine: Wenn ich die Landschaft von der Höhe her z. B. so skaliere, dass alle Vertices auf einer Höhe sind, sind die Schattierungen immer noch vorhanden. So eine Art Pseudo-3D. Dies darf nicht sein. Die Normalen müssten in diesem Fall ja nach oben zeigen.
Hallo, ich möchte die Normalen korrekt transformieren, wenn ich eine Landschaft beliebig skaliere. Was ich bisher dazu gefunden habe, ist, dass man die inverse Matrix des Modells transponieren und mit der nicht transformierten Normalen multiplizieren muss. Die Umrechnung der Normalen findet bei mir im Vertex-Shader statt: Quellcode 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 ... layout(location=1) in vec4 VertexNormal; ... uniform mat4 ModelNormalMat; ... out vec3 Normal; ... ...