問題描述
如何在 three.js 中獲得 Object3D 的世界旋轉?我知道如何從 object.matrixWorld
獲取 Object3D 的世界位置,但是如何獲取對象的世界旋轉?
How do I get the world rotation of an Object3D in three.js?
I know how to get the world position of an Object3D from object.matrixWorld
, but how do I get the world rotation of an object?
我需要這個來解決以下問題:我有一個像這樣的分層對象結構:
I need this for the following problem: I have a hierarchical Object structure like this:
var obj1 = new THREE.Object3D();
obj1.x = 200;
obj1.rotation.x = 0.1;
scene.add(obj1);
var obj2 = new THREE.Object3D();
obj2.y = -400;
obj2.rotation.y = 0.21;
obj1.add(obj2);
var obj3 = new THREE.Object3D();
obj3.z = -200;
obj3.rotation.x = 0.1;
obj3.rotation.y = -0.1;
obj2.add(obj3);
現(xiàn)在我想讓我的相機在一定距離內正交地看 obj3.當我的對象不旋轉時,它的工作原理如下:
Now I want to make my camera look at obj3 orthogonally in a certain distance. When My Objects are not rotated, this works like this:
var relativeCameraOffset = new THREE.Vector3(0, 0, 500); // 500 is z-distance from my object
var cameraOffset = relativeCameraOffset.applyMatrix4(obj3.matrixWorld);
camera.position = cameraOffset;
當只有我的最后一個孩子被旋轉時,當我添加這一行時,我得到了我想要的
When only my last child is rotated I get what I want when I add this line
camera.rotation = obj3.rotation;
但是當所有父元素都旋轉時,這不起作用.所以我正在尋找一種方法來獲得我的 3D 對象的世界方向".謝謝.
But when all parent Elements are rotated this is not working. So I'm looking for a way to get the world "orientation" of my 3D object. Thanks.
推薦答案
獲取世界"旋轉的一種方法如下:
One way to get the "world" rotation is as follows:
var position = new THREE.Vector3();
var quaternion = new THREE.Quaternion();
var scale = new THREE.Vector3();
mesh.matrixWorld.decompose( position, quaternion, scale );
然后您可以像這樣設置相機方向:
You can then set your camera orientation like so:
camera.quaternion.copy( quaternion );
重要提示:如果您要直接訪問 matrixWorld
,您必須確保它已更新.渲染器通常在渲染循環(huán)中為您執(zhí)行此操作.但是,如果您在渲染調用之間,并且需要強制更新矩陣,則可以使用
Important: if you are going to access matrixWorld
directly, you have to make sure it is updated. The renderer typically does this for you in the render loop. If, however, you are between render calls, and need to force an update of the matrix, you can do so with
mesh.updateMatrixWorld( true );
現(xiàn)在有一種新方法可用.檢查源代碼,看看它在做什么.
There is a new method that is now available. Check the source code so you see what it is doing.
Object3D.getWorldQuaternion( optionalTarget );
three.js r.69
three.js r.69
這篇關于三個 JS 從 matrixWorld 獲取(世界)旋轉的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網(wǎng)!