我正在寻找一个适当的简单示例。

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

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_normalvertex_light_position的值。您可以通过使片段着色器执行以下操作:

gl_FragColor = vertex_normal

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

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

09-08 11:33