我一直在练习在 Three.js 存储库中克隆 example 代码。
在这个例子中,我有一些不明白的地方。
为什么 THREE.InstancedBufferGeometry 应该被 THREE.BufferGeomtry.prototype 复制?
loader.load( './models/gltf/Flower/Flower.glb', function ( gltf ) {
const _stemMesh = gltf.scene.getObjectByName( 'Stem' );
const _blossomMesh = gltf.scene.getObjectByName( 'Blossom' );
stemGeometry = new THREE.InstancedBufferGeometry();
blossomGeometry = new THREE.InstancedBufferGeometry();
THREE.BufferGeometry.prototype.copy.call( stemGeometry, _stemMesh.geometry );
THREE.BufferGeometry.prototype.copy.call( blossomGeometry, _blossomMesh.geometry );
也许是关于 javascript,但我还是不明白。
为什么我不能直接使用 InstancedBufferGeometry.copy()?
谢谢,
答案 0 :(得分:2)
为什么 THREE.InstancedBufferGeometry 应该被 THREE.BufferGeomtry.prototype 复制?
InstancedBufferGeometry
是 BufferGeometry
的子类,带有覆盖的 copy()
方法。如果您直接使用 InstancedBufferGeometry.copy()
,该方法将尝试从 InstancedBufferGeometry
复制名为 instanceCount
的 BufferGeometry
特定属性。所以派生类的属性会变成undefined
。