5

STLLoader を使用して stl を threeJS シーンにロードし、BufferGeometry を返しました。

私はそれから使用しました

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

ジオメトリを変換します。これにより、

myMesh.position
myMesh.quaternion

翻訳はシーンで行われており、すべてうまく機能しています。私は、

myMesh.geometry.attributes.position.array

翻訳の前後で違いますが、同じままです。変換後に buffergeometry から新しい頂点を抽出したいと考えています。電話してみた

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

レンダーループで頂点を明示的に更新していないのでうまくいきません。

4

1 に答える 1

6

メッシュの変換行列 を考慮して、メッシュのジオメトリのワールド位置を取得したいと考えてい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

于 2015-09-07T02:58:46.880 に答える