OpenTK-模型视图投影问题
本文关键字:问题 投影 视图 模型 OpenTK- | 更新日期: 2023-09-27 18:00:55
我一直在学习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#中,必须以这种方式(而不是在着色器中(乘以矩阵。