我一直在读一篇pdf file on OpenGL lighting。
上面写的是Gouraud阴影:
• Gouraud shading
– Set vertex normals
– Calculate colors at vertices
– Interpolate colors across polygon
• Must calculate vertex normals!
• Must normalize vertex normals to unit length!这就是我所做的。这是我的顶点和片段着色器文件
V_Shader:
#version 330
layout(location = 0) in vec3 in_Position; //declare position
layout(location = 1) in vec3 in_Color;
// mvpmatrix is the result of multiplying the model, view, and projection matrices */
uniform mat4 MVP_matrix;
vec3 ambient;
out vec3 ex_Color;
void main(void) {
// Multiply the MVP_ matrix by the vertex to obtain our final vertex position (mvp was created in *.cpp)
gl_Position = MVP_matrix * vec4(in_Position, 1.0);
ambient = vec3(0.0f,0.0f,1.0f);
ex_Color = ambient * normalize(in_Position) ; //anti ex_Color=in_Color;
}F_shader:
#version 330
in vec3 ex_Color;
out vec4 gl_FragColor;
void main(void) {
gl_FragColor = vec4(ex_Color,1.0);
}插值是由片段着色器负责的,对吧?
这是我的球体(它是低多边形btw):

这是实现Gouraud着色的标准方式吗?(我的球体中心为(0,0,0))谢谢您的耐心
发布于 2011-11-13 12:14:23
ex_Color = ambient * normalize(in_Position) ; //anti ex_Color=in_Color;请允许我使用quote myself,“这当然不符合‘照明’的要求。”从你第一次问这个问题到现在,这并没有停止。
这不是照明。这只是对模型空间位置进行标准化,并将其乘以环境色。即使我们假设模型空间的位置以零为中心并表示球体上的一个点,将灯光乘以法线也是没有意义的。这是而不是照明。
如果您想了解照明的工作原理,请参阅read this. Or this.
https://stackoverflow.com/questions/8109451
复制相似问题