使用 glOrtho 进行滚动游戏。宇宙飞船"shudders"

Using glOrtho for scrolling game. Spaceship "shudders"

本文关键字:宇宙飞船 游戏 shudders 滚动 glOrtho 使用      更新时间:2023-10-16

我想在窗户中央画一艘宇宙飞船,它在太空中飞行。为了滚动世界窗口,我计算了船的新位置,并使用glOrtho将4000x3000窗口居中。我的测试是按下前进按钮并将船向上移动。在大多数机器上都没有问题。在一台速度较慢的linux笔记本电脑上,我每秒只能获得30帧,飞船来回抖动。比较它相对于鼠标指针(不移动)的位置,可以清楚地看到飞船前后跳跃了几个像素。恒星也被显示为模糊成短线条。

我想查询船中心的像素值,看看它是否在变化。

是否有OpenGL方法来提供世界点并返回将要转换到的像素点

我会考虑换一种方式。将飞船保持在0,0世界坐标,并相对于它移动世界。然后,只有当窗口大小发生变化时(相机处于固定位置),才需要glOrtho调用。除了不必每次都计算投影矩阵外,您还可以获得这样的好处:如果您的世界在未来变得巨大,那么您可以选择使用双精度位置,因为浮子上的大偏移会导致定位不准确。

若要绘制空间场景,请在绘制任何对象之前操作模型视图矩阵,并在绘制船舶时使用不同的矩阵。

要从世界坐标中获得像素坐标,请取该点并将其乘以投影矩阵乘以模型视图矩阵(确保以正确的方式进行乘法运算)。然后,您将得到一个x和y在-1到1之间的值。您可以将[1,1]相加,然后乘以屏幕大小的一半,得到像素位置。(如果您愿意,可以将其添加到矩阵变换中)。