【发布时间】:2018-12-29 17:30:26
【问题描述】:
我正在尝试实现 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);
}
编译时出现黑屏,这当然是因为我仍然缺少环境光和最终发出的光,我需要为此设置光源。
【问题讨论】:
-
" 我黑屏,这当然是因为我仍然缺少环境光和最终光" - 你会黑屏,因为什么都没有在片段着色器中分配给
out pixelColor。 -
一般光源有方向灯和点光源。定向灯只是一个方向
vec3,光线来自与光源无限远的距离(通常用于太阳)。点光源是世界上的位置(vec3也是),光线从这里发射到各个方向。聚光灯通过一个方向和一个角度将一个点光源缩小为一个圆锥体。 -
@Rabbid76 非常感谢您的解释!
标签: java opengl glsl shader phong