Я создал класс камеры. Можно поворачивать на 360 градусов с помощью мыши и перемещаться вверх и вниз. Как я и предполагал, так же, как во всех играх. Также возможно двигаться вперед и назад, как и во всех играх. Но я не знаю, как реализовать перемещение влево и вправо.Реализация strafe - Opengl - Камера
я сделать следующее:
Это вызывается каждый кадр:
gluLookAt(_posX , _posY , _posZ,
_viewX, _viewY, _viewZ,
_upX, _upY, _upZ);
Мой ход функция
Doesnt Работа:
void Camera::moveLeft()
{
float rot= (_viewY/180 * PI);
_moveX -= float(cos(rot)) * 0.5;
_moveZ -= float(sin(rot)) * 0.5;
}
делает работу
двигаться вперед в сцене :
void Camera::moveForward()
{
float viewX = _viewX - _posX;
float viewY = _viewY - _posY;
float viewZ = _viewZ - _posZ;
_posX += viewX * speed
_posY += viewY * speed;
_posZ += viewZ * speed;
_viewX += viewX * speed;
_viewY += viewY * speed;
_viewZ += viewZ * speed;
}
Когда я двигаюсь только с помощью мыши, проблем нет. Но если я использую эту функцию и вращаюсь с помощью мыши, я получаю некоторые странные движения камеры.
Любые идеи о том, как это решить?
Спасибо
@edit
Так что я удалил заявление glTranslated и я изменил свою функцию moveLeft на следующее:
void Camera::moveLeft(){
float x = ((_viewY * _upZ) - (_viewZ * _upY));
float y = ((_viewZ * _upX) - (_viewX * _upZ));
float z = ((_viewX * _upY) - (_viewY * _upX));
float magnitude = sqrt((x * x) + (y * y) + (z * z));
x /= magnitude;
y /= magnitude;
z /= magnitude;
_posX -= x;
_posY -= y;
_posZ -= z;
}
Я явно делаю что-то неправильно, потому что движения влево и вправо «лучше», но все же не то, что вы ожидаете.
Не могли бы вы снова прочитать мой вопрос, если у вас есть время, я его отредактировал. Спасибо – fibera
@ user748790: Выполнено. –
Должно быть _viewX - = x, ...- = y, ...- = z. Вероятно, это опечатка. Но это работает, спасибо вам большое за вашу помощь. – fibera