Rotate around World Axis

拥有回忆 提交于 2019-12-24 10:45:48

问题


I tried to rotate an object arount the Worlds-Y-Axis, with

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

but the result was, that the object is only rotated in object space.

To be sure that I used the correct method I looked into the documentation and found that there are three methods to rotate an object:

.RotateY(rad) // rotate in Local Space

.rotateOnAxis(axis,rad) // rotation in Object Space

.rotateOnWorldAxis(axis,rad) // rotation in World Space

It seems that I used the correct method.
Is this a bug or an understanding problem on my side?

Here is a JSFiddle which illustrates my problem (the blue cube should rotate around the world axis).
Here is a second Fiddle where thy cyan cube is a child of another object.


回答1:


It looks to me like your real question isn't regarding world space or object space rotations, cause those are working as expected in your examples.

You probably meant, how to change the point of rotation of an object. If that is the case, you have two options, you can either translate all your geometry vertices in respect to a pivot point of rotation. That way, your pivot will be centered at (0,0,0) and your vertices will rotate in respect to that.

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

Or you can make your object a child of a different Object3D (pivot), position your original mesh similarly to what was described above and rotate your pivot mesh.

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



来源:https://stackoverflow.com/questions/56426088/rotate-around-world-axis

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!