使用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的增加而减小。 希望有人会发现我的错误。
答案 0 :(得分:0)
我想制作一个适合整个屏幕的背景图像的2D游戏。
然后不要理会透视计算。只需切换到正交投影以绘制背景,禁用深度写入。然后切换到其余部分的透视投影。
OpenGL不是场景图,它是一个有状态的绘图API。利用这个事实。
答案 1 :(得分:0)
要使用OpenGL制作2D游戏,您应该使用正交投影,例如this教程节目。
然后很简单,用你想要的任何图像填充屏幕,因为你没有处理透视。
但是,如果你坚持按照你说的方式做事,那么你必须使用当前的模型视图矩阵gluProject屏幕的4个角,然后在3D中绘制四边形与这些角落的空间。即使采用这种方法,由于浮点错误,四边形可能无法覆盖整个屏幕。