Я делаю 3D-игру с использованием C++ и Irrlicht. Это игра в стиле FPS, поэтому игрок должен иметь возможность носить оружие. Но я боролся с вычислением положения относительно камеры. Если камера не будет вращаться, расчет будет легко:Расчет положения элемента относительно камеры
// node is camera's child
vector3df modifier = vector3df(2, 0, 2);
node->setPosition(node->getPosition() + modifier);
Но тем не менее, камера не является статичным, а вращающийся объект, поэтому все немного сложнее. Вот изображение, которое мы надеемся crearifies то, что я пытаюсь сказать:
Это должно работать во всех измерениях, X, Y и Z. Я думаю, что есть только две тригонометрические функции для такого рода целей, синус и косинус, которые предназначены для вычисления координат X и Y. Неужели я ошибаюсь, или они могут быть применены к этому? Или есть решение в Иррихте? Там это код, который я пытался использовать (нашел его от SO):
vector3df obj = vector3df(2, 0, 2);
vector3df n = vector3df(0, 0, 0);
n.X = obj.X * cos(60 * DEGTORAD) - obj.Z * sin(60 * DEGTORAD);
n.Z = obj.Z * cos(60 * DEGTORAD) + obj.X * sin(60 * DEGTORAD);
node->setPosition(node->getPosition() + n);
Но оружие просто летит вперед.
Я был бы рад за любую помощь или руководство.
P.S. Надеюсь, этот вопрос ясен, чем предыдущий.
Это не вопрос программирования (как таковой), это скорее вопрос математики. – CoryKramer
Да, это правда. Разве я спросил об этом еще раз? –
Я бы так предложил. У вас будут пользователи более знакомы с этим типом геометрии (не то, чтобы вам не повезло и найти здесь тоже). Как только вы сможете записать уравнения на бумаге, вы можете задать здесь, если вы застрянете в реализации кода. – CoryKramer