3D 世界到本地的转换

发布于 2024-08-27 03:07:11 字数 606 浏览 8 评论 0原文

我在尝试设置节点的本地位置以匹配给定的世界位置时感到非常头疼。

我得到了一个解决方案,但是,AFAICS,它只考虑了方向位置,但不缩放:有

node_new_local_position = node_parent.derivedOrientation().Inverse() * ( world_position_to_match - node_parent.derivedPosition() );

问题的节点是node_parent; node_parent 本地派生属性(方向、位置和缩放)以及其完整矩阵变换是已知的。

所有位置都是3d向量;方向是四元数;完整变换是一个 4x4 矩阵。

有人可以帮我修改解决方案以支持节点层次结构中的扩展吗?

预先非常感谢,

比尔

I am having a real headache trying to set a node's local position to match a given world position.

I was given a solution but, AFAICS, it only takes into account orientation and position but NOT scaling :

node_new_local_position = node_parent.derivedOrientation().Inverse() * ( world_position_to_match - node_parent.derivedPosition() );

The node in question is a child of node_parent; node_parent local and derived properties (orientation, position and scaling) are known, as well as its full matrix transform.

All the positions are 3d vectors; the orientation is a quaternion; the full transform is a 4x4 matrix.

Could someone please help me to modify the solution to support scaling in the node hierarchy?

Many thanks in advance,

Bill

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

遥远的绿洲 2024-09-03 03:07:11

我不是 ogre3d 方面的专家,但我想您需要类似的东西:

 node_new_local_position =  node_parent._getFullTransform ().inverse() * world_position_to_match;

其中 _getFullTransform ().inverse()node_parents 的完整 4 x 4 逆变换。

编辑:看起来也许您应该使用 _setDerivedPosition 来完成您想要完成的任务。

I'm no expert in ogre3d but I guess you would need something like:

 node_new_local_position =  node_parent._getFullTransform ().inverse() * world_position_to_match;

where _getFullTransform ().inverse() is a full 4 x 4 inverse of node_parents transform.

EDIT: It looks like maybe you should just use _setDerivedPosition which does exactly what you're trying to accomplish.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文