用四元数从变换层次中获得世界位置
Get World-Position from Transform-Hierarchy with Quaternions
我正在编程一个渲染引擎,我正在寻找一个很好的方法来计算我的对象的世界位置。目前我这样做:
Point3f Node::getWorldPosition()
{
// Return the translation-component of the world matrix as a Point3f
return getWorldMatrix().getTranslation();
}
Mat4f Node::getWorldMatrix()
{
if (parent == nullptr) //reached root node
return transform.getTransformationMatrix();
return parent->getWorldMatrix() * transform.getTransformationMatrix();
}
这工作得很好,但我试图找到一个解决方案而不计算巨大的变换矩阵。首先是这个
Point3f Node::getWorldPosition()
{
if (parent == nullptr) //reached root node
return transform.position;
return parent->getWorldPosition() * transform.position;
}
但我当然忘了考虑旋转,我不知道我怎么能做到这一点。我使用四元数进行旋转。
Thanks in advance
一个不需要计算巨大变换矩阵
的解
没有。
你能得到的最好结果就是缓存矩阵。也就是说,保留为每个节点生成的世界矩阵,直到该节点发生变化或父节点使其无效为止。但是这样的代码可能是困难和脆弱的,因为许多操作可能会使缓存的矩阵无效。记录这些事情是很困难的。
没有神奇的解决方案可以让你生成世界空间信息而不实际生成世界空间。即使您知道节点变换只涉及平移和旋转,您仍然需要累积所有这些旋转和平移。这是大部分的工作;不使用矩阵可能节省的任何小性能都将是:minor.
相关文章:
- 激励'inline'说明符的真实世界示例?
- 将值指定给向量(2D)的向量中的某个位置
- 使用Unreal C++获取VR耳机的世界位置/方向
- 写入位置0x0000000C时发生访问冲突
- 如何将两个不同矢量的同一位置的两个元素组合在一起
- GL_SHADERSTORAGE_BUFFER位置是否与其他着色器位置冲突
- 如何使用cudaMallocManaged在指针位置初始化对象?(C++)
- 无法获取webot::PositionSensor对象中位置传感器的值
- 非常量变量只读位置的赋值
- 如何定义更改car类中car位置的方法
- 使用迭代器时如何访问对象在向量中的位置?
- 如何在3D世界中获得对象相对于父母的绝对位置
- 创建相对于世界位置而不是屏幕位置的形状
- OpenGL获取离当前鼠标位置最近的世界三维点的三维坐标
- 在3D世界中的显示器上固定位置绘制2D文本-OpenGL
- 根据世界位置查找一维数组中的通用项目
- 使用 GLUT 在 3D OpenGL 世界中显示固定位置的 2D 文本
- 相机在世界坐标中的位置来自 cv::solvePnP
- 取消将二维屏幕位置投影到三维世界空间
- 用四元数从变换层次中获得世界位置