应用翻译时,ThreeJS bufferGeometry位置属性不会更新

时间:2015-09-07 02:14:56

标签: javascript three.js buffer-geometry

我使用STLLoader将stl加载到返回BufferGeometry的threeJS场景中。

然后我用

myMesh.position.set( x,y,z ) 
myMesh.rotation.setFromQuaternion ( quaternion , 'XYZ');

翻译几何体。这有效地改变了

myMesh.position
myMesh.quaternion

翻译正在场景中进行,一切正常。  

myMesh.geometry.attributes.position.array
在翻译之前和之后

会有所不同 - 但它仍然是相同的。 我想在翻译后从缓冲区测量中提取新的veritces 。 我试着打电话给

myMesh.geometry.dynamic = true;
myMesh.geometry.attributes.position.needsUpdate = true;

在渲染循环中,但没有运气,因为我还没有更新顶点明显。

1 个答案:

答案 0 :(得分:4)

您希望获得网格几何的世界位置,同时考虑网格的变换矩阵mesh.matrix。此外,您的网格几何体为THREE.BufferGeometry

以下是要遵循的模式:

mesh = new THREE.Mesh( geometry, material );
mesh.position.set( 10, 10, 10 );
mesh.rotation.set( - Math.PI / 2, 0, 0 );
mesh.scale.set( 1, 1, 1 );
scene.add( mesh );

mesh.updateMatrix(); // make sure the mesh's matrix is updated

var vec = new THREE.Vector3();
var attribute = mesh.geometry.attributes.position; // we want the position data
var index = 1; // index is zero-based, so this the the 2nd vertex

vec.fromAttribute( attribute, index ); // extract the x,y,z coordinates

vec.applyMatrix4( mesh.matrix ); // apply the mesh's matrix transform

three.js r.71