我正在导入一个在我的程序中多次使用的对象。由于我不想在内存中有不必要的几何形状,我想重新使用几何。我试图像这样编写一个加载器:
var tmpGeo = geometries[ID];
if (!tmpGeo) {
tmpGeo = new THREE.BufferGeometry();
geometries[ID] = tmpGeo;
objLoader.load("/models/" + ID + ".obj", function (mesh) {
tmpGeo = mesh.children[0].geometry;
});
}
obj.add(new THREE.Mesh(tmpGeo, tmpMat));
这样它应该为多个三个JS对象重用导入对象的几何。但是,一旦加载,这似乎无法工作或更新几何体。
基本上我想知道是否可以只导入一次对象并重新使用它而不在每次都在内存中存储新的geomtry?
答案 0 :(得分:1)
请记住,模型是异步加载的,您无需等待模型加载即可创建网格。覆盖tmpGeo
变量不会更新网格,网格仍然指向空的BufferGeometry。你需要做这样的事情,而不是:
var tmpGeo = geometries[ID];
if (!tmpGeo) {
tmpGeo = new THREE.BufferGeometry();
geometries[ID] = tmpGeo;
objLoader.load("/models/" + ID + ".obj", function (mesh) {
// Update the existing BufferGeometry with loaded data.
tmpGeo.copy( mesh.children[0].geometry );
});
}
obj.add(new THREE.Mesh(tmpGeo, tmpMat));
或者,您可以等到创建网格,直到几何体已加载。