我正在寻找一个恰当的简单例子。
现在我有一些基于教程的东西,但我没有看到三角形中间的变化。看起来每个三角形都会改变颜色,但只是整体。
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
但正如我所说,每个三角形看起来都是纯色(只有整体变化)。
我听说规范化可能起作用,但如果我规范化()vertex_normal就会产生相同的结果。
答案 0 :(得分:4)
检查vertex_normal
和vertex_light_position
的值。您可以通过使片段着色器执行此操作来执行此操作:
gl_FragColor = vertex_normal
我不确定vertex_light_position
是什么,但听起来它应该是从顶点到光的 normal ,而不是光的绝对位置。
编辑: 见http://www.opengl.org/sdk/docs/tutorials/ClockworkCoders/lighting.php