2016-07-28 120 views
2

我試圖加載一個.obj,它有幾個.jpgs作爲紋理。我的.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 

我假設路徑.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

+0

這很有趣。乍一看,一切看起來都很平坦。你在運行什麼類型的本地服務器? – ngokevin

+0

Python簡單的HTTP服務器。我想知道這是否與對象大小有關? –

+0

什麼是你看到的404的URL?我猜測這只是確保tex_0.jpg位於正確的文件夾中的問題。它應該與mtl文件位於同一位置。 – brianpeiris

回答

2

可謂是與特定OBJ文件的問題。它使用三種材質,但沒有爲使用每種材質的子對象定義對象組,因此Three.js的OBJLoader不會正確地關聯材質。

您可以通過在obj文件中的每個usemtl行之前添加組行來解決該問題。

例如:

g g_0 
usemtl material_0 
... 
g g_1 
usemtl material_1