我试图为我的着色器创建一个模型视图投影矩阵,如下所示:
我正在获取相机翻译的矩阵:
public Matrix4 GetMatrix()
{
return Matrix4.LookAt(Position, LookingAt, Vector3.UnitY);
}
Postition是相机的当前位置,LookingAt是相机的目标。
现在我正在为着色器分配最终矩阵并传递它:
Matrix4 cameraMatrix = camera.GetMatrix();
Matrix4 mvprojectionMatrix = Matrix4.CreatePerspectiveFieldOfView((float)Math.PI / 4, 16f / 9f, 1f, 30f) * cameraMatrix;
GL.UniformMatrix4(mvprojectionMatrixAttribute, false, ref mvprojectionMatrix);
这是顶点着色器(通过)
[Shader vertex]
#version 150 core
in vec3 pos;
in vec3 color;
uniform float time;
uniform vec3 offset;
uniform mat4 cameraView;
uniform mat4 projection;
out float vTime;
out vec3 vColor;
out mat4 vProjection;
void main() {
gl_Position = vec4(pos, 1.0);
vColor = color;
vTime = time;
vProjection = projection;
}
我将此传递给几何着色器,我将使用它们定位我的顶点:
void makeVertex(vec3 shift, mat4 rotation)
{
gl_Position = (gl_in[0].gl_Position + vec4(shift, 0.0) * rotation) * vProjection[0];
EmitVertex();
}
旋转矩阵只是顶点的局部旋转。 vProjection [0]来自顶点着色器...
如果相机移动,东西将很快离开视锥体,但实际视图不会移动。所以我假设模型视图矩阵是错误的(不会从相机转换到世界空间)。但我不确定如何创建正确的矩阵。
任何提示?感谢。
答案 0 :(得分:1)
我将矩阵乘以错误的顺序。