Я делаю 3d игру с LWJGL
, В этой игре всякий раз, когда я нажимаю клавишу со стрелкой, я хочу, чтобы экран вращался в этом направлении, независимо от текущей ориентации. Я изо всех сил, чтобы реализовать это в коде. Используя три glRotatef
функции, основанные на вращении вектора 3f, не достигают этого. Вращение вверх и вниз, потому что работа glRotatef(rotation.x, 1, 0, 0)
Сначала вызывается, но влево и вправо работают только тогда, когда вы не смотрите вверх или вниз. Если вы, вы вращаетесь вокруг универсальной оси Y, и камера вращается. Я видел, что другая реализация может использовать gluLookAt()
Но я думаю, что столкнулся бы с той же проблемой.
РЕДАКТИРОВАТЬ
Я думал, что решил свою проблему, изменив порядок, в котором вызывается функция glRotatef () в зависимости от направления, в котором я хочу повернуться. Я думал, что это сработает, потому что в моей игре я буду вращать только одну ось за раз. Это сработало, но в некоторых направлениях это не так.
if(updown){
glRotatef(rotation.x, 1, 0, 0);
glRotatef(rotation.y, 0, 1, 0);
} else if(leftright){
glRotatef(rotation.y, 0, 1, 0);
glRotatef(rotation.x, 1, 0, 0);
}
glTranslatef(position.x, position.y, position.z);
Возможно, gluLookAt поможет вам быстрее, но вам нужно будет вручную повернуть координату глаза относительно исходной координаты. С gluLookAt вам также нужно рассчитать вектор подъема, если вы планируете вращаться вокруг всех трех осей.
У меня есть предчувствие, вам просто нужно добавить glTranslate, прежде чем вы сделаете свой glRotate, чтобы камера могла вращаться вокруг.
Если вы покажете какой-то код, вы сможете получить дополнительную помощь.
Я закончил с этим вопросом и пошел дальше. Поскольку я собираюсь поворачивать только одну ось на 90 градусов за раз, я прошел все 64 возможных ориентации и применил необходимые перфорации вручную.