使用JSONLoader的多种材质?

时间:2013-02-18 08:42:41

标签: three.js

是否可以将两种材质分配给一个已加载JSONLoader的网格?

我在blender中制作了一个简单的角色并将其导出为three.js格式,其中包含变形目标和UV。

我试图将纯色材质分配给身体,并将图片分配给我角色的头部(http://touhou.ru/dev/webgl-test-stackoverflow/kourindouhime.jpg),但在加载网格和材质后,我得到一个灰色网格。

这是我的项目的生产版本(使用isd移动,当你看到一个你正在控制的灰色玩家网格时,这正是我所说的):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
    }

它非常好用。谢谢你们。

2 个答案:

答案 0 :(得分: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建模师概念和三个物质参数之间可能没有明确的映射。我只需通过手动将材料参数指定到该文件中来修复它。

答案 1 :(得分:-1)

每个网格可以有一种材质,这就是OpenGL的工作方式。你确定你只有一个网格吗?