我正在努力在OpenTK中创建一个ModelViewProjection矩阵
本文关键字:一个 ModelViewProjection 矩阵 创建 努力 OpenTK | 更新日期: 2023-09-27 18:10:58
我试图为我的着色器创建一个模型视图投影矩阵,像这样:
我得到了相机转换的矩阵:
public Matrix4 GetMatrix()
{
return Matrix4.LookAt(Position, LookingAt, Vector3.UnitY);
}
position为摄像机的当前位置,LookingAt为摄像机的目标。
现在我正在组装着色器的最终矩阵并传递它:
Matrix4 cameraMatrix = camera.GetMatrix();
Matrix4 mvprojectionMatrix = Matrix4.CreatePerspectiveFieldOfView((float)Math.PI / 4, 16f / 9f, 1f, 30f) * cameraMatrix;
GL.UniformMatrix4(mvprojectionMatrixAttribute, false, ref mvprojectionMatrix);
这是顶点着色器(pass through)
(材质顶点)#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]来自顶点着色器…
如果相机移动,东西会很快离开视锥体,但实际的视图不会移动。所以我假设模型视图矩阵是错误的(不翻译从相机到世界空间)。但我不确定如何创建正确的矩阵。
有什么建议吗?谢谢。
我把矩阵相乘的顺序搞错了。