现代GLSL中的Per Pixel照明?

时间:2010-09-17 21:25:13

标签: opengl graphics opengl-3

我正在寻找一个恰当的简单例子。

现在我有一些基于教程的东西,但我没有看到三角形中间的变化。看起来每个三角形都会改变颜色,但只是整体。

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就会产生相同的结果。

1 个答案:

答案 0 :(得分:4)

检查vertex_normalvertex_light_position的值。您可以通过使片段着色器执行此操作来执行此操作:

gl_FragColor = vertex_normal

我不确定vertex_light_position是什么,但听起来它应该是从顶点到光的 normal ,而不是光的绝对位置。

编辑: 见http://www.opengl.org/sdk/docs/tutorials/ClockworkCoders/lighting.php