【发布时间】:2020-06-14 13:11:11
【问题描述】:
我的问题是关于从视图矩阵中移除旋转。删除翻译很容易,但我找不到从矩阵中删除旋转的任何方法。有没有办法从视图矩阵中移除旋转。
相机围绕 y 轴旋转,因此也可以查看矩阵并影响反射。
在顶点着色器中我的代码是
#version 330 core
layout(location = 0) in vec3 ModelSpaceVertexPosition;
layout(location = 2) in vec3 ModelSpaceVertexNormal;
out vec3 reflectnormal;
out vec3 reflectposition;
uniform mat4 ModelMatrix;
uniform mat4 ViewMatrix;
uniform mat4 ProjectionMatrix;
void main(){
reflectnormal = ( ViewMatrix * ModelMatrix * vec4(ModelSpaceVertexNormal,0)).xyz;//mat3(transpose(inverse(ModelMatrix))) * ModelSpaceVertexNormal;
reflectposition = vec3(0,0,0) - ( ViewMatrix * ModelMatrix * vec4(ModelSpaceVertexPosition,1)).xyz;//vec3(ModelMatrix * vec4(ModelSpaceVertexPosition, 1.0));
gl_Position = ProjectionMatrix * ViewMatrix * ModelMatrix * vec4(ModelSpaceVertexPosition,1);
}
在片段着色器中我的代码是
#version 330 core
in vec3 reflectnormal;
in vec3 reflectposition;
uniform samplerCube skybox;
out vec3 color;
void main(){
vec3 Rtest = reflect(-reflectposition, reflectnormal);
vec3 EnvironmentReflection = vec3(texture(skybox , Rtest));
color = EnvironmentReflection;
}
但问题是轮换。当我旋转相机时,反射也会随着相机旋转。
如何从反射中移除旋转?
【问题讨论】:
标签: opengl matrix glsl fragment-shader vertex-shader