2

JSONLoader で読み込まれた 1 つのメッシュに 2 つのマテリアルを割り当てることはできますか?

ブレンダーで単純なキャラクターを作成し、モーフ ターゲットと UV を含む three.js 形式にエクスポートしました。

無地のマテリアルを体に、画像をキャラクターの頭に割り当てようとしましたが ( 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);
  });

私は何か間違ったことをしていますか?


更新: 問題は私のエクスポートにありました。2 番目のマテリアルは次のようになります。

    {
            "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
}],

テクスチャがなく、2 番目のテクスチャには実際には何もなく、1 番目のテクスチャにはすべての色がグレーの色合いであることがはっきりとわかります。マテリアルが正しくエクスポートされていないようです。3D モデラーの概念と three.js マテリアル パラメータの間に明確なマッピングがない可能性があるため、マテリアルのエクスポートは難しいため、これは大きな驚きではありません。そのファイルにマテリアル パラメータを手動で指定するだけで修正できます。

于 2013-02-18T13:59:59.220 に答える
-1

メッシュごとに 1 つのマテリアルを持つことができます。これが OpenGL の仕組みです。メッシュが 1 つしかありませんか?

于 2013-02-18T09:03:55.473 に答える