关于三.js:用JSONLoader多材质?

Multiple materials with JSONLoader?

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

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

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

这里是我的项目的生产版本(使用 wasd 移动,当你看到你要控制的灰色播放器网格时,这正是我所说的):http: //touhou.ru/dev/webgl-test-stackoverflow/

这是我使用 JSONLoader 加载网格和材质的方式:

1
2
3
4
5
6
7
8
9
  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);
  });

我是不是做错了什么?

更新:问题出在我的导出中。现在第二种材料看起来是这样的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    {
           "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
    }

而且效果很好。谢谢各位。


如果我正确地查看了您的代码,running_babe.js 就是您所说的网格。看其出处,资料如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
"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 建模器概念和 three.js 材料参数之间可能没有明确的映射。我只是通过手动将材料参数指定到该文件中来修复它。


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