如何为obj加载纹理?

时间:2016-07-28 09:10:41

标签: aframe webvr

我正在尝试加载一个.obj,它有几个.jpgs作为纹理。我的.obj正在渲染 - 但没有应用这些材料。

.mtl看起来像

newmtl material_0
Ka 0.200000 0.200000 0.200000
Kd 1.000000 1.000000 1.000000
Ks 1.000000 1.000000 1.000000
Tr 1.000000
illum 2
Ns 0.000000
map_Kd tex_0.jpg

我假设.jpgs的路径是正确的 - 如果我更改它,我会在控制台中看到404错误。

我的aframe代码是:

 <a-scene>
    <a-assets>
           <a-asset-item id="moore-obj" src="obj/moore.obj"></a-asset-item>
           <a-asset-item id="moore-mtl" src="obj/moore.obj.mtl"></a-asset-item>
     </a-assets>
     <a-entity
          obj-model="obj: #moore-obj; mtl: #moore-mtl"
          scale="1 1 1"
          rotation="0 0 0"
          position="1 1 1"></a-entity>
 </a-scene>

3D模型出现在场景中 - 但没有覆盖纹理。我在localhost上运行它,我没有看到任何CORS警告。

对象是http://www.thingiverse.com/thing:36415

1 个答案:

答案 0 :(得分:2)

原来是该特定OBJ文件的问题。它使用三种材质,但没有为使用每种材质的子对象定义对象组,因此Three.js的OBJLoader不能正确关联材质。

您可以通过在obj文件中的每个usemtl行之前添加分组行来解决此问题。

例如:

g g_0
usemtl material_0
...
g g_1
usemtl material_1