STLLoader、OrbitalControls、および TransformControls モジュールで ThreeJS を使い始めたところです。
STLLoader 関数の範囲内でシーンにメッシュを追加すると、期待どおりに機能します。ただし、スコープ外に追加しようとすると、エラーTHREE.Object3D.add: object not an instanceがスローされます。
メッシュ変数はグローバルに宣言されているため、ローダー スコープの外で使用できないというのは意味がありません。何が間違っているのかわかりませんが、助けていただければ幸いです。
var renderer, scene, camera, mesh, orbit, control;
// mesh
var loader = new THREE.STLLoader();
loader.load( 'benchy.stl', function ( geometry ) {
var material = new THREE.MeshPhongMaterial( { color: 0x4eacc2, specular: 0x111111, shininess: 200 } );
mesh = new THREE.Mesh( geometry, material );
mesh.position.set( 0, 0, 0);
mesh.rotation.set( - Math.PI / 2, 0, 0 );
mesh.scale.set( 2, 2, 2 );
//scene.add( mesh );
});
//controls
orbit = new THREE.OrbitControls( camera, renderer.domElement );
orbit.update();
orbit.addEventListener( 'change', render );
control = new THREE.TransformControls( camera, renderer.domElement );
control.addEventListener( 'change', render );
control.addEventListener( 'dragging-changed', function ( event ) {
orbit.enabled = ! event.value;
} );
scene.add( mesh );
control.attach( mesh );
scene.add( control );