缩放对象

时间:2017-06-10 01:38:41

标签: three.js

我有一个通过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的比例时,对象从中心向外缩放并变得更宽并且DEPTH增加,奇怪的是......真正奇怪的部分是当我缩放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 个答案:

答案 0 :(得分: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. 从您的网格中创建Box3let 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 );