2014-10-15 1 views
0

오브젝트 파일 Wavefront obj file을로드 할 때 법선이 올바르게 계산되지 않아 모델의 음영이 잘못되었습니다. * .obj 모델을로드하는 코드는 loader/obj 예제의 원래 프로젝트에서 수정되었습니다. 아래에서 볼 수 있듯이 모델을 장면에 추가하기 전에 크기를 조정합니다. 일반적으로 이러한 변형 유형을 호출 한 후에 dirtyDisplayList을 호출해야합니다. , UpdateModel 또는 RecalculateNormals과 같은 기능을 사용하여 모델에 적용된 현재 변경 사항을 반영하도록합니다. 내가 geometry.computeFaceNormals();geometry.computeVertexNormals(true); 다음 모델을 호출하는 경우 threejs에서 가장 가능한 기능은 geometry.computeFaceNormals();ThreeJS에서 * .obj 파일로로드 된 모델의 음영이 잘못됨

geometry.computeVertexNormals(true);하지만 내 경우입니다 완전히 사라지고 콘솔은보고 : 형식 오류 : 102

: geometry.computeFaceNormals이 함수 OBJ_Loader.html 아니다

여기서 내가 뭘 잘못하고 있니?

var I_prof = new THREE.OBJLoader(); 
I_prof.load('obj/male02/new_I_Profile.obj', function(geometry){ 

    geometry.scale.set(10, 10, 10); 
    geometry.rotation.x = 3.1415/2; 
    geometry.position.z = -0; 
    geometry.position.x = 0; 
    geometry.position.y =0; 
    //geometry.computeFaceNormals(); 
    //geometry.computeVertexNormals(true); 
    scene.add(geometry); 
}); 

답변

0

이전에 질문을 받았지만 지금 답변 해 드리겠습니다.

콜백 함수는 속성 geometry가있는 매개 변수 Object3D를 사용합니다. 그 외에 객체는 둘 이상의 자식을 동반 할 수 있습니다. 트래버스 기능을 사용하여 각 하위 항목을 가져 와서 여기에서 형상을 수정할 수 있습니다. 함수 함수 (형상) {...}은 다음과 같이 보일 수 있습니다.

function(object){ 
    object.traverse(function (child) { 
     if (child instanceof THREE.Mesh) { 
      child.geometry.scale.set(10, 10, 10); 
      child.geometry.rotation.x = 3.1415/2; 
      child.geometry.position.z =-0; 
      child.geometry.position.x =0; 
      child.geometry.position.y =0; 
      child.geometry.computeFaceNormals(); 
      child.geometry.computeVertexNormals(true); 
      scene.add(child); 
     } 
    } 
} 
관련 문제