gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 12:11:30 27 4
gpt4 key购买 nike

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

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

是否有 OpenGL 方法来提供世界点并取回它将转换成的像素点?

最佳答案

我会考虑反过来做。将飞船保持在 0,0 世界坐标,并相对于它移动世界。然后你只需要在窗口大小改变时调用 glOrtho (相机处于固定位置)。除了不必每次都计算投影矩阵之外,您还有一个好处,如果您的世界在未来最终变得庞大,那么您可以选择使用 double 位置,因为 float 的大偏移会导致定位不准确。

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

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

关于c++ - 使用 glOrtho 进行滚动游戏。宇宙飞船 "shudders",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9618913/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com