OpenTK-模型视图投影问题



我一直在学习C++OpenGL矩阵教程,并试图将其翻译成C#OpenTK,在不使用MVP矩阵的情况下,我会在屏幕上画一个红色三角形,但无论何时我尝试使用它,我都不会画出任何东西,或者至少看不到任何正在画的东西,无论我试图将相机放在哪里。

下面有一些代码片段,但你可以在这里查看完整的源代码

这是构建MVP矩阵的C#代码

/Attempt to build our model view projection matrix
//We use an Identity matrix for the model
Matrix4 _model = Matrix4.Identity;
Matrix4 _projection = Matrix4.CreatePerspectiveFieldOfView(1.0f, 4.0f / 3.0f, 0.1f, 100.0f);
//Camera will be as 4,3,3 looking at origin, and set up direction to 1
Matrix4 _view = Matrix4.LookAt(new Vector3(4,3,3), new Vector3(0,0,0), new Vector3(0,1,0));
//combine into our model view projection
Matrix4 _model_view_projection = _projection * _view * _model;

然后我们将这个矩阵传递到顶点着色器中,vPosition元素是从C#代码传递的vec3顶点

#version 330
uniform mat4 viewProjection;
in vec3 vPosition;
void main()
{
    //This line doesn't work
    gl_Position = viewProjection * vec4(vPosition, 1);
    //This line works
    //gl_Position = vec4(vPosition, 1);
}

代码错误:

Matrix4 _model_view_projection = _projection * _view * _model;

必须是:

Matrix4 _model_view_projection = _model * _view * _projection;
// For OpenTK, Pencil.Gaming ...

这是因为OpenTK使用行主矩阵(它们是转置的(。在C#中,必须以这种方式(而不是在着色器中(乘以矩阵。

最新更新