Opengl 现代GLSL中的每像素照明?

Opengl 现代GLSL中的每像素照明?,opengl,graphics,opengl-3,Opengl,Graphics,Opengl 3,我在寻找一个合适的简单例子 现在我有一个基于教程的东西,但是我没有看到三角形中间的变化。看起来每个三角形都会改变颜色,但只会改变整个三角形 out vec3 vertex_normal; out vec3 vertex_light_position; 。。在顶点着色器上 与 在片段着色器上: float diffuse_value = MAX(dot(vertex_normal, vertex_light_position), 0.0); gl_FragColor =

我在寻找一个合适的简单例子

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

out vec3 vertex_normal;         
out vec3 vertex_light_position; 
。。在顶点着色器上

在片段着色器上:

float diffuse_value = MAX(dot(vertex_normal, vertex_light_position), 0.0);

gl_FragColor =  out_Color * diffuse_value
但正如我所说的,每个三角形看起来都是纯色(只在整体上发生变化)


我听说规范化可能会起作用,但如果我规范化()顶点法线,结果是一样的。

检查
顶点法线
顶点灯光位置
的值。可以通过使片段着色器执行以下操作来完成此操作:

gl\u FragColor=vertex\u normal

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

编辑:
请参见

灯光位置基于旧的gl_光源[0]。position.xyz。我被告知那是一个静态灯光位置。[在我基于它的教程中是这样使用的]好的,所以如果
顶点法线
顶点光照位置
都是每像素恒定的,那么
漫反射值
将是每像素恒定的,并且有平面着色。这是有意义的。那么,发生了什么变化?这里有一个简单的教程,说明教程是错误的。VS的第8行是错误的,这使得FS的第7行是错误的。请参阅添加到我的答案中的教程。缺少的是需要计算每像素的L,这是从灯光位置到插值顶点位置的法线。
float diffuse_value = MAX(dot(vertex_normal, vertex_light_position), 0.0);

gl_FragColor =  out_Color * diffuse_value