2013-02-18 45 views
2

是否可以將兩種材質分配到一個已使用JSONLoader加載的網格?帶JSONLoader的多種材質?

我在攪拌機中製作了一個簡單的字符並將其導出爲three.js格式,其中包含變形目標和UV。

我試圖給人體分配純色材料,並將圖片分配給我角色的頭部(http://touhou.ru/dev/webgl-test-stackoverflow/kourindouhime.jpg),但在加載網格和材質後,我得到一個灰色網格。

這裏的量產版我的項目(使用WASD移動,當你看到一個灰色的玩家網你會被控制,這正是我在談論的東西):http://touhou.ru/dev/webgl-test-stackoverflow/

而這裏的路我正在使用JSONLoader加載網格和材質:

var player_loader = new THREE.JSONLoader(); 

    player_loader.load("running_babe.js", function(geo, material) { 
    material[0].morphTargets = true; 
    material[1].morphTargets = true; 
    var materials = new THREE.MeshFaceMaterial(material); 
    player = new THREE.Mesh(geo, materials); 
    scene.add(player); 
    }); 

我做錯了什麼?


更新:問題出在我的出口。現在第二種材料看起來如此:

{ 
      "DbgColor" : 15597568, 
      "DbgIndex" : 1, 
      "DbgName" : "Material.001", 
      "blending" : "NormalBlending", 
      "colorAmbient" : [0.6400000190734865, 0.6400000190734865, 0.6400000190734865], 
      "colorDiffuse" : [0.6400000190734865, 0.6400000190734865, 0.6400000190734865], 
      "colorSpecular" : [0.5, 0.5, 0.5], 
      "depthTest" : true, 
      "depthWrite" : true, 
      "mapDiffuse" : "kourindouhime.jpg", 
      "mapDiffuseWrap" : ["repeat", "repeat"], 
      "shading" : "Lambert", 
      "specularCoef" : 50, 
      "transparency" : 1.0, 
      "transparent" : false, 
      "vertexColors" : false 
    } 

它的工作原理非常好。感謝你們。

回答

1

如果我正確查看了您的代碼,running_babe.js是您正在討論的網格。看着它的來源,該材料如下:

"materials" : [ { 
    "DbgColor" : 15658734, 
    "DbgIndex" : 0, 
    "DbgName" : "Material", 
    "blending" : "NormalBlending", 
    "colorAmbient" : [0.6400000190734865, 0.6400000190734865, 0.6400000190734865], 
    "colorDiffuse" : [0.6400000190734865, 0.6400000190734865, 0.6400000190734865], 
    "colorSpecular" : [0.5, 0.5, 0.5], 
    "depthTest" : true, 
    "depthWrite" : true, 
    "shading" : "Lambert", 
    "specularCoef" : 50, 
    "transparency" : 1.0, 
    "transparent" : false, 
    "vertexColors" : false 
}, 

{ 
    "DbgColor" : 15658734, 
    "DbgIndex" : 0, 
    "DbgName" : "default", 
    "vertexColors" : false 
}], 

可以清楚地看到,沒有紋理,第二個沒有真的什麼,第一個具有所有顏色爲灰色陰影。似乎材料未正確導出。這不是一個大的驚喜,因爲出口材料很難,因爲可能沒有3D建模者概念和三維材料參數之間的明確映射。我只是通過在該文件中手動指定材料參數來修復它。

+0

非常感謝您指出這一點! – 2013-02-18 14:50:47

-1

每個網格物體都可以有一種材質,這就是OpenGL的工作原理。你確定你只有一個網格?

+0

好吧,它加載爲一個單一的THREE.Mesh對象,但如果我選中「player.geometry.geometryGroupsList」,我會得到兩個網格 - 一個用於頭框,另一個用於body。 – 2013-02-18 12:20:52

+1

@bjorke - Three.js支持每個網格多種材質。它在內部將面分成組,以便最終它將爲每種材質渲染一個幾何,但從API的角度來看,支持多種材質。 – Tapio 2013-02-18 14:02:38

+0

Thx是爲threee.js提供的單挑,@Tapio! – bjorke 2013-02-26 00:35:38