2017-03-29 3 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 질감을 가진 모든 재질을 내 맞춤 소재와 다른 질감으로 대체하고 다른 모든 재질을 다른 재질로 대체했습니다. 그것은 완벽하게 작동했고 자외선지도는 여전히있었습니다.

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; 
} 
관련 문제