【发布时间】: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 下载时透明