【问题标题】:OBJ + MTL loads but doesn't renderOBJ + MTL 加载但不渲染
【发布时间】:2018-11-25 15:44:17
【问题描述】:

如果我使用以下代码加载从下载的 .obj 和 .mtl https://poly.google.com/view/9NXf-SDxJny 工作正常,我看到我的场景中渲染了星星。

return new Promise((resolve, reject) => 
    {
        let mtlLoader = new THREE.MTLLoader();
        mtlLoader.crossOrigin = true;
        mtlLoader.setPath(ASSETS_PATH);
        mtlLoader.load(filename + '.mtl', (materials) => 
        {           
            materials.preload();
            let objLoader = new THREE.OBJLoader();
                objLoader.setPath(ASSETS_PATH);

                objLoader.setMaterials(materials);
                objLoader.load(filename + '.obj', (obj) => 
                {   
                    this.obj = obj; 
                    resolve(true);
                });
        });
    });

但是当我使用相同的代码从https://poly.google.com/view/4-OZNPuTqFq 加载 obj 和 mtl 时,它不会显示。我没有收到任何错误。如果我删除线 objLoader.setMaterials(materials); 然后我看到蛋糕但没有材料。所以这似乎是一个实质性问题。

我有一个codepen,这里有完整的代码https://codepen.io/steveg3003/pen/6f0d8c4a17ed12bea49b3391a6d80ce3?editors=0010

谢谢

【问题讨论】:

  • THREE.OBJLoader2.setMaterials 是否抛出异常或错误,您可以在浏览器控制台日志中看到?能不能先看看materials数组在传入之前是不是为null?
  • 好的,如果我切换到 OBJLoader2,我可以看到形状,但材质都是灰色的。我收到以下错误> THREE.BufferGeometry.computeBoundingSphere(): Computed radius is NaN。 “位置”属性可能具有 NaN 值。
  • 你能去浏览器并在 BufferGeometry.js 中调用 computeBoundingSphere 的地方设置一个断点(想想 4 个地方)吗?它会生成与您看到的相同的错误文本,我认为在调用 objloader2.load 时会调用它。看看有没有线索。
  • 这有什么更新吗?我在 aframe 上看到了同样的问题,它使用了 three.js
  • @Omid 是的,我不得不手动将 .mtl 文件中的“d”值从 0 更改为 1。它似乎设置了透明度,并且由于某种原因,默认情况下材料设置为完全从 poly.google.com 下载时透明

标签: three.js wavefront


【解决方案1】:

类似的事情也发生在我身上,除了模特全是黑色的。我必须打开 .mtl 文件并将“Kd 0.00 0.00 0.00”更改为“Kd 1.00 1.00 1.00”

【讨论】:

    【解决方案2】:

    所以我的解决方案是手动将材料文件 (.mtl) 中的“d”值从 0.00000 更改为 1.00000

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-24
      • 1970-01-01
      • 2018-05-21
      • 1970-01-01
      • 2013-11-30
      • 2017-07-17
      • 2020-07-05
      • 1970-01-01
      相关资源
      最近更新 更多