#three.js #buffer-geometry
Вопрос:
Я запускаю three.js пример кода, его three.js версия — 0.124.
createObj() {
const geometry = new THREE.InstancedBufferGeometry();
const baseGeometry = new THREE.BoxGeometry(2, 2, 20, 2, 2, 6);
// Copy attributes of the base Geometry to the instancing Geometry
geometry.copy(baseGeometry);
}
когда код выполняется в ‘geometry.copy (baseGeometry);’, появляется ошибка, показанная как
TypeError: Cannot read properties of undefined (reading 'clone')
at InstancedBufferGeometry.copy (three.module.js?cf64:10935)
at InstancedBufferGeometry.copy (three.module.js?cf64:40628)
at createObj (Clouds.js?d048:24)
Ответ №1:
InstancedBufferGeometry.copy()
принимает только другой InstancedBufferGeometry
объект в качестве аргумента. Вы пытаетесь передать устаревший Geometry
объект (ТРИ.Геометрия была частью ядра вплоть до r125, а вы используете r124), поэтому при выполнении этого метода он прерывается, когда замечает, что в нем отсутствуют все инстанцирующие свойства.
Смотрите Здесь в документации для использования copy()
метода
Комментарии:
1. Вы можете перейти
BufferGeometry
в.copy()
ofInstancedBufferGeometry
, просто установите.instanceCount = Infinity
для объектаInstancedBufferGeometry
.2. @prisoner849 Это верно для последних версий, но при
r124
создании aBoxGeometry
будет устаревшийGeometry
класс, а не aBufferGeometry
.3. Да, верно. В эти дни
BufferGeometry
был.fromGeometry()
метод. И также былоBoxBufferGeometry
. Если автор хочет использовать инстансинг, он должен работать с атрибутами и всеми другими приятными вещами, которыеBufferGeometry
в любом случае принадлежат.