Проблема: Я ищу, чтобы обновить позиции вершин на сетке после масштабирования. Я делаю это, потому что мне нужно рассчитать объем сетки. Я создаю клонированную сетку, чтобы сделать это, потому что мне нужно сохранить масштаб активного параметра в исходной сетке.three.js applyMatrix после результатов масштабирования
Я использовал ответ на How to update vertices geometry after rotate or move object
который работал хорошо с Three.js релиз .70, но сломалась на выпуск 0,72
Мой код:
var volumeClone = new THREE.Mesh (this.mesh.geometry.clone(), new THREE.MeshBasicMaterial({ color: 0xff0000 }));
volumeClone.scale.z = heightScale;
volumeClone.updateMatrix();
volumeClone.geometry.applyMatrix(volumeClone.matrix);
volumeClone.matrix.identity();
volumeClone.geometry.verticesNeedUpdate = true;
volumeClone.scale.set(1, 1, 1);
console(calculateVolume(volumeClone));
Результат:
В Chrome есть:
Uncaught TypeError: Не удается прочитать свойство 'setFromPoints' неопределенного THREE.Geometry.computeBoundingBox @ lib.min.js: 3THREE.Geometry.applyMatrix
То, что я пробовал: я попытался исследовать и изолировать проблему в Geometry.js и Box3.js, а также понять программный поток, чтобы понять, почему «this.boundBox» не определен, но я не нашел проблемы.
Вопрос: Правильно ли синтаксис? Была ли обновлена информация о трёх.js в этой области?
Используйте three.js, а не three.min.js, для разработки. Используйте текущую версию three.js. Попытайтесь отследить проблему. Опубликуйте jsfiddle, если у вас есть проблемы. – WestLangley
Хорошо, я сделал это. Я отслеживал проблему дальше до this.mesh.geometry.clone(), которая, кажется, копирует только faceVertexUvs, лица, вершины и прототип. Он не копирует свойства по умолчанию объекта геометрии, как указано в Geometry.js? Нет имени, типа, id и т. Д., Поэтому boundingBox не определен, что вызывает видимую ошибку в Geometry.applyMatrix. Есть ли другой метод клонирования, который я должен использовать? – Radio
@WestLangley Клон относится к типу extrudeGeometry. Я не уверен, что это часть проблемы. – Radio