我有一个工作的three.js应用程序适用于对象模型。我的模型非常大,需要一些时间来加载,所以我决定尝试draco来压缩它们。
我注意到draco终端工具工作正常。当我在终端中“手动”编码/解码obj模型然后在旧的项目中使用它时,它按预期工作。由于德拉科引入了一些缺点,模型尺寸比以前略小一点,但它仍然看起来很好。 然而,当我尝试压缩模型并在我的three.js应用程序中使用它时,我得到高水平的压缩但我失去了我的紫外坐标。我不确定uv松动是否是由javascript draco_decoder中的一些错误引起的,或者我在从缓冲区几何体创建网格时错过了一些步骤。
我知道压缩和解压缩模型工作正常,因为我可以在浏览器纹理中看到它并且aoMap完美地工作。当我尝试直接使用drc模型时,我也很确定uv和uv1已经消失了因为我看不到我网格的geometry.buffer_geometry.attributes中的坐标。
为了清楚起见,我将用于创建网格的函数合并到
下面//这个为draco文件准备http请求并将其传递给解码函数
function loadCompressedModel( model , onEnd, onLoading ){
draco_file = new XMLHttpRequest();
draco_file.open("GET", model , true);
draco_file.responseType = "arraybuffer";
draco_file.send();
interval = window.setInterval(
onLoading,
500
);
draco_file.onload = function(e) {
window.clearInterval( interval );
decompresDracoModel(
draco_file.response,
onEnd
);
console.log("download is complite");
};
return draco_file;
}
//这是从bufferGeometry创建网格,onEnd不要只触摸几何体的网格物体
function decompresDracoModel( raw_data , onEnd ){
//DracoModuel and display area are declared globaly
var bufferGeometry = dracoLoader.decodeDracoFile( raw_data );
var mesh;
var group = new THREE.Group();
bufferGeometry.computeVertexNormals();
mesh = new THREE.Mesh( bufferGeometry, material );
bufferGeometry.computeBoundingBox();
group.add( mesh );
onEnd( group );
}