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

Другие вопросы по тегам