为何已加载的.obj模型无法显示?排查缩放与位置仍无效
我之前也碰到过好几次这种「控制台显示加载完成,但模型就是看不见」的情况,你已经检查了缩放和位置,那可以试试下面这些排查方向:
检查相机的视锥体设置
有时候相机的near参数设得太高,或者far设得太低,导致模型刚好在相机的可视范围之外。比如把PerspectiveCamera的near改成0.1,far改成1000,再试试拉远相机位置,看看模型会不会出现。另外也确认下相机是不是不小心放到了模型内部,导致看不到整个模型。给模型添加可见的材质
OBJLoader加载的模型可能没有附带材质,或者材质颜色和背景完全一致,导致肉眼看不到。你可以手动给模型加一个高对比度的材质,甚至用线框模式来确认模型是否存在:// 给模型添加红色线框材质 const testMaterial = new THREE.MeshBasicMaterial({ color: 0xff0000, wireframe: true, side: THREE.DoubleSide }); // 遍历模型所有子网格,替换材质 model.traverse(child => { if (child.isMesh) child.material = testMaterial; });检查模型的朝向与坐标系
有些建模软件导出的OBJ模型,坐标系和Three.js的(Y轴向上)不一致,可能导致模型被旋转到了相机看不到的角度。你可以尝试调整模型的旋转:model.rotation.x = Math.PI / 2; // 把模型绕X轴旋转90度,适配Y轴向上的坐标系同时确保模型的position是在场景中心(比如
model.position.set(0,0,0)),方便相机捕捉。确认渲染循环正常运行
如果你的代码只在初始化时调用了一次renderer.render(scene, camera),那模型加载完成后不会自动重新渲染。一定要把渲染逻辑放到requestAnimationFrame的循环里:function animate() { requestAnimationFrame(animate); renderer.render(scene, camera); } animate();修复面法线问题
部分模型的面法线方向是反的,而Three.js默认只渲染正面(FrontSide),导致模型看起来像是“透明”的。把材质的side属性改成DoubleSide,就能同时渲染正反两面:material.side = THREE.DoubleSide;
内容的提问来源于stack exchange,提问作者Sabbir33

