我使用窗口來照相機中實現的每個片段的照明和光衰減變換:每片段照明和窗口照相機變換
vec4 ndcPos;
ndcPos.xy = ((gl_FragCoord.xy/windowSize.xy) * 2.0) - 1.0;
ndcPos.z = (2.0 * gl_FragCoord.z - gl_DepthRange.near - gl_DepthRange.far)/(gl_DepthRange.far - gl_DepthRange.near);
ndcPos.w = 1.0;
vec4 clipPos = ndcPos/gl_FragCoord.w;
vec3 cameraPos = vec3(clipToCameraMatrix * clipPos);
然後我使用lightPos和cameraPos來計算照明。 lightPos在世界空間中擁有固定的位置。我有ViewMatrix來處理fps風格的相機和ModelMatrix。早些時候,我使用頂點位置而不是窗口進行相機轉換,一切正常。現在,當我使用相機移動物體時,我得到的照明不正確。在上傳到片段着色器之前,LightPos將乘以ViewMatrix。
glUniform3fv(dirToLightUniformLocation, 1, glm::value_ptr(ViewMatrix * lightPos));
我不知道我在做什麼錯。
你的代碼看起來是正確的,所以這個錯誤是在你沒有發佈的代碼中。 –