【问题标题】:How to load textures for obj?如何为obj加载纹理?
【发布时间】:2016-07-28 09:10:40
【问题描述】:

我正在尝试加载具有多个 .jpg 作为纹理的 .obj。我的 .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

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

我的框架代码是:

 <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

【问题讨论】:

  • 这很有趣。乍一看,一切看起来都是方形的。您正在运行什么类型的本地服务器?
  • Python 简单的 HTTP 服务器。我想知道这是否与对象大小有关?
  • 您看到的 404 的 URL 是什么?我猜这只是确保 tex_0.jpg 在正确的文件夹中的问题。它应该与 mtl 文件位于同一位置。

标签: aframe webvr


【解决方案1】:

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

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

例如:

g g_0
usemtl material_0
...
g g_1
usemtl material_1

等等

【讨论】:

    猜你喜欢
    • 2021-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-11
    • 2013-08-24
    • 1970-01-01
    • 2013-07-16
    • 2012-12-25
    相关资源
    最近更新 更多