0

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

目前我的代码是:

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

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

4

2 回答 2

0

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

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

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

于 2013-05-02T17:22:55.617 回答
0

要使用 OpenGL 制作 2D 游戏,您应该使用正交投影,如教程所示。

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

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

于 2013-05-02T17:23:18.870 回答