2016-06-29 10 views
0

Ich schrieb Shader für diffuse Blitze.
Normalen, die im Vertex Shader berechnen: normal = gl_NormalMatrix * gl_Normal;
Aber wenn ich die Kamera rotiere, fangen auch die Normalen an, mit der Kamera zu rotieren. Wie man es repariert?Warum Normale mit der Kamera rotieren?

Antwort

1

Sie müssen Ihre normale Matrix falsch generieren.

NormalMatrix = transpose(inverse(ModelMatrix * ViewMatrix)) 

Auch wenn Sie gezwungen sind, gl_NormalMatrix und gl_Normal zu verwenden, sollten Sie Shader-Uniformen und in Variablen verwenden, und die Matrizen selbst, anstatt mit dem älteren Modell berechnen.

Wenn Sie nicht wissen, wie das geht, sollten Sie ein Tutorial zu OpenGL 4 finden, um die programmierbare Shader-Pipeline zu lernen. OGLDev ist ziemlich gut.

+0

Wie kann ich ModelMatrix und ViewMatrix im Vertex-Shader bekommen? – NoName

+0

@NoName ".. Sie sollten Shader-Uniformen verwenden". Außerdem empfehle ich [Learn OpenGL] (http://learnopengl.com/#!Getting-started/Shaders) über OGLDev. Ich habe 10-20 verschiedene OGL Tutorials ausgewertet, und dieses hat bei weitem die genauesten Informationen bezüglich moderner OGL. – Dan

+0

@Dan Danke, ich habe Änderungen in Ihrer Antwort gesehen. Danke, OGLDev ist eine gute Ressource. – NoName