我正在使用相同的几何图形将几个模型加载到场景中(伪代码):
var geoCache = [];
function parseJSONGeometry(json_geo){
// this code is the three.js model parser from the jsonloader
return geometry;
}
function loadCachedGeo(data){
if( !geoCache[data.id] ){
geoCache[json.id] = parseJSONGeometry(data);
}
return geoCache[json.id];
}
function loadObjects(json){
var mats = [];
combined = new THREE.Geometry();
for(i=0<i<json.geometries.length;i++){
data = json.geometries[i];
geo = loadCachedGeo(data.id);
mats.push(new THREE.MeshBasicMaterial(map:THREE.imageUtils.loadTexture(data.src)));
mesh = new THREE.Mesh(geo);
mesh.position.set(data.x,data.y,data.z);
combined = THREE.GeometryUtils.mergeGeometry(combined,mesh);
}
mesh = new THREE.Mesh(combined,new THREE.MeshFaceMaterial(mats));
scene.add(mesh);
}
我还缓存了纹理,但为了简单起见,我省略了它。
当我打电话时:
renderer.info.render.faces
renderer.info.memory.textures
renderer.info.memory.programs
renderer.info.memory.geometries;
renderer.info.render.calls
我注意到当一个对象在屏幕上时,多边形数为 1000,纹理:1,调用:1,着色器:1 和几何:1。当屏幕上有两个对象时,报告 2000 个面,1 个纹理,1 个着色器, 2 个调用和 2 个几何形状。
我认为以这种方式重用几何图形只会将几何图形加载到 GPU 中一次。我错过了什么,有人可以解释这种行为吗?
三.js r59