Войти
ПрограммированиеФорумГрафика

Камера от первого лица?

#0
22:36, 23 апр. 2017

Как реализовать поворот мышкой?
Всё вроде бы просто - крути камеру по X мышки.
Но все не так то просто.
Как заставить мышку "находится" одной точке, но при этом считывать её X "правильно"?


#1
1:15, 24 апр. 2017
Классическая задача графики
#2
10:33, 24 апр. 2017

monobogdan
Ты используешь форум вместо гугла?

#3
11:17, 24 апр. 2017

monobogdan
> Как реализовать поворот мышкой?
> Всё вроде бы просто - крути камеру по X мышки.
> Но все не так то просто.
> Как заставить мышку "находится" одной точке, но при этом считывать её X
> "правильно"?
Лучше всего использовать RawInput.
На каждом кадре можно возвращать мышь в центральное положение функцией SetCursorPos
А чтобы мышь не вылезала за пределы окна: ClipCursor.
А чтобы скрыть курсор — ShowCursor. Но эту функцию надо вызывать только один раз.

#4
12:00, 24 апр. 2017

Demiurg-HG, да, я так и делаю, но проблема в том, что если начать блокировать курсор(setcursor pos) то "голова" персонажа(т.е камера) начинает дергатся.

#5
13:35, 24 апр. 2017

monobogdan
> Demiurg-HG, да, я так и делаю, но проблема в том, что если начать блокировать
> курсор(setcursor pos) то "голова" персонажа(т.е камера) начинает дергатся.
Каким именно образом камера дергается?
Можно попробовать выводить значения в консоль, чтобы понять, где проблема.

#6
15:44, 24 апр. 2017

Есть мысль, что SetCursorPos срубает суб-пиксельную точность. Для 1stP камеры это, наверное, не важно.

#7
16:41, 24 апр. 2017

Дык у меня топорно все.

rotx = mouse_x
camera.rotate(rotx, roty, 0.0f)

#8
17:04, 24 апр. 2017

monobogdan
> rotx = mouse_x
> camera.rotate(rotx, roty, 0.0f)
а так?
camera.rotate(mouse_x - prev_mouse_x,  mouse_y - prev_mouse_y, 0.0f)

#9
17:39, 24 апр. 2017

Задача явно неординарная. Может считать приращение мышки относительно центра после ее сдвига и двигать камеру в том направлении, и потом (ТА-ДА!) ВЕРНУТЬ ЕЕ ОБРАТНО в центр.

The Player
> Классическая задача графики

Стоит на втором месте после: что делать если коврик для мыши кончился, и мышь дальше не едет.

#10
20:41, 30 апр. 2017

Для юнити например это подходит 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

#11
10:51, 1 мая 2017

Курсор мыши каждый игровой кадр устанавливается по центру экрана (и прячется, чтоб не расстраивать игрока). Расстояние, которое курсор успел пройти за время одного игрового кадра и будет абсолютным моментальным ускорением для поворота камеры, только его еще надо умножить на время кадра.

#12
11:02, 1 мая 2017

Как написали выше - RawInput и предварительно залочить мышь в пределах окна - ClipCursor.

ПрограммированиеФорумГрафика

Тема в архиве.