谁能帮助我,如何清除与不同几何共享的bufferAttribute的数组(this.array)。 我尝试使用“ onUploadCallback”,但在这种情况下会引发错误。
getBufferAttrib(accessor)
{
let key ='bufferView : ' + accessor.bufferView;
let bufferAttribute = this.BufferAttributeCache.get(key);
if(bufferAttribute === undefined){
let itemSize = WebglConstants.WEBGL_TYPE_SIZES[accessor.type];
let arrayType = WebglConstants.WEBGL_COMPONENT_TYPES[accessor.componentType];
let data = new arrayType(accessor.bufferViewData,accessor.bufferOffset, accessor.count * itemSize );
bufferAttribute = new THREE.BufferAttribute( data, itemSize );
bufferAttribute.name = accessor.name;
bufferAttribute.refCount = 1;
bufferAttribute.onUploadCallback = function() {
this.refCount = this.refCount - 1;
if(this.refCount === 0){
this.array = null;
}
};
this.BufferAttributeCache.add(key, bufferAttribute);
}
else{
bufferAttribute.refCount = bufferAttribute.refCount + 1;
}
答案 0 :(得分:2)
根据提供的信息,尤其是调用堆栈,看来这是在渲染期间发生的。
在WebGLRenderer.render
中,有一个名为projectObject
的内部函数,其中包含以下行(r95):
if ( ! object.frustumCulled || _frustum.intersectsObject( object ) ) {
视锥相交检查尝试与对象的boundingSphere
相交,如果不可用,则会生成所说的boundingSphere
。这一代需要引用顶点缓冲区,在您的情况下,顶点缓冲区不再存在。
为避免此问题,只需在丢弃对象的缓冲区之前计算每个对象的boundingSphere
。当视锥相交发生时,它将找到球体并通过/未通过测试,而不是在尝试创建球体时遇到错误。