Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Three.js:克隆后如何强制更新矩阵?(与CSG ThreeBSP一起使用)_Javascript_Three.js_Csg_Threecsg - Fatal编程技术网

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

Javascript Three.js:克隆后如何强制更新矩阵?(与CSG ThreeBSP一起使用),javascript,three.js,csg,threecsg,Javascript,Three.js,Csg,Threecsg,我正在尝试克隆并缩放网格,但对于使用CSG ThreeBSP编程的目的,在克隆对象上缩放似乎不会立即起作用。我认为我应该在缩放后调用一个函数,强制矩阵或其他内部变量立即重新计算,而不是等待渲染端的完整更新循环 我的代码如下所示: var someMesh2 = someMesh1.clone(); someMesh2.scale.set(2,2,2); someProgrammingOperation(someMesh2); //It turns out that internally, som

我正在尝试克隆并缩放网格,但对于使用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.updateMatrix();
它将根据
object.position
object.quaternion
object.scale.的当前值更新矩阵。

(请注意,
object.rotation
object.quaternion
保持同步。更新其中一个时,另一个会自动更新。)


three.js r.84

最后,我的问题是CSG ThreeBSP对象需要根据对象的几何体而不是网格本身工作。我在几何体上应用了缩放,效果如预期

但有一个警告,即在处理网格和几何体实例时应小心,因此需要执行一些克隆以保持原始对象的原样,如以下示例所示:

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

你是如何确定它是同一个矩阵的?重置刻度后,它不应该是.Call
object.updateMatrix()
。@pailhead我之所以确定它,是因为我基于CSG()执行了其他操作,但这些操作没有拾取我要使用的更新刻度。回答问题后,请不要更改该问题。以前的评论和回答现在毫无意义了。@WestLangley我以为我只是在添加更多信息来帮助更好地理解这个问题。你之前的回答实际上帮助我找到了一个解决方案,但最终证明问题更加具体。谢谢。最后,CSG ThreeBSP似乎实际使用了网格的几何体来完成其工作,而不是网格本身,这就是它无法工作的原因。我在回信中解释了这一点。