我正在尝试实现 Phong 着色模型,但不确定如何选择光源。更具体地说,我不明白光源应该是什么样子。它应该是vec3吗?或者也许是我在 Java 代码中定义的矩阵?另外,如果我们假设我希望相机成为光源,那么与不同的光源应该有什么不同,比如视图世界中的某个点?我真的很想得到一个解释,或者可能是一个关于我应该如何解决这样的事情而不仅仅是代码的指导。
到目前为止,这是我在顶点着色器中所拥有的:
#version 330
layout(location=0) in vec3 vertex;
layout(location=1) in vec3 normals;
uniform mat4 viewMatrix;
uniform mat4 projMatrix;
out vec3 vertexColor;
out vec3 pixelCoordinates;
out vec3 normalizedNormals;
void main(){
if (gl_VertexID < 6) {
vertexColor = vec3(1.0, 0.0, 0.0);
} else if (gl_VertexID < 12) {
vertexColor = vec3(0.0, 1.0, 0.0);
} else if (gl_VertexID < 18) {
vertexColor = vec3(0.0, 0.0, 1.0);
} else if (gl_VertexID < 24) {
vertexColor = vec3(1.0, 1.0, 0.0);
} else if (gl_VertexID < 30) {
vertexColor = vec3(1.0, 0.0, 1.0);
} else {
vertexColor = vec3(0.0, 1.0, 1.0);
}
pixelCoordinates = vec3(viewMatrix*vec4(vertex,1.0));
normalizedNormals = normalize(mat3(viewMatrix)*normals);
gl_Position = projMatrix*viewMatrix*vec4(vertex, 1.0);
}
这就是我的片段着色器目前的样子:
#version 330
in vec3 vertexColor;
in vec3 pixelCoordinates;
in vec3 normalizedNormals;
out vec3 pixelColor;
void main(){
float il = 1;
float ia = 0.2;
float id ;
vec3 v = normalize(-pixelCoordinates);
}
当我编译时出现黑屏,这当然是因为我仍然错过了环境光和最终发出的光,我需要为此设置一个光源。