是否可以将两种材质分配给一个已加载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
}
它非常好用。谢谢你们。
答案 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的工作方式。你确定你只有一个网格吗?