OpenTK - 模型视图投影问题
Posted
技术标签:
【中文标题】OpenTK - 模型视图投影问题【英文标题】:OpenTK - Model view projection problems 【发布时间】:2015-07-03 17:16:59 【问题描述】:我一直在关注C++ OpenGL Matrices Tutorial 并尝试将其转换为 C# OpenTK,但没有使用 MVP 矩阵,我在屏幕上绘制了一个红色三角形,但每当我尝试使用它时,我什么都没有绘制或至少没有看到无论我尝试将相机放在哪里,都在绘制任何东西。
下面有代码sn-ps但是可以查看整个source code here
这是构建 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);
【问题讨论】:
如何将矩阵传递给着色器?有时最好将它们一个接一个地传递并在顶点着色器中组合它们 你的view Matrix的角度是1,你可以设置在45到60之间 @lolio 会尝试的。此外,fov 参数以弧度为单位,因此 1.0f 大约为 60 度 【参考方案1】:代码错误:
Matrix4 _model_view_projection = _projection * _view * _model;
必须是:
Matrix4 _model_view_projection = _model * _view * _projection;
// For OpenTK, Pencil.Gaming ...
那是因为 OpenTK 使用行优先矩阵(它们是转置的)。在 C# 中,您必须以这种方式乘以矩阵(而不是在着色器中)。
【讨论】:
以上是关于OpenTK - 模型视图投影问题的主要内容,如果未能解决你的问题,请参考以下文章
用于将匿名类型投影到视图模型上的 Automapper 查询