2016-02-16 2 views
0

У меня возникла проблема с камерой первого лица на LWJGL 2. Я использую следующий код для поворота камеры (вверх по левому и правому) в зависимости от того, как движется мышь. Это, в основном, то, что у каждого другого учебника есть, однако, его движение имеет недостатки и выходит из-под контроля.Вращение камеры первого лица LWJGL

float mouseDX = Mouse.getDX(); 
    float mouseDY = Mouse.getDY(); 

    rotation.x = mouseDX; 
    rotation.y = mouseDY; 

    glRotatef(rotation.y, 1, 0, 0); 
    glRotatef(rotation.x, 0, 1, 0); 

вращения является Vector3f

Я знаю, что rotation.y вращается доступ х и х поворота у. Я не совсем уверен, почему, но это не работает для меня, если это не так. Проблема может быть связана с этим.

Вот видео, которое я сделал, показывая, что я имею в виду: https://www.youtube.com/watch?v=V6Iu5oQuWo4&feature=youtu.be

В видео я попытаюсь показать, что и х и у работы вращения отлично отдельно, но при использовании вместе они не работают на всех ,

Я знаю, что это всего лишь небольшая часть моего кода, но это единственная часть, касающаяся вращения, поэтому проблема должна быть где-то там.

+0

Если у вас есть матрица, определяющая позицию вашего лица, вы можете использовать ее обратную матрицу вида. –

ответ

0

Недостаток, который выделяется для меня, - это значение, с которым вы вращаетесь.

Mouse.getDY возвращает изменение в y пикселях, поэтому, если вы перемещаете мышь на полпути вниз по экрану, вы обычно перемещаетесь 300 пикселей (800x600).

Теперь вы также glRotatef, который поворачивается на радианах, который сравниваемые крошечные по сравнению с градусов (360 градусов -> 6,28 радиан).

Теперь возьмите 300 сто пикселей, использовать его как число радиан во вращение и вы получаете 17188,7 градуса вращения. И вот в чем причина вашего спирали (47 оборотов/несколько миллисекунд)

Что вам нужно сделать, если вы разделите свои dy и dx на добрую пару сотен. И вы также можете использовать градусы, используя Math.toRadians в методе glRotatef