我正在努力在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]来自顶点着色器…

如果相机移动,东西会很快离开视锥体,但实际的视图不会移动。所以我假设模型视图矩阵是错误的(不翻译从相机到世界空间)。但我不确定如何创建正确的矩阵。

有什么建议吗?谢谢。

我正在努力在OpenTK中创建一个ModelViewProjection矩阵

我把矩阵相乘的顺序搞错了。

相关文章: