使用glOrtho滚动游戏。宇宙飞船“颤抖”

时间:2012-03-08 14:09:37

标签: c++ opengl

我想在一个窗口的中心绘制一艘宇宙飞船,因为它通过太空供电。要滚动世界窗口,我会计算船舶的新位置,并使用glOrtho将4000x3000窗口置于此周围。我的测试是按下前进按钮并向上移动船。在大多数机器上没有问题。在一台速度较慢的Linux笔记本电脑上,我每秒只能获得30帧,这艘船来回颤抖。比较它相对于鼠标指针(不移动)的位置,可以清楚地看到船向前和向后跳跃几个像素。星也被证明是模糊的短线。

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

是否有OpenGL方式提供世界点并获取将转换为的像素点?

1 个答案:

答案 0 :(得分:1)

我会考虑反过来这样做。将船保持在0,0世界坐标,并相对于它移动世界。然后,当窗口大小发生变化(摄像机处于固定位置)时,您只需要调用glOrtho。除了不必每次都计算投影矩阵外,您还可以获得如下优势:如果您的世界将来会变得庞大,那么您可以选择使用双精度位置,因为浮点上的大偏移会导致定位不准确。 / p>

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

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