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

1 つのオブジェクトが画面上にある場合、ポリゴン カウントは 1000、テクスチャ: 1、呼び出し: 1、シェーダー: 1、ジオメトリ: 1 であることに気付きました。 2 つの呼び出しと 2 つのジオメトリ。

この方法でジオメトリを再利用すると、ジオメトリが一度 GPU にロードされるだけだと思いました。誰かがこの動作を説明してもらえますか?

Three.js r59

4

1 に答える 1