我一直在閱讀pdf file on OpenGL lighting。是我的燈光正確嗎?
它說的洛德着色:
• 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):
這是實現洛德着色的標準方法是什麼? (我的球具有(0,0,0)中心) 感謝您的耐心
那是一個藍色球白光,或者周圍的其他方式? – Pubby
尚未指定任何淺色,如您所見。只是環境變量 –
「我一直在閱讀關於OpenGL照明的PDF文件,這裏是:www.cs.cmu.edu/~fp/courses/graphics/pdf-color/08-shading.pdf」該PDF文件解釋瞭如何固定功能GL工作。並沒有詳細解釋功能背後發生了什麼。爲什麼你會用這個而不是任何數量的基於着色器的照明教程來學習? –