openGL中冯氏光照模型(世界空间)
3 月,跳不动了?>>> 光照 = 环境光照 + 漫反射光照 + 镜面光照 漫反射:法向量 + 光源方向向量 镜面反射:反射向量+视点向量 ;其中视点向量= 照相机位置坐标 - 片段坐标 法向量:整个片段着色器里的计算都是在世界空间坐标中进行的,所以应该将法向量变换到世界坐标中。 具体证明在该博客: http://www.lighthouse3d.com/tutorials/glsl-12-tutorial/the-normal-matrix/ 在世界坐标系中,法向量与平面垂直,变化后不再垂直。求变化后的法向量 拍摄物体顶点着色器: out vec3 Normal; out vec3 WorldPos; uniform mat4 model; uniform mat4 view; uniform mat4 projection; void main() { gl_Position = projection * view * model * vec4(aPos, 1.0); TexCoord = vec2(aTexCoord.x,1- aTexCoord.y); WorldPos = vec3(model * vec4(aPos, 1.0)); Normal = mat3(transpose(inverse(model))) * normal; } 拍摄物体片段着色器: