【问题标题】:How do i convert from center origin to bottom origin?如何从中心原点转换为底部原点?
【发布时间】:2015-03-14 09:54:54
【问题描述】:

我首先要道歉,我非常怀疑我是否会使用任何正确的术语,不幸的是经过几个小时的原始测试并将我的头撞到墙上我可以弄清楚这一点。

我使用一个引擎,它使用底部对齐系统来定位它的模型。这意味着 z 轴(在 z 向上系统中)是 z - 半径 = 原点,或者如果模型位于 0,0,0,则所有 tris 都将位于正 z 空间中。

我正在集成子弹,它是一个中心对齐系统,这意味着对象的原点位于质量中心(在本例中是一个简单的 aabb 立方体)。

我遇到的问题是,我传入渲染器的偏航俯仰滚动和原点在 z+ 方向上被半径偏移。现在最大的问题是当俯仰或滚动变为 0 以外的值时。因为子弹的中心对齐系统,围绕俯仰旋转并围绕中心滚动,并且渲染围绕底部旋转。所以模型和边界框的排列位置有明显的区别。

那么有没有一种算法可以从这两种形式的方向转换?

【问题讨论】:

  • 我认为这个问题可能会很有趣,但对我来说,如果你用一小段代码来说明一个具体的例子会更清楚。
  • 很难用代码说明我可以给你看一些图片,这样会更清楚。 link橙色框是blenders aabb,立方体是引擎模型渲染,火球粒子是中心原点。如您所见,模型从原点底部渲染。所以基本上我需要一个让盒子对齐的算法:)盒子的宽度高度和深度是4.0。

标签: c++ math 3d bullet calculus


【解决方案1】:

好的,我想出了我自己的问题。

因此,对于任何偶然发现此问题的人,请解释到底发生了什么以及如何解决它。

简单地说,我的问题是如何从世界空间(x、y、z 平面)转换为局部空间(相对 x y z 平面)。因此,如果您要拿一个箭头并将其朝向 0 x 0 y 0 z 的方向,因为它的原点位于正空间中,例如 1 x 0 y 0 z,您的箭头朝向世界空间。这意味着如果您要向前移动,您将沿着 x 平面移动,沿着 y 平面向左移动,然后沿着 z 平面向上移动。

现在,如果该箭头沿偏航 x 度旋转,使其指向 1 x 1 y 0 z 现在,当您向前移动时,您将不再仅沿 x 平面移动。所以这就是所谓的在本地空间中移动。这意味着您正在沿着与节点(对象、模型等)的偏航和俯仰相关的平面移动。

所以在我的情况下,我有在“世界空间”中工作的项目符号,而我的渲染在“模型空间”中工作,所以我只需要将它放在一个转换两者的矩阵中。

两个转换空间我需要一个转换它们的投影矩阵。

所以这里是我找到的源链接,它可以转换这个并相当容易地解释相对数学。 http://www.codinglabs.net/article_world_view_projection_matrix.aspx

感谢每一位 追赶者

【讨论】:

  • 我是否可以建议您将回答中的问题的澄清移至实际问题?只是为了形式好,让人们更容易在谷歌上搜索这个问题,以确定这个问题是否可能对他们有帮助。
猜你喜欢
  • 2016-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-17
  • 1970-01-01
  • 2020-09-19
相关资源
最近更新 更多