- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
你会如何在 C++ 中等待一个帧。
我不希望程序休眠或发生任何事情。
它会变成这样
在此框架中执行此操作 (1)
继续程序的其余部分
在下一帧 (2) 中执行此操作
其中 Action 1 仅在第一帧发生, Action 2 仅在下一帧发生。它会一直这样下去。 1, 2, 1 又是 2
我在帧之间有时间,我使用 C++ 并使用 Visual Studio 2008 进行编译。
编辑:
我正在使用 Opengl,我的操作系统是 Windows 7。
框架 - http://en.wikipedia.org/wiki/Frame_rate就像在给定时间段内打印到屏幕上的每个场景图像
最佳答案
我在这里做了一些假设。
假设您有一个模型,您希望显示其状态。您可能希望最大限度地利用 CPU 时间来改进模型而不是渲染。
所以你固定目标帧率,例如25 帧/秒。
同样,假设您已经优化了渲染,因此可以在不到 0.04 秒的时间内完成。
所以你可能想要类似(伪代码)的东西:
Time lastRendertime = now();
while(forever)
{
Time current = now();
if ((current - lastRenderTime > 0.04))
{
renderEverything();
lastRenderTime = current;
}
else
{
evolveModelABit();
}
}
当然,您可能有一个输入处理程序来打破循环。请注意,此方法假设您不希望模型演化受实时流逝的影响。如果您这样做,而且游戏可能会这样做,则将当前
时间传递给evolveModelABit();
。
对于 Windows 上的时间函数,您可以使用:
LARGE_INTEGER frequency; // ticks per second
LARGE_INTEGER t1; // ticks
QueryPerformanceFrequency(&frequency);
QueryPerformanceCounter(&t1);
请注意,此方法适用于科学类型的模拟。模型演化将不依赖于帧速率、渲染等,并且非常及时地给出相同的结果。
对于游戏,通常会插入最大化 fps。这意味着主循环的形式是:
Time lastRendertime = now();
while(forever)
{
Time current = now();
evolveModelABit(current, lastRenderTime);
renderEverything();
lastRenderTime = current;
}
关于C++ 在执行操作之前等待一帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6052026/
有时,当我调用 ipdb 时,我知道我想要成为跟踪设置上方的框架。我认为这就是 API 公开 frame 参数的原因(如 the documentation 中所述)。 所以这是函数: import
我是一名优秀的程序员,十分优秀!