2

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

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

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

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

这是我使用 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
    }

它工作得很好。谢谢你们。

4

2 回答 2

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 建模器概念和 three.js 材料参数之间可能没有清晰的映射。我只是通过手动将材料参数指定到该文件中来修复它。

于 2013-02-18T13:59:59.220 回答
-1

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

于 2013-02-18T09:03:55.473 回答