three.js如何将一个对象定位到另一个对象旁边(全局世界位置)

3

我在场景中使用objloader加载了一个对象,后来我又加载了第二个对象到场景中,但我想将它的绝对位置改变到第一个对象的另一侧。

两个对象的所有位置都是相对于本地坐标系(0,0,0)的。

我该如何更改它的全局位置?


你能添加一些相关的代码吗?这样可能更容易得到帮助。 - Jose Gómez
这个不起作用,但是思路在这里:object1.position.set(object2.position.copy); 我尝试过使用matrixWorld.getPosition()或localToWorld,但它总是返回相对位置(0,0,0)。 - davincy
3个回答

8
发布的答案现在已经过时了。在我的threejs版本中,它会响应以下警告:

THREE.Matrix4: .getPosition()已被删除。请改用Vector3.setFromMatrixPosition( matrix )。

因此,您需要将其替换为以下内容:
objectA.position.setFromMatrixPosition( objectB.matrixWorld );

其中,objectB 是场景中的一个对象,你希望 objectA 复制它的位置。


2
我找到了答案:
object1.position.copy(object2.matrixWorld.getPosition());

我简直不敢相信我花了这么长时间才找到这个答案。谢谢! - Nick Brady
.getPosition()已被弃用。现在你应该使用Vector3.setFromMatrixPosition( matrix )代替它,如果你尝试调用它。 - Yaume

0

每个你可以放置到场景中的对象都有一个“位置”属性,它是一个三维向量。你可以简单地改变它的x / y / z值。

例如,假设你的对象被称为“网格”:

mesh.position.x += 1; //you need re-render if you change something in the object after adding to the scene
yourScene.add(mesh); 

这将在场景中将对象移动一个“单位”。这意味着你可以这样做:

mesh2.position.x = mesh1.position.x + 1;
yourScene.add(mesh1); 
yourScene.add(mesh2); 

在这里,您可以查看可添加到THREE.js场景中的对象的其他属性和方法:

https://threejs.org/docs/#api/en/core/Object3D


我知道,但我想获取我的另一个对象的位置,以便将此对象移动到其旁边... - davincy
你能展示一下你的代码吗?这样会更容易帮助你。基本原则是访问对象的位置向量,这是 three.js 存储位置的唯一位置。如果你没有直接处理对象的句柄,也可以访问场景,遍历场景的子元素并找到你想要的那个。但是,如果没有代码,猜测你所遇到的问题可能会很困难。 - Scharnvirk
很不幸,我没有任何代码,因为我尝试的所有方法都不起作用。始终返回0。基本上,我试图找到一个对象在场景中的x位置,以将其设置为另一个对象。你知道吗? - davincy
展示你的有问题的代码。这个地方正好是为修复不能按预期工作的代码而设立的! :) - Scharnvirk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接