gpt4 book ai didi

C++ 在执行操作之前等待一帧

转载 作者:太空宇宙 更新时间:2023-11-04 14:23:04 24 4
gpt4 key购买 nike

你会如何在 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/

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