44

在three.js中,我想在场景中的某个位置添加一个网格

我试过了:

// mesh is a THREE.Mesh
scene is a THREE.Scene
scene.add(mesh)
scene.updateMatrixWorld(true)
mesh.matrixWorld.setPosition(new THREE.Vector3(100, 100, 100))
scene.updateMatrix()

但它没有影响任何东西。

我该怎么办 ?

4

4 回答 4

98

我建议您在这里查看文档:http://threejs.org/docs/#Reference/Objects/Mesh 正如 您在文档页面顶部看到的那样,Mesh 继承自“ Object3D ”。这意味着您可以使用 Object3D 提供的所有方法或属性。因此,单击文档页面上的“ Object3D ”链接并检查属性列表。你会发现属性“ .position ”。点击“ .position ”查看它是什么数据类型。呸..它的Vector3

因此,请尝试执行以下操作:

//scene is a THREE.Scene
scene.add(mesh);
mesh.position.set(100, 100, 100);
于 2013-01-08T20:23:33.133 回答
35

我之前在github上看到过。(三.js r71)

mesh.position.set(100, 100, 100);

并且可以为个人完成

mesh.position.setX(200);  
mesh.position.setZ(200); 

参考:https ://threejs.org/docs/#api/math/Vector3

详细解释如下:

因为 mesh.position 是“Vector3”。Vector3() 有 setX() setY() 和 setZ() 方法。我们可以这样使用它。

mesh.position = new THREE.Vector3() ; //see position is Vector3()
vector1 = new THREE.Vector3();   

mesh.position.setX(100);  //or  this
vector1.setX(100)         // because all of them is Vector3()
camera1.position.setZ(100); // or this
light1.position.setY(100)   // applicable to any object.position
于 2015-03-20T20:30:32.803 回答
8

我更喜欢用来Vector3设置位置。

   let group = new THREE.Group();

   // position of box
   let vector = new THREE.Vector3(10, 10, 10);
   
     // add wooden Box
   let woodenBox = new THREE.Mesh(boxGeometry, woodMaterial);

    //update postion
    woodenBox.position.copy(vector);

  // add to scene
   group.add(woodenBox)
   this.scene.add(group);
于 2019-05-16T13:34:31.100 回答
1

如果有人正在寻找从 Vector3 更新位置的方法

const V3 = new THREE.Vector3(0,0,0)            // Create variable in zero position
const box = new THREE.Mesh(geometry, material) // Create an object
Object.assign(box.position, V3)                // Put the object in zero position

或者

const V3 = new THREE.Vector3(0,0,0)            // Create variable in zero position
const box = new THREE.Mesh(geometry, material) // Create an object
box.position.copy(V3)
于 2021-04-20T09:56:20.223 回答