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

时间:2014-07-01 23:12:26

标签: c# opengl matrix projection opentk

我试图为我的着色器创建一个模型视图投影矩阵,如下所示:

我正在获取相机翻译的矩阵:

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]来自顶点着色器...

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

任何提示?感谢。

1 个答案:

答案 0 :(得分:1)

我将矩阵乘以错误的顺序。