从OpenGL

时间:2015-06-10 02:46:35

标签: c# opengl opentk

我是OpenGL的新手,并试图从'现代'OpenGL教程中学习。

我正在使用C#和OpenTK。

我正在使用以下代码设置我的projectionMatrix:

_projectionMatrix = Matrix4.CreatePerspectiveFieldOfView(MathHelper.PiOver3, GetAspectRatio(), 0.1f, 100f);

设置之后,我将其上传到着色器,用于转换等。一切都运行良好,如下图所示:

enter image description here

现在,如果我以这种方式设置投影矩阵,结果非常糟糕,如下图所示:

_projectionMatrix = Matrix4.CreateOrthographic(GLControl.ClientSize.Width, GLControl.ClientSize.Height, 0.1f, 100f);

enter image description here

不仅新视图很奇怪,而且如果我向前移动场景,对象也会开始剪裁,即使znear接近于零。

如何正确设置正交投影,以便我可以看到接近我的透视图?

1 个答案:

答案 0 :(得分:1)

您似乎无法理解正交投影。

在正交视图中,您的场景看起来不正确有几个原因:

  • 透视投影给出了合适的 可以看到地板的深度;当物体靠近你时,物体看起来更大。但是,正交投影不会根据其深度改变它们的大小。此外,正投影中地板“消失”的原因是地板 是“无限薄”并水平定向。
  • 您的正投影会调整屏幕大小以使窗口空间中的一个像素 对应于对象空间中的1个单位。由于戒指(似乎)大约12个单位,它们在屏幕上看起来相当小。一种解决方案可能是在CreateOrthographic中使用较小的尺寸。但这并不能解决所有问题;例如,地板仍然是“看不见的”。

另请注意:

  • 如果您使用正交投影,您甚至可以使用zNear的负值, 但可能不是0.透视投影不是这种情况。
  • 正交投影可以形成称为isometric projection的类似3D的投影的基础。