2017-06-10 9 views
1

私はObjectLoader経由でロードされるオブジェクトを持っています。私はオブジェクトを複製し、その素材を置き換えて、元のオブジェクトがレイキャスティングを介して選択されているときに選択インジケータとして使用するためにその場所に拡大縮小しようとしています。以下のコードブローは、オブジェクトのクローニング、マテリアルの置き換え、スケーリングを示しています。オブジェクトをスケーリングするときの奇妙な動作

let selectionIndicatorMesh = mesh.clone(); 
selectionIndicatorMesh.material = new THREE.MeshBasicMaterial({ color: 0x00ff00 }); 
selectionIndicatorMesh.material.transparent = true; 
selectionIndicatorMesh.material.opacity = 0.4; 
selectionIndicatorMesh.scale.x = selectionGlowMesh.scale.x * 1.15; 
selectionIndicatorMesh.scale.y = selectionGlowMesh.scale.y * 1.15; 
selectionIndicatorMesh.scale.z = selectionGlowMesh.scale.z * 1.15; 
scene.add(selectionIndicatorMesh); 

私が中心からxの尺度、又はY、オブジェクトのスケールを増加させ、より広くなると深さが増加すると、Iは、Z値をスケーリングするときに奇妙な...本当に奇数の一部でありますオブジェクトは高さが増加するだけでなく、Y軸を見かけ上任意の距離上に移動させます。 mesh.up{ x: 0, y: 1, z: 0 }です。

私はこの時点で完全に困惑していますが、私は3D環境が初めてであるため、何らかの理由で私にはわかりませんという簡単な説明があると確信しています。私はmesh.geometry.applyMatrix(new THREE.Matrix4().makeTranslation(0, 0, -(delta/2))でスケーリングする前に原点を変更しようとしましたが、成功しませんでした。これはオブジェクトをY軸の下に戻しますが、元のオブジェクトは新しいオブジェクト内に完全に包含されません。

注:selectionIndicatorMeshにはグループがありません。シーンはその親です。

ご協力いただければ幸いです!

答えて

1

これに遭遇した人は、ここでどのように解決したのですか。

let selectionIndicatorMesh = mesh.clone(); 
selectionIndicatorMesh.material = new THREE.MeshBasicMaterial({ color: 0x00ff00 }); 
selectionIndicatorMesh.material.transparent = true; 
selectionIndicatorMesh.material.opacity = 0.4; 

let box = new THREE.Box3().setFromObject(selectionIndicatorMesh); 
let offset = box.getCenter(); 

selectionIndicatorMesh.geometry.center(); 

selectionIndicatorMesh.position.set(offset.x, offset.y, offset.z); 

selectionIndicatorMesh.scale.x = selectionGlowMesh.scale.x * 1.15; 
selectionIndicatorMesh.scale.y = selectionGlowMesh.scale.y * 1.15; 
selectionIndicatorMesh.scale.z = selectionGlowMesh.scale.z * 1.15; 
scene.add(selectionIndicatorMesh); 
  1. あなたのメッシュからBox3を作成します。let box = new THREE.Box3().setFromObject(selectionIndicatorMesh);
  2. 保存それのオフセットへの参照:let offset = box.getCenter();
  3. センターあなたのメッシュをselectionIndicatorMesh.geometry.center();
  4. が保存されたオフセットselectionIndicatorMesh.position.set(offset.x, offset.y, offset.z);
  5. にあなたのメッシュの位置を設定します。