用 Vector3f 初始化 Vector4f

Initializing Vector4f with Vector3f

我正在尝试对存储在 Vector3f 中的世界坐标中的 3D 点执行视图变换,我的视图矩阵存储在 Matrix4f 中。是否可以使用扩展的 Vector3f 来初始化 Vector4f。这是我到目前为止所做的:

Eigen::Vector4f Graphics::getLookVectorView() {

Eigen::Matrix4f viewMatrix = dxToEigen(m_camera->getViewMatrix());
Eigen::Vector3f Vec = m_eyeball0->getLookVector();
Eigen::Vector4f lookVec4;
lookVec4 << Vec.x(), Vec.y(), Vec.z(), 1;
return (viewMatrix*lookVec4);
//Eigen::Vector3f lookVecEye1 = m_eyeball1->getLookVector();}

但是当我尝试这样做时出现错误,有什么方法可以将 Vector3f 扩展 1 并存储在 Vector4f 中以执行转换?

这是我得到的错误:

1>....\eigen-eigen-b30b87236a1b\eigen\src\core\assign.h(499): error C2338: YOU_MIXED_MATRICES_OF_DIFFERENT_SIZES
1>....\eigen-eigen-b30b87236a1b\eigen\src\core\plainobjectbase.h(414): note: see reference to function template instantiation 'Derived &Eigen::DenseBase<Derived>::lazyAssign<Eigen::Matrix<float,4,1,0,4,1>>(const Eigen::DenseBase<Eigen::Matrix<float,4,1,0,4,1>> &)' being compiled
1>        with
1>        [
1>            Derived=Eigen::Matrix<float,3,1,0,3,1>
1>        ]

非常感谢任何帮助:)

您可以使用 Affine3f 而不是 Matrix4f 来绕过转换。 Affine3f 对象在内部存储 Matrix4f(可以通过 Affine3f.matrix() 访问)和乘法 Vector3f returns Vector3f 使用 [=14 执行相同的计算=] 创建添加尾随 1.

#include <Eigen/Geometry>


Eigen::Vector3f Graphics::getLookVectorView() {
    Eigen::Matrix4f viewMatrix = dxToEigen(m_camera->getViewMatrix());
    Eigen::Affine3d affine(viewMatrix);
    Eigen::Vector3f Vec = m_eyeball0->getLookVector();
    return (affine*Vec);
}