Three.js: как принудительно обновить матрицу после клонирования? (для использования с 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 :(
Что мне не хватает? Предложения также приветствуются:)
2 ответа
В итоге моя проблема заключалась в том, что объект 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
object.matrix
обновляется для вас, когда вы звоните renderer.render()
,
Если вам нужно обновить матрицу объекта вручную, позвоните
object.updateMatrix();
и он обновит матрицу из текущих значений object.position
, object.quaternion
, а также object.scale.
(Обратите внимание, что object.rotation
а также object.quaternion
оставаться синхронизированным. Когда вы обновляете один, другой обновляется автоматически.)
three.js r.84