gpt4 book ai didi

java - 平滑运动 Opengl ES 2.0

转载 作者:行者123 更新时间:2023-12-02 11:19:56 26 4
gpt4 key购买 nike

我正在使用 Opengl ES 2.0 为 Android 构建一个非常简单的“游戏”。游戏玩法包括根据用户输入加速或减速的移动点。当然,单帧中该点所覆盖的空间取决于从上一帧开始耗时量,因此为了计算该空间,我将点的速度乘以该时间量。

我还有一个根据我的点移动的相机,但我翻转 x 和 y 轴以使相机跟随该点。

我的问题是该点(和相机)移动不顺畅。顺便说一句,我不明白为什么,因为 FPS 始终为 60 或至少 55(我通过外部应用程序检查它们)。

如果我在一个帧和下一帧之间始终使用相同的时间,那么一切都会很顺利。

顺便说一句,为了了解问题所在,我构建了一个非常简单的 FPS 计数器,并通过 Log.d 记录 FPS(或耗时)。我注意到这里的值在 45 和 80 FPS 之间变化。现在,我认为如果我可以将此值锁定为最大值 60(这是大多数智能手机的屏幕刷新率),那么移动会更加平滑。所以我的问题是:如何避免我的应用在上一帧过去 0.0166 秒之前绘制一帧?

感谢您的阅读,抱歉我的英语不好!

最佳答案

Here I noticed that values vary between 45 and 80 FPS.

一旦缓冲区可用,图形子系统就会将缓冲区返回给应用程序,因此,使用三重缓冲时,在 CPU 上测量的帧时间可能会有点不可预测,因为应用程序运行时并未与合成器和 CPU 时间紧密锁定可能会因 CPU 频率变化而移动。

一般来说,显示更新的上限为 60 FPS,但由于您的动画是基于您在 API 级别看到的经过的帧时间(与实际显示更新分离),因此您对每个帧进行动画处理,就好像它是 45 FPS 或 80 FPS,这并不是屏幕上实际显示的。

如果您知道自己接近 60 FPS,我会尝试对过去 3 帧的耗时进行平均,并使用该时间步作为动画更新率。这应该消除由缓冲区滑动引起的大部分抖动,但代价是对大型工作负载变化的 react 有一点延迟。

关于java - 平滑运动 Opengl ES 2.0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50005457/

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