我正在按照本教程创建带有环境映射的天空盒/立方体贴图。我在反射部分遇到了一些麻烦。在计算反射时,会考虑当前位置、法线和相机/眼睛位置,如教程中的以下片段着色器所示:
#version 330 core
in vec3 Normal;
in vec3 Position;
out vec4 color;
uniform vec3 cameraPos;
uniform samplerCube skybox;
void main()
{
vec3 I = normalize(Position - cameraPos);
vec3 R = reflect(I, normalize(Normal));
color = texture(skybox, R);
}
这是顶点着色器:
#version 330 core
layout (location = 0) in vec3 position;
layout (location = 1) in vec3 normal;
out vec3 Normal;
out vec3 Position;
uniform mat4 model;
uniform mat4 view;
uniform mat4 projection;
void main()
{
gl_Position = projection * view * model * vec4(position, 1.0f);
Normal = mat3(transpose(inverse(model))) * normal;
Position = vec3(model * vec4(position, 1.0f));
}
问题是,如果相机没有四处移动(所以眼睛位置保持不变),但是相机的参考中心发生了变化,那么物体上的纹理不会改变。这是不可取的。例如,当您站在镜子前,左右旋转头部时,您会期望看到镜子中的反射发生变化。
我怎样才能达到这个效果(即当相机中心改变时更新物体的反射纹理)?
编辑:这是一个显示我的问题的视频:https ://www.youtube.com/watch?v=Yk5akOYnjdc&feature=youtu.be