Three.js:使用变形目标获取更新的顶点

Three.js: Get updated vertices with morph targets

我有一些变形目标在工作:

https://jsfiddle.net/3wtwzuh3/2/ (使用滑块控件查看变形)

但是,我希望能够在变形后访问顶点的新位置。如果您在链接的示例中注意到,我正在显示立方体第一个顶点的 y 坐标并且它没有更新!

// This Y vertex doesn't seem to update!
   elInfo.innerHTML = geometry.vertices[0].y;

是否有可能获得新职位?我试过设置各种标志,但没有成功。

谢谢!

请注意这个例子只是为了问题的目的,在我的实际项目中有点复杂(我需要顶点数据!)。

变形在 GPU 上更新,而不是 CPU。所以如果你想知道新的顶点位置,你必须在GPU正在做的CPU上做同样的计算。

方法 Mesh.raycast() 必须在 CPU 上进行光线投射计算,因此您可以参考该代码作为示例。

这是您可以遵循的简单模式。您必须针对您的完整应用程序调整此模式,因为此模式是硬连线以匹配您的简单 fiddle.

var morphTargets = mesh.geometry.morphTargets;
var morphInfluences = mesh.morphTargetInfluences;

var vA = new THREE.Vector3();
var tempA = new THREE.Vector3();

var fvA = geometry.vertices[ 0 ]; // the vertex to transform

for ( var t = 0, tl = morphTargets.length; t < tl; t ++ ) {

    var influence = morphInfluences[ t ];

    if ( influence === 0 ) continue;

    var targets = morphTargets[ t ].vertices;

    vA.addScaledVector( tempA.subVectors( targets[ 0 ], fvA ), influence ); // targets index must match vertex index

}

vA.add( fvA ); // the transformed value

fiddle: https://jsfiddle.net/3wtwzuh3/3/

three.js r.75