获取在特定z坐标处可见的平面边界

时间:2013-05-02 17:16:59

标签: c# math opengl opentk frustum

使用OpenTK,我创建了一个窗口(800x600),垂直视场角为90°。 我想用适合整个屏幕的背景图像制作2D游戏。 我想要的是变量z坐标处的平面作为RectangleF。

目前我的代码是:

var y = (float)(Math.Tan(Math.PI / 4) * z);
return new RectangleF(aspectRatio * -y, -y, 2 * aspectRatio * y, 2 * y);

由此计算的矩形总是有点小,这种效果似乎随着z的增加而减小。 希望有人会发现我的错误。

2 个答案:

答案 0 :(得分:0)

  

我想制作一个适合整个屏幕的背景图像的2D游戏。

然后不要理会透视计算。只需切换到正交投影以绘制背景,禁用深度写入。然后切换到其余部分的透视投影。

OpenGL不是场景图,它是一个有状态的绘图API。利用这个事实。

答案 1 :(得分:0)

要使用OpenGL制作2D游戏,您应该使用正交投影,例如this教程节目。

然后很简单,用你想要的任何图像填充屏幕,因为你没有处理透视。

但是,如果你坚持按照你说的方式做事,那么你必须使用当前的模型视图矩阵gluProject屏幕的4个角,然后在3D中绘制四边形与这些角落的空间。即使采用这种方法,由于浮点错误,四边形可能无法覆盖整个屏幕。