使用 glOrtho 进行滚动游戏。宇宙飞船"shudders"
Using glOrtho for scrolling game. Spaceship "shudders"
我想在窗户中央画一艘宇宙飞船,它在太空中飞行。为了滚动世界窗口,我计算了船的新位置,并使用glOrtho
将4000x3000窗口居中。我的测试是按下前进按钮并将船向上移动。在大多数机器上都没有问题。在一台速度较慢的linux笔记本电脑上,我每秒只能获得30帧,飞船来回抖动。比较它相对于鼠标指针(不移动)的位置,可以清楚地看到飞船前后跳跃了几个像素。恒星也被显示为模糊成短线条。
我想查询船中心的像素值,看看它是否在变化。
是否有OpenGL
方法来提供世界点并返回将要转换到的像素点
我会考虑换一种方式。将飞船保持在0,0世界坐标,并相对于它移动世界。然后,只有当窗口大小发生变化时(相机处于固定位置),才需要glOrtho调用。除了不必每次都计算投影矩阵外,您还可以获得这样的好处:如果您的世界在未来变得巨大,那么您可以选择使用双精度位置,因为浮子上的大偏移会导致定位不准确。
若要绘制空间场景,请在绘制任何对象之前操作模型视图矩阵,并在绘制船舶时使用不同的矩阵。
要从世界坐标中获得像素坐标,请取该点并将其乘以投影矩阵乘以模型视图矩阵(确保以正确的方式进行乘法运算)。然后,您将得到一个x和y在-1到1之间的值。您可以将[1,1]相加,然后乘以屏幕大小的一半,得到像素位置。(如果您愿意,可以将其添加到矩阵变换中)。
相关文章:
- 在C++游戏中与库存系统作斗争
- 换位表导致测试失败(但在游戏中运行良好)
- Craps游戏问题,忽略if语句
- 矢量下标超出SFML游戏中的范围
- 我是 c++ 的新手.学习基本知识后,我想做井字游戏.对于印刷板,我在下面写代码,但它显示错误
- 我在贪吃蛇游戏中收到了错误代码 -1073741571
- NaN 上的宇宙飞船操作员
- 我应该在简单的策略游戏中为各个派系使用类吗 - C++
- 游戏体验和升级
- 我的代码运行良好,但在游戏循环中中断
- 如何使用 SFML 在贪吃蛇游戏中定义游戏结束?
- 我可以使用任何好的逻辑来阻止计算机将 O 放在井字游戏中的现有 X 上
- 将鼠标和键盘输入发送到 unity3d 游戏 (Rust)
- 在猜谜游戏 c++ 中不计算尝试次数
- 在C++不适用于猜数字游戏的情况下再次播放选项
- 在为我的基于文本的 RPG 游戏制作库存时遇到困难
- 在定义字符数组(井字游戏)的 for 循环中应用输入限制
- Frank Luna 在他的书"使用 DirectX12 进行 3D 游戏编程"的介绍中盒子示例的问题
- 如何在Linux上正确发布C++软件(游戏)
- 使用 glOrtho 进行滚动游戏。宇宙飞船"shudders"