c++;-用deltatime实现OpenGL运动 我开始用C++编程,用OpenGL尝试解决问题。目前我有一个基本的应用程序,我只想用按键移动相机。我读了很多关于这个的文章,但我仍然对这个运动有问题,我想是因为即使只有一点点,但它们和我的程序不同。首先,我设定了60 fps的速度限制,并用deltatime计算了速度,但移动速度很慢。现在我关闭了FPS限制,但现在它以4000 FPS左右的速度运行,所以deltatime在大多数情况下是0或1,所以运动非常缓慢。我肯定我不理解这个概念,但我需要指出一点
主回路:c++;-用deltatime实现OpenGL运动 我开始用C++编程,用OpenGL尝试解决问题。目前我有一个基本的应用程序,我只想用按键移动相机。我读了很多关于这个的文章,但我仍然对这个运动有问题,我想是因为即使只有一点点,但它们和我的程序不同。首先,我设定了60 fps的速度限制,并用deltatime计算了速度,但移动速度很慢。现在我关闭了FPS限制,但现在它以4000 FPS左右的速度运行,所以deltatime在大多数情况下是0或1,所以运动非常缓慢。我肯定我不理解这个概念,但我需要指出一点,c++,opengl,C++,Opengl,主回路: while (running) { if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) { if (msg.message == WM_QUIT) { running = false; break; } else { TranslateMessage(&msg); DispatchMessag
while (running) {
if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) {
if (msg.message == WM_QUIT) {
running = false;
break;
} else {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
} else {
clock_t last = clock();
deltaTime = last-start;
//if ((double)deltaTime >= 16.666666666) {
fps++;
millis += deltaTime;
start = last;
if (millis > 1000) {
millis = 0;
std::cout << "FPS: " << fps << std::endl;
fps = 0;
}
openglContext.renderScene();
//}
}
}
我知道这并不完美,但正如我之前写的那样,我尝试了许多“解决方案”。
希望有人能帮忙。提前谢谢
解决方案:
还有很多事情要做,但现在已经很完美了
LARGE_INTEGER start;
LARGE_INTEGER frequency;
QueryPerformanceFrequency(&frequency);
QueryPerformanceCounter(&start);
while (running) {
...
LARGE_INTEGER current;
QueryPerformanceCounter(¤t);
dt = ((double)(current.QuadPart - start.QuadPart) / (double)frequency.QuadPart);
QueryPerformanceCounter(&start);
... key handling
... render
...
由于
std::clock()
的分辨率通常较低,因此出现了delta_time
为0或1的问题。在大多数情况下,可以测量的最短时间约为0.01秒,这对于渲染应用程序来说要少得多
根据您的系统和所使用的编译器,有几种替代方法可以让您以更高的精度测量计时
- (C++11
)[高分辨率时钟
- (
在Windows中)[QueryPerformanceCounter
LARGE_INTEGER start;
LARGE_INTEGER frequency;
QueryPerformanceFrequency(&frequency);
QueryPerformanceCounter(&start);
while (running) {
...
LARGE_INTEGER current;
QueryPerformanceCounter(¤t);
dt = ((double)(current.QuadPart - start.QuadPart) / (double)frequency.QuadPart);
QueryPerformanceCounter(&start);
... key handling
... render
...