2016-06-29 11 views
0

拡散照明のシェーダーを書きました。
法線は3Dモデルの回転とともに回転し、モデルを回転すると光が回転しているように見えます。それを修正する方法ノーマルモデルで移動

バーテックスシェーダ

position = gl_ModelViewMatrix * gl_Vertex; 
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; 
normal = vec4(gl_Normal, 1.0); <--- 
gl_TexCoord[0] = gl_MultiTexCoord0; 

フラグメントシェーダ

lightVector = normalize(vec4(lightPosition + cameraPosition, 1.0) - position); 
resultNormal = normalize(normal.xyz); <--- 

enter image description here

+0

れる空間の画像における法線であるのでなければならないので?ワールドスペース、ビュースペース?どのように計算しますか? – BDL

+0

関連:http://stackoverflow.com/questions/13654401/what-is-the-logic-behind-transforming-normals-with-the-transpose-of-the-inverse – PeterT

答えて

2

gl_NormalMatrixで法線を変換しているようには見えません。また、このラインは疑わしい:

normal = vec4(gl_Normal, 1.0); 

法線である方向ではなく、位置、その.w成分が0