Как реализовать поворот мышкой?
Всё вроде бы просто - крути камеру по X мышки.
Но все не так то просто.
Как заставить мышку "находится" одной точке, но при этом считывать её X "правильно"?
Классическая задача графики
monobogdan
Ты используешь форум вместо гугла?
monobogdan
> Как реализовать поворот мышкой?
> Всё вроде бы просто - крути камеру по X мышки.
> Но все не так то просто.
> Как заставить мышку "находится" одной точке, но при этом считывать её X
> "правильно"?
Лучше всего использовать RawInput.
На каждом кадре можно возвращать мышь в центральное положение функцией SetCursorPos
А чтобы мышь не вылезала за пределы окна: ClipCursor.
А чтобы скрыть курсор — ShowCursor. Но эту функцию надо вызывать только один раз.
Demiurg-HG, да, я так и делаю, но проблема в том, что если начать блокировать курсор(setcursor pos) то "голова" персонажа(т.е камера) начинает дергатся.
monobogdan
> Demiurg-HG, да, я так и делаю, но проблема в том, что если начать блокировать
> курсор(setcursor pos) то "голова" персонажа(т.е камера) начинает дергатся.
Каким именно образом камера дергается?
Можно попробовать выводить значения в консоль, чтобы понять, где проблема.
Есть мысль, что SetCursorPos срубает суб-пиксельную точность. Для 1stP камеры это, наверное, не важно.
Дык у меня топорно все.
rotx = mouse_x camera.rotate(rotx, roty, 0.0f)
monobogdan
> rotx = mouse_x
> camera.rotate(rotx, roty, 0.0f)
а так?
camera.rotate(mouse_x - prev_mouse_x, mouse_y - prev_mouse_y, 0.0f)
Задача явно неординарная. Может считать приращение мышки относительно центра после ее сдвига и двигать камеру в том направлении, и потом (ТА-ДА!) ВЕРНУТЬ ЕЕ ОБРАТНО в центр.
The Player
> Классическая задача графики
Стоит на втором месте после: что делать если коврик для мыши кончился, и мышь дальше не едет.
Для юнити например это подходит http://wiki.unity3d.com/index.php/FlyCam_Extended
Для остального должно быть в книгах "как сделать игру на ... " или через гугл
https://learnopengl.com/#!Getting-started/Camera
https://msdn.microsoft.com/en-us/library/bb203907(v=xnagamestudio.10).aspx
Курсор мыши каждый игровой кадр устанавливается по центру экрана (и прячется, чтоб не расстраивать игрока). Расстояние, которое курсор успел пройти за время одного игрового кадра и будет абсолютным моментальным ускорением для поворота камеры, только его еще надо умножить на время кадра.
Как написали выше - RawInput и предварительно залочить мышь в пределах окна - ClipCursor.
Тема в архиве.