Кастинг (локальное пространство) камер, обращенных к глобальным пространствам xy-Plane
(Ogre3D) У меня есть объект-камера, наклоненный примерно на 30 градусов к поверхности внизу.
Теперь, когда пользователь нажимает определенную клавишу, например, W или S, камера должна двигаться в направлении, обращенном к лицу, но придерживаться плоскости xy глобального пространства, как вы пылесосите пол;) Я думаю, что Age of Empires, например, имеет Точно такой же взгляд на механику.
\ Camera-View Ray / User Presses W
\
\ --->> desired moving direction
\
\
____________________________________________________ Global Space X,Y-Plane Ground
Моя проблема не в самом коде, а в его вычислениях. Как я могу извлечь глобальное направление плоскости XY из локальных объектов, обращенных к направлению?
Спасибо за вашу помощь!
1 ответ
Я понял. Если кому-то тоже нужна помощь, вот мой код Ogre, вы можете извлечь принцип:
float coeff = 150.0f * deltaTime_s;
Ogre::Quaternion dirY(Ogre::Degree(-90), Ogre::Vector3::UNIT_Y);
if(keyboard->isKeyDown(OIS::KC_W))
{
GameManager::getSingeltonPtr()->getCameraNode()->translate
( dirY* (GameManager::getSingeltonPtr()->getCameraNode()->getOrientation () * Ogre::Vector3 (-coeff, 0, 0)));
}
if(keyboard->isKeyDown(OIS::KC_S)){
GameManager::getSingeltonPtr()->getCameraNode()->translate
( dirY* (GameManager::getSingeltonPtr()->getCameraNode()->getOrientation () * Ogre::Vector3 (coeff, 0, 0)));
}
if(keyboard->isKeyDown(OIS::KC_A))
{
GameManager::getSingeltonPtr()->getCameraNode()->translate
( (GameManager::getSingeltonPtr()->getCameraNode()->getOrientation () * Ogre::Vector3 (-coeff, 0, 0)));
}
if(keyboard->isKeyDown(OIS::KC_D))
{
GameManager::getSingeltonPtr()->getCameraNode()->translate
( (GameManager::getSingeltonPtr()->getCameraNode()->getOrientation () * Ogre::Vector3 (coeff, 0, 0)));
}