附加到组后,为什么顶点不更新?

时间:2019-12-30 13:12:35

标签: three.js

我想创建一组线。 第一行:

 var geometry = new THREE.Geometry();
 itemLine = new THREE.Line( geometry, material );

当前几何图形:

geometry.vertices[0]
Object { x: -540, y: 50, z: 0 }

之后,我创建组并设置位置:

item  = new THREE.Group();
item.attach(itemLine);
item.position.set( centerPoint.x, centerPoint.y, 0 );

centerPoint不是(0,0,0)

创建群组并附加子代后,我在控制台中看到了

geometry.vertices[0]
Object { x: -540, y: 50, z: 0 }`

顶点未更新!我想要新的坐标(本地和世界),并具有组的偏移位置。

1 个答案:

答案 0 :(得分:3)

Geometry.vertices定义局部空间中的几何。变换3D对象或其祖先并不重要,顶点将始终保持相同的值。

您可以通过线世界矩阵将顶点转换为世界空间,从而获得所需的结果。这是此工作流程的完整示例代码。

var geometry = new THREE.Geometry();
geometry.vertices.push( new THREE.Vector3( 0, 0, 0 ) );
geometry.vertices.push( new THREE.Vector3( 1, 0, 0 ) );

var material = new THREE.LineBasicMaterial( { color: 0xff0000 } );

var lines = new THREE.Line( geometry, material );

var group = new THREE.Group();
group.add( lines );
group.position.set( 2, 0, 0 );
group.updateMatrixWorld(); // update world matrices of the hierarchy of 3D objects
scene.add( group );

const vertex = new THREE.Vector3();
vertex.copy( geometry.vertices[ 0 ] ).applyMatrix4( lines.matrixWorld );
console.log( vertex ); // prints {x: 2, y: 0, z: 0}

演示:https://jsfiddle.net/sy6ur1x7/

three.js R112