1

我正在尝试克隆然后缩放网格,但缩放似乎并没有立即在克隆的对象上起作用,用于使用 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 :(

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

4

2 回答 2

3

object.matrix每当您调用时,渲染器都会为您更新renderer.render().

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

object.updateMatrix();

它将根据 、 和 的当前值object.position更新object.quaternion矩阵object.scale.

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

三.js r.84

于 2017-02-21T01:29:02.900 回答
0

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

不过需要注意的是,对于网格和几何体实例应该小心,因此需要进行一些克隆以保持原始对象不变,如下例所示:

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
于 2017-02-21T13:49:51.693 回答