Я скорее парень из OpenGL, поэтому я не могу помочь вам с технической стороны, я могу дать вам направление.
Как правило, 3D-камера имеет:
Перевод - где камера (x, y, z)
Поворот - угол наклона камеры вокруг каждой оси
То, что вы хотите сделать, относится только к части перевода:
- Контролировать ввод пользователя и снимать, когда он нажимает одну из клавиш со стрелками.
- Когда клавиша со стрелкой нажата, вы хотите начать изменять перевод камеры. Если пользователь нажимает клавишу «вверх», вы добавляете постоянное значение к соответствующему компоненту трансляции камеры (x) на каждой итерации основного игрового цикла, пока он не отпустит клавишу. Если он нажмет клавишу «Вниз», вы захотите вычесть это значение вместо того, чтобы добавить его.
- Когда он отпускает ключ, ваш код должен прекратить добавлять это значение в трансляцию камеры.
Предположим, что ваша игра работает на частоте 60 Гц, и вы добавляете, скажем, 1/60 единиц к камере, переводя каждую итерацию для каждого направления, которое хочет пройти пользователь. Если пользователь удерживал клавишу со стрелкой вверх в течение 2 секунд, камера переместилась бы вперед на 2 единицы.
В общем, это «теория», теперь я могу только указать на те веб-страницы, которые я нашел, которые могут быть полезны для решения технической стороны вашей проблемы:
Движение камеры DirectX - Полагаю, в этой статье гораздо больше, чем нужно, но она выглядела довольно хорошо, и я думаю, что вы все равно должны ее прочитать ... Но вы можете просто пропустить часть трансформации вида.
Обработка ввода - ничего особенного сказать, обычная обработка ввода Win32. Если вы не знакомы с обработкой ввода в win32, я думаю, что сначала вам понадобится час или два, чтобы изучить это.
Хорошо, вот и все, надеюсь, я помог