Преобразование из 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);

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

ура

1
nl ja de

3 ответы

Матрица преобразования вектора (x, y, z) имеет вид

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

Read http://en.wikipedia.org/wiki/Translation_matrix

Существует также Eigen :: Translation, который вы можете использовать:

Vector3f v(1,2,3);
Matrix4f m = Affine3f(Translation3f(v)).matrix();
3
добавлено
работает как шарм. большое спасибо
добавлено автор Moataz Elmasry, источник

Instead of a raw Matrix4f you can use an Eigen::Transform<> object that encapsulate a Matrix4f with convenient functions. For instance, if your transformation is affine, use an Affine3f.

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

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

1
добавлено

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

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

This component is known as "w" and a search for "Vector4 w" will give some results such as: https://gamedev.stackexchange.com/questions/14115/do-i-need-the-w-component-in-my-vector-class

0
добавлено
Линейка mat = myVector * mat; является недействительным. mat * myVector в порядке, но он возвращает Vector4f, а не матрицу 4x4!
добавлено автор ggael, источник
да, но невозможно в собственном умножить Matrix4f на Vector4, я получаю ошибку ошибки: «INVALID_MATRIX_PRODUCT» не является членом «Eigen :: internal :: static_assertion ». также можно умножить mat * vecvtor.matrix (), но я получаю ту же ошибку
добавлено автор Moataz Elmasry, источник
pro.cxx
pro.cxx
3 049 участник(ов)

C/C++ chat 0. Простые вопросы, лабы и о IDE — в чат новичков @supapro 1. Не хамим, не переходим на личности, не вбрасываем утверждения без доказательств 2. No Ads, offtop, flood Объявления о вакансиях и евенты - в лс @AlexFails https://t.me/ProCxx/259155

supapro.cxx
supapro.cxx
1 925 участник(ов)

Чат для тех, кто немного знает C++, простые вопросы по реализации, синтаксису и ide – сюда, а для другого есть: /Главный чат по серьезным вопросам — @ProCxx /Чат по обсуждению всего — @fludpac

C++ Russia
C++ Russia
384 участник(ов)

Сообщество разработчиков C++ в Telegram.

cxx.Дискуссионная
cxx.Дискуссионная
298 участник(ов)

это не двач, общайтесь вежливо; разговор на почти любые темы; Не согласны с баном? В лс @AlexFails, @ivario

C++ для маленьких и тупых
C++ для маленьких и тупых
105 участник(ов)

Лоу левел (по среднему IQ участников) чатик ExtremeCode @extremecode Флудилка @extremecode_rest