THREE.js 将 r60 迁移到 r70:现在无法写入:mesh.position = myVector3()

THREE.js Migration r60 to r70: now cannot write: mesh.position = myVector3()

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

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

这适用于网格、点光源,大概适用于所有 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 位置不再是不可变的东西,但我不知道那是什么意思。

无论如何,我的问题

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

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

例如诸如

mesh.position = F_Get_Object3DPosition_from_Vector3(myVector3);   ?

我知道编写自己的函数很容易,但标准的 THREE 函数更有可能随着 THREE 的未来版本顺利发展。

我认为你在最后一行中的意思是 myVector3 而不是 myVector3()...无论如何,我虽然这也行,但问题是,你正在将 Vector 应用于应该是 point/Vertex.即使在我看来这可行,但这也不是正确的方法。如何使用一个简单的数组:

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

其中0为起始索引。所以你可以在一个数组中设置多个位置

position beeing immutable 表示位置 属性 无法更改。

所以

mesh.position = anything;

行不通(但你已经发现了)

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

对于您的情况,最简单的方法是

mesh.position.copy (myVector3);