2016-08-26 5 views
0

저는 미니 크래프트 모델 편집 애플리케이션을 개발 중입니다. 3JS를 사용하여 3D 플레이어 모델에 매핑 된 그려진 텍스처를 표시하지만 텍스처 크기 변경과 관련된 문제가 있습니다.텍스처 크기가 변경 될 때 UV 매핑 문제가 발생했습니다.

처음에는 this과 같은 모델에 매핑 된 텍스처가 있고 텍스처 높이를 64로 변경하면 this이됩니다.

나는 다음과 같은 질감을 만듭니다

this.skin.render(canvas.getContext("2d"), this.skin.w, this.skin.h); 

this.limbs.forEach(function (limb) { 
    limb.mapUV(self.skin.w, self.skin.h); 
}); 

this.material.map.needsUpdate = true; 
this.material.needsUpdate = true; 

this.material은 양면입니다 : 캔버스 '내용이 변경 될 때 canvas이 HTMLCanvasElement이며,

/* Texture */ 
var texture = new THREE.Texture(canvas); 

texture.minFilter = texture.magFilter = THREE.NearestFilter; 

, 나는 그런 질감을 새로 고침 위에 텍스처가 붙어있는 투명 소재. 자외선은 정확한 것처럼 보입니다.

전 메쉬를 재현하여 이전 응용 프로그램에서 비슷한 문제가 해결되었지만이 경우 비용이 많이 드는 것처럼 보입니다.

어떻게 해결할 수 있습니까? 텍스처가 캐싱 된 것처럼 보이거나, 맞으면 어떻게 캐싱 할 수 있습니까?

관심을 가져 주셔서 감사합니다.

피. 죄송합니다. 내 평판으로 인해 아직 이미지를 게시 할 수 없습니다.

답변

0

원하는 결과를 얻기 위해 수 시간을 보냈고, 마침내 문제를 해결할 수있었습니다. 문제는 geometry.faceVertexUvs의 UV 배열 요소가 ThreeJS의 핵심 어딘가에 캐시되었다는 것입니다.

UV 매핑의 내 앞의 코드는 geometry.faceVertexUvs에 직접 Vector2의 배열을 할당했다 : 작동

geo.faceVertexUvs[0][side] = [faces[1], faces[2], faces[0]]; 

처음,하지만 다음에 시간이 캐시됩니다 내가 UV를 더러운 (geo.uvsNeedUpdate = true)를 표시하고있어 비록 그래서 대신 배열을 할당, 나는 geo.faceVertexUvs[0][side] 각 삼각형의 정점에 faces 배열에서 복사 Vector2로 끝날 :

geo.faceVertexUvs[0][side][0].copy(faces[1]); 
geo.faceVertexUvs[0][side][1].copy(faces[2]); 
geo.faceVertexUvs[0][side][2].copy(faces[0]); 

나는이 소원 (의 UV의 prope을지도하는 방법 rly)는 ThreeJS의 문서에서 설명되었습니다.

관련 문제