次のように同じジオメトリを使用して、いくつかのモデルをシーンにロードしています (疑似コード):
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