我正在编写渲染引擎,我正在寻找一种很好的方法来计算我的对象的世界位置。 目前我这样做:
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;
}
但当然我忘了考虑轮换,我不知道如何实现这一目标。我正在使用四元数进行旋转。
提前致谢
答案 0 :(得分:0)
没有计算巨大变换矩阵的解决方案
没有一个。
你将获得的绝对最好的是缓存矩阵。也就是说,保留为每个节点生成的世界矩阵,直到该节点或使其无效的父节点发生变化。但是这样的代码可能是困难和脆弱的,因为许多操作可能使缓存的矩阵无效。跟踪这些事情可能很困难。
没有神奇的解决方案可以让您生成世界空间信息而无需实际生成世界空间。即使您知道节点转换仅涉及转换然后轮换,您仍然必须累积所有这些转动和转换。这是最重要的工作;不使用矩阵可以节省的任何微小性能都将是:minor。