Итак, я снова начал программировать на C++ и пытался разобраться с OpenGL. В настоящее время у меня есть базовое приложение, где я просто хочу переместить камеру с помощью клавиш. Я читал много статей об этом, но все же у меня проблемы с движением, я думаю, потому что даже если только немного, но они отличаются от моей программы. Сначала я сделал ограничение в 60 кадров в секунду и вычислил скорость с deltatime, но движение было медленным. Теперь я отключил ограничение FPS, но теперь он работает примерно на 4000 FPS, поэтому deltatime больше всего времени 0 или 1, поэтому движение действительно очень медленное. Я уверен, что не понимаю что-то в этой концепции, но мне нужно указать на это.C++ - Движение OpenGL с deltatime
Основной цикл:
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();
//}
}
}
WndProc ключ обработчик:
float speed = 5.0f;
...
case WM_KEYDOWN:
switch(wParam) {
case 0x57:
openglContext.updateCoordinates(0.0f, 0.0f, ((float)deltaTime/1000.0f * speed), glm::radians(angle));
break;
}
break;
Я знаю, что это не является совершенным, но, как я писал ранее, я попробовал много "решений". Надеюсь, кто-то может помочь. Заранее спасибо!
Решение:
Существует еще много сделать, но сейчас это прекрасно.
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
...
Есть Распознать: http://gafferongames.com/game-physics/fix-your -timestep/ –
@RichardCritten: Это действительно хорошая ссылка. Но я бы предложил не использовать эту стратегию для управления камерой, когда отзывчивость приложения является фактором. – BDL
На самом деле я тоже это прочитал, но для меня это было слишком сложно, но, возможно, я попробую. – matthew3r