2013-02-25 3 views
1

У меня есть следующая функцияПреобразование из Vector3f в Matrix4f

transformShape(Shape& shape, Eigen::Matrix4f transformation); 

, которые, очевидно, превращает геометрические формы, и у меня есть перевод в виде

Eigen::Vector3f 

Я надеялся сделать что-то вроде :

Eigen::Vector3f myVector = //calculate 
Eigen::Matrix4f mat = Eigen::Matrix4f::Identity(); 
mat = myVector * mat; 
transformShape(shape, mat); 

Но это невозможно, так как я умножаю структуры с разным размером s, поэтому мой вопрос заключается в том, чтобы преобразовать Vector3f в перевод или вектор с 4-й измерениями

Cheers

ответ

3

Перевод матрица вектора (х, у, г) имеет форму

1 0 0 x 
0 1 0 y 
0 0 1 z 
0 0 0 1 

прочитанной http://en.wikipedia.org/wiki/Translation_matrix

Существует также Эйген :: Перевод, который вы можете использовать:

Vector3f v(1,2,3); 
Matrix4f m = Affine3f(Translation3f(v)).matrix(); 
+0

работает как очарование. большое спасибо –

0

Vector4 должен иметь значение 0.0 в 4-оме элемента.

Если бы это был Point3, он был бы расширен до Point4 с использованием значения 1.0.

Этот компонент известен как «ш» и поиск «Vector4 ж» дадут некоторые результаты, такие как: https://gamedev.stackexchange.com/questions/14115/do-i-need-the-w-component-in-my-vector-class

+0

да , но невозможно для собственного умножить Matrix4f на Vector4, я получаю ошибку ошибки: «INVALID_MATRIX_PRODUCT» не является членом «Eigen :: internal :: static_assertion ». также можно умножить mat * vecvtor.matrix(), но я получаю ту же ошибку –

+0

Линейка mat = myVector * mat; является недействительным. mat * myVector в порядке, но он возвращает Vector4f, а не матрицу 4x4! – ggael

1

Вместо сырого Matrix4f вы можете использовать Эйген :: Transform> < объекта, инкапсулировать Matrix4f с удобными функциями. Например, если ваша трансформация является аффинной, используйте Affine3f.

Affine3f T; 
T.matrix() = mat; // T.matrix() gives you full access to the underlying Matrix4f 
Vector3f a, b; 
a = mat * b; 

См. Предыдущую ссылку для получения более подробной информации о космических преобразованиях с Eigen.

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