【发布时间】:2021-11-29 16:05:14
【问题描述】:
所以我尝试使用 OpenGL 实现基本的漫反射照明。我编写了一个简单的着色器,它将采用法线向量和光向量,并使用所述向量的点积计算像素的亮度。这是我的输出:
如您所见,它在前两种情况下运行良好,但在第三种情况下完全失效。顺便说一句,[0, 0, -1] 也不起作用,并且 [0, 1, 1] 给出的输出与光亮时相同([0, 1, 0])。这是我的着色器:
- 顶点着色器:
#version 330 core
layout (location = 0) in vec3 aPos;
layout (location = 1) in vec3 aNormal;
uniform mat4 model;
uniform mat4 view;
uniform mat4 projection;
uniform vec3 lightDirection;
out vec3 normal;
out vec3 lightDir;
void main()
{
normal = normalize(aNormal);
lightDir = normalize(lightDirection);
gl_Position = projection * view * model * vec4(aPos, 1.0f);
}
- 片段着色器:
#version 330 core
in vec3 normal;
in vec3 lightDir;
out vec4 FragColor;
void main()
{
float grey = max(dot(-lightDir, normal), 0.0f);
FragColor = vec4(grey, grey, grey, 1.0f);
}
我认为问题与点积有关,但我找不到原因。
【问题讨论】: