Three.js: 如何在克隆后强制更新矩阵? (与 CSG ThreeBSP 一起使用)

Three.js: how to force update matrix after cloning? (to use with CSG ThreeBSP)

我正在尝试克隆然后缩放网格,但缩放似乎不会立即对克隆的对象起作用,出于使用 CSG ThreeBSP 进行编程的目的。我想我应该在缩放后调用一个函数来强制矩阵或其他内部变量立即重新计算,而不是等待渲染端的完整更新循环。

我的代码看起来像这样:

var someMesh2 = someMesh1.clone();
someMesh2.scale.set(2,2,2);
someProgrammingOperation(someMesh2);
//It turns out that internally, someMesh2 still has the same properties (matrix?) as someMesh1 :(

我错过了什么?也欢迎提出建议:)

每当您调用 renderer.render().

时,渲染器都会为您更新

object.matrix

如果需要手动更新对象矩阵,调用

object.updateMatrix();

它将根据 object.positionobject.quaternionobject.scale.

的当前值更新矩阵

(请注意 object.rotationobject.quaternion 保持同步。当您更新一个时,另一个会自动更新。)

three.js r.84

最后,我的问题是 CSG ThreeBSP 对象需要基于对象的 Geometry 工作,而不是在 Mesh 本身中工作。我在 Geometry 上应用了缩放,它按预期工作。

不过有一点需要注意,在处理网格和几何实例时应该小心,因此需要进行一些克隆以保持原始对象的原样,如下例所示:

var clonedMesh = original.mesh.clone()
var clonedGeometry = clonedMesh.geometry.clone()
clonedMesh.geometry = clonedGeometry
clonedMesh.geometry.scale(2,2,2)

var someBsp = new ThreeBSP( clonedMesh )

var newMesh = someBspBsp.toMesh()
someScene.add newMesh