THREE.js迁移r60到r70:现在不能写:mesh.position = myVector3()

时间:2015-02-28 22:46:16

标签: three.js position migration mesh

我正在将THREE.js应用程序从r60迁移到r70。在其他更改中,我注意到以下形式的r60结构在r70中不再起作用。

mesh.position.set(0,0,0);
myVector3 = new THREE.Vector3 (100,200,300);
mesh.position = myVector3;  

这适用于网格,pointLights,可能适用于所有Object3D,但我没有进一步测试过。

在上面的例子中,mesh.position x,y,z值保持不变(0,0,0)。有关说明,请参阅this JSFiddle并比较第70和73行。

    //...The next line DOES NOT update Sphere_mesh.position.x
    Sphere_mesh.position = NewPos_vector3;//...

    //...The next line DOES update Sphere_mesh.position.x
    Sphere_mesh.position.x = NewPos_vector3.x

在调试器中,在执行期间没有给出控制台警告,但是分配没有起作用。在非常简短的THREE.js migration notes for (r68 --> r69)中,我看到一些关于Object3D的位置不再是不可变的,但我不知道这意味着什么。

无论如何,我的问题

是否有标准的THREE结构或函数可用于将Vector3对象中的x,y,z值复制到mesh.position的x,y,z值而不是有效但冗长的形式,如

mesh.position.x = myVector3.x;
mesh.position.y = myVector3.y;
mesh.position.z = myVector3.z; ?

e.g。

之类的东西
mesh.position = F_Get_Object3DPosition_from_Vector3(myVector3);   ?

我知道编写自己的函数会很容易,但标准的THREE函数更有可能在未来版本的THREE中顺利演变。

2 个答案:

答案 0 :(得分:1)

我认为你的意思是myVector3而不是myVector3()在最后一行...无论如何,我认为这也会有效但事实是,你正在将一个Vector应用于一个应该是点/顶点的东西。即使这在我看来是有效的,也不是正确的方法。如何使用简单的数组:

mesh.position.set(0,0,0);
new_position = [100,200,300]
mesh.position.fromArray(new_position,0)

其中0是起始索引。因此,您可以在一个数组中拥有多个位置集

答案 1 :(得分:1)

position beeing immutable意味着无法更改position属性。

所以

mesh.position = anything;

没有工作(但你已经发现了这个)

你能做的不是改变位置,而是必须改变位置值。

在您的情况下,最简单的方法是

mesh.position.copy (myVector3);