2016-01-20 2 views
0

Я использую Eigen::Affine3f для представления матрицы камеры. (Я уже понял, как настроить матрицу вида/Affine3f из исходного вектора «lookAt» и «вверх»)Примените поворот к Eigen :: Affine3f

Теперь я хочу поддерживать изменение ориентации камеры. Простой вопрос: как лучше всего применить вращения к этому Affine3f, т. Е. Шаг, рыскание, рулон?

+0

Непонятный. Вы можете сделать это в любом порядке (но результаты, конечно, не будут одинаковыми). Я не думаю, что есть «лучший способ», зависит от ваших целей. – kebs

+0

Хорошо, забудьте «лучший способ». Как применить «шаг» к Affine3f, полагая, что я уже знаю ось, о которой хочу передать, и угол, который я хочу передать? – user8709

+0

Я очень новичок в Eigen, поэтому был бы очень оценен любой пример того, как накапливать вращения на существующий Affine3f. – user8709

ответ

2

Это довольно простое использование встроенных функций. Вы можете использовать объект AxisAngle, чтобы умножить существующие Affine3f. Просто отметьте, что ось должна быть нормализована:

Vector3f rotationAxis; 
rotationAxis.setRandom(); // I don't really care, you determine the axis 
rotationAxis.normalize(); // This is important, don't forget it 

Affine3f randomAffine3f, rotatedAffine; 
// Whatever was left in memory in my case, 
// whatever your transformation is in yours 
std::cout << randomAffine3f.matrix() << std::endl; 

// We'll now apply a rotation of 0.256*M_PI around the rotationAxis 
rotatedAffine = (AngleAxisf(0.256*M_PI, rotationAxis) * randomAffine3f); 
std::cout << rotatedAffine.matrix() << std::endl; // Ta dum!! 
+0

Спасибо, вот что я искал. – user8709

Смежные вопросы