【问题标题】:Rotate around World Axis围绕世界轴旋转
【发布时间】:2019-10-18 22:24:17
【问题描述】:

我尝试使用

围绕 Worlds-Y 轴旋转一个对象

myObject.rotateOnWorldAxis(new THREE.Vector3(0,1,0),THREE.Math.degToRad(1));

但结果是,对象仅在对象空间中旋转。

为了确保我使用了正确的方法,我查看了documentation,发现旋转对象有三种方法:

.RotateY(rad) // 在局部空间中旋转

.rotateOnAxis(axis,rad) // 在对象空间中旋转

.rotateOnWorldAxis(axis,rad) // 在世界空间中旋转

看来我使用了正确的方法。
这是我这边的错误还是理解问题?

这是一个JSFiddle,它说明了我的问题(蓝色立方体应该围绕世界轴旋转)。
这是第二个Fiddle,您的青色立方体是另一个对象的子对象。

【问题讨论】:

  • 您将它们全部添加到scene,这是您的世界。所有的旋转方法都会做同样的事情
  • @davidpox 抱歉,我还不明白。他们是围绕对象轴而不是围绕世界轴旋转?我创建了第二个小提琴,其中青色立方体是另一个对象的子对象。 jsfiddle.net/4wpxyLg0/2
  • @davidpox 也许你能给我举个例子,其中 rotateOnAxis() 的行为与 rotateOnWorldAxis() 不同?
  • @KarlheinzReinhardt 如果您的轴在对象空间和世界空间中对齐,则旋转看起来相同。但它们不是,正如您在此示例中看到的那样:JSFiddle 取消注释以查看差异。
  • @ScieCode 谢谢你现在我明白了。我认为枢轴点的位置会根据功能而变化->例如在rotateOnWorldAxis()pivot 点将在世界中心。 但是在现实中轴心点总是在/在对象的原点;只有给定轴的方向在空间上是相对的。

标签: three.js


【解决方案1】:

在我看来,您真正的问题不是关于世界空间或物体空间旋转,因为它们在您的示例中按预期工作。

您可能的意思是,如何更改对象的旋转点。如果是这种情况,您有两个选择,您可以translate 相对于旋转轴心点的所有几何顶点。这样,您的枢轴将以 (0,0,0) 为中心,并且您的顶点将相对于此旋转。

mesh.geometry.translate( x, y, z );

或者您可以使您的对象成为不同 Object3D(枢轴)的子对象,将您的原始网格与上述类似地定位并旋转您的枢轴网格。

var cube = new THREE.Mesh( geometry, material );
var pivot = new THREE.Object3D();

cube.position.set( 0, 12, 30 ); // offset from center

pivot.add( cube );
scene.add( pivot );

//...

pivot.rotation.y += Math.PI/2;

JSFiddle

【讨论】:

    猜你喜欢
    • 2015-07-23
    • 2017-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-02
    • 2016-09-09
    • 2016-02-29
    相关资源
    最近更新 更多