如何创建自定义轴以在Three.js中旋转网格而不更改网格的X,Y,Z原点?

时间:2015-09-20 02:52:39

标签: rotation three.js

我有一些"块"这是Three.js(r72)网格对象(主要是从挤压形状创建的)

enter image description here

此网格的边界框是1 x 1 x 1立方体,XYZ轴帮助器位于0,0,0,创建此形状后,添加1,1,0处的场景。 因此,为了澄清,网格0,0,0位于世界1,1,0

我想围绕Z轴(蓝轴)旋转对象(例如在XY平面中),使曲面朝向我。

如果我这样做,它会围绕Z轴旋转,特别是在网格的原点处,我得到了这个。 enter image description here

然而,这是 NOT 我想要的。

我想围绕 a Z轴旋转网格,特别是穿过网格的质心的网格。例如由当前世界形成的轴协调1.5,1.5,01.5,1.5,1

因此产生的输出将是(我必须伪造这个以获得所需的图像) enter image description here

我知道我可以创建我的初始形状/网格,以便"插入点" / origin实际上位于我的形状的质心(或底部中心),因此这将是"解决"我的轮换问题,但我不想这样做,因为它会破坏我以简单,合乎逻辑的方式放置块的能力。

无论是应用矩阵变换还是旋转,我都可以使用任何适用于此的选项。

我能想出的唯一 丑陋的 选项是:

  • 保存网格插入点的orig.x, orig.y, orig.z
  • 将网格移动到((0,0,0) - (meshCentroid.x, meshCentroid.y, meshCentroid.z))
  • 围绕世界Z Axis
  • 旋转网格
  • 将网格移回((orig.x, orig.y, orig.z) + (meshCentroid.x, meshCentroid.y, meshCentroid.z))

然而,这似乎极端矫枉过正,如果我想围绕通过质心的轴之外的任意轴旋转,它将无法工作。

我知道这里已经有很多类似的问题,但我发现 破坏了网格的位置点 以便应用轮换。

0 个答案:

没有答案