如何变换.obj文件的morphTarget(BufferGeometry)

时间:2018-02-27 03:35:41

标签: three.js

我正在尝试变形加载的.obj文件的顶点,如下例所示:https://threejs.org/docs/#api/materials/MeshDepthMaterial - 当在THREE.MeshDepthMaterial中激活'wireframe'和'morphTargets'时。

但我无法达到预期的效果。从上面的示例中,几何体可以通过geometry.morphTargets.push( { name: 'target1', vertices: vertices } );变形,但似乎morphTargets不适用于我加载的3D对象,因为它是BufferGeometry

相反,我试图从myMesh.child.child.geometry.attributes.position.array[i]独立地改变每个顶点,它有点工作(我的网格的顶点正在移动)但不如上面的例子。

这是我能做的Codepen

如何在我加载的.obj文件中达到预期的效果?

1 个答案:

答案 0 :(得分:1)

将变形目标添加到THREE.BufferGeometryTHREE.Geometry略有不同。例如:

// after loading the mesh:
var morphAttributes = mesh.geometry.morphAttributes;
morphAttributes.position = [];
mesh.material.morphTargets = true;

var position = mesh.geometry.attributes.position.clone();

for ( var j = 0, jl = position.count; j < jl; j ++ ) {

  position.setXYZ(
    j,
    position.getX( j ) * 2 * Math.random(),
    position.getY( j ) * 2 * Math.random(),
    position.getZ( j ) * 2 * Math.random()
  );

}

morphAttributes.position.push(position); // I forgot this earlier.
mesh.updateMorphTargets();
mesh.morphTargetInfluences[ 0 ] = 0;

// later, in your render() loop:
mesh.morphTargetInfluences[ 0 ] += 0.001;

three.js r90