用 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);
}
我正在尝试对存储在 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);
}