我一直在尝试在我的THREE.scene中加载从网上找到的一些3D模型。我遵循了基本的教程,处理好了我的灯光和相机,对于一些物体它运行得很完美:
function loadObject(path, modelName)
{
var mtlLoader2 = new THREE.MTLLoader();
mtlLoader2.setPath( path );
mtlLoader2.load(modelName+'.mtl', function( material )
{
material.preload();
var objLoader2 = new THREE.OBJLoader();
objLoader2.setPath( path );
objLoader2.setMaterials( material );
material.side = THREE.BackSide;
objLoader2.load( modelName+'.obj', function ( mesh )
{
mesh.name=modelName;
var axisHelper = new THREE.AxisHelper(1);
axisHelper.visible=true;
mesh.add(axisHelper);
scene.add( mesh );
console.log('Loaded '+modelName);
});
});
}
我还会定期调用一个动画函数来渲染:
function animate()
{
requestAnimationFrame( animate );
renderer.render( scene, camera );
}
不幸的是,当我应用材质时,一些其他对象会消失(没有任何错误):
objLoader2.setMaterials( material );
我所指的无形是指它不可见但确实存在,axisHelper被显示出来。由于其他在线查看器似乎可以完美地显示相同的对象,我得出结论:一些在网上找到的.mtl文件与three.js不兼容。还是我的使用方式有问题?
这里有一个功能正常的文件示例: https://www.models-resource.com/mobile/shaunthesheeppuzzleputt/model/19915/ 还有一个不起作用的文件: https://www.models-resource.com/ds_dsi/shaunthesheep/model/12472/ 现在我试图找出原因并看是否能修复它。 请分享您的想法和(希望是)解决方案 :)