我正在寻找一个适当的简单示例。
现在,我有一些基于教程的内容,但是看不到三角形中间的变化。看来每个三角形都会改变颜色,但只会整体改变。
out vec3 vertex_normal;
out vec3 vertex_light_position;
..在顶点着色器上。
与
vertex_normal = normalize(NormalMatrix * in_Normal);
// old gl_NormalMatrix: "transpose of the inverse of the upper
// leftmost 3x3 of gl_ModelViewMatrix"
mat3 NormalMatrix = transpose(
inverse(
mat3(
ModelViewMatrix
)
)
);
在片段着色器上:
float diffuse_value = MAX(dot(vertex_normal, vertex_light_position), 0.0);
gl_FragColor = out_Color * diffuse_value
但是正如我所说,每个三角形似乎都是纯色的(仅在整体上发生变化)。
我听说规范化可能起作用,但是如果我normalize()vertex_normal,则结果相同。
最佳答案
检查vertex_normal
和vertex_light_position
的值。您可以通过使片段着色器执行以下操作:gl_FragColor = vertex_normal
我不确定vertex_light_position
是什么,但是听起来从顶点到灯光应该是法线,而不是灯光的绝对位置。
编辑:
见http://www.opengl.org/sdk/docs/tutorials/ClockworkCoders/lighting.php