1

我正在使用相同的几何图形将几个模型加载到场景中(伪代码):

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

4

1 回答 1

0

你需要检查

renderer.info.memory.geometries

还有

renderer.info.memory.textures
renderer.info.memory.programs

三.js r.59

于 2013-08-02T03:33:53.487 回答