2017-03-29 14 views
0

私は、ブレンダーで作成されたUVマッピングを備えた3Dモデルを持っています。私はテクスチャがモデルの片側にのみ適用されるようにUVマッピングを適用しました。モデルをobjmtlにエクスポートしました。このモデルをthree.jsにインポートすると、意図したとおりに動作し、ローダーはmtlファイルで定義されたイメージをテクスチャとして自動的に適用します。three.jsでobjモデルの素材を変更

今度は、このテクスチャをプログラマチックにthree.jsに変更したいと思います。モデルには複数の素材があります(私はそれが複数の顔のためだと思います)。 UVマッピングを維持し、適用されるテクスチャを変更するだけで材料を再適用するにはどうすればよいですか? mapenvMapをモデルに適用したいと思います。いくつかの試行錯誤の後に適用さmm2位置と

     var m = new THREE.MeshPhongMaterial({ 
          envMap: cubemap, 
          reflectivity: 0.9 
         }); 
         var m2 = new THREE.MeshPhongMaterial({ 
          envMap: cubemap, 
          color: parseInt(material.color, 16), 
          reflectivity: 0.9, 
          map: THREE.ImageUtils.loadTexture('/textures/uv_checker large.png') 
         }); 

         loadedMesh.material = [m,m,m,m,m,m2,m2,m2,m]; 

。テクスチャが適用されますが、元のテクスチャと同じように見えることはありません。私はいくつかの小さな空のスペースがあり、私のUVマッピングのためにテクスチャを持たないはずの場所にもテクスチャがあります。

これにはどのようにアプローチできますか?

+0

過去に私が問題を抱えていたので、OBJMTLLoaderを使用することはありません。OBJLoaderでモデルをロードし、別に材料を作成します。 – 2pha

答えて

0

私は方法を見つけました。私はこれがすべてのモデルで機能するかどうかはわかりませんが、mapのテクスチャを持つ材料すべてを別のテクスチャと置き換え、他のすべての材料を別の材料と置き換えました。それは完全に働いて、UVマップはまだそこにありました。

var m1 = new THREE.MeshPhongMaterial({map: texture, ...}); 
var m2 = new THREE.MeshPhongMaterial({...}); 
for(var n = 0; n < model.material.length; ++n) { 
    if(model.material[n].map) model.material[n] = m1; 
    else model.material[n] = m2; 
} 
関連する問題