2014-04-17 1 views
1

법선이 3j에서 어떻게 계산되는지 이해할 수 없습니다.threejs의 법선에 대한 올바른 값을 얻는 방법?

여기 내 문제 : 나는 얻을, 나는이 비행기의 정상적인 읽을 때 나는 간단한면

var plane = new THREE.PlaneGeometry(10, 100, 10, 10); 
var material = new THREE.MeshBasicMaterial(); 
material.setValues({side: THREE.DoubleSide, color: 0xaabbcc}); 
var mesh = new THREE.Mesh(plane, material); 
mesh.rotateY(Math.PI/2); 
scene.add(mesh); 

을 만들

(0, 0, 1). 그러나 평면이 z 축과 평행하므로 값이 잘못되었습니다.

나는
mesh.geometry.computeFaceNormals(); 
mesh.geometry.computeVertexNormals(); 

을 추가하는 시도하지만, 난 여전히 같은 결과를 얻을.

나는 아무것도 못 찾았나요?

삼각형의 법선에 대한 올바른 값을 얻으려면 어떻게해야합니까?

감사합니다.

+0

회전 후에 형상 법선이 다시 계산되지 않습니까? – CoccotCoder

답변

4

기하 법선은 오브젝트 공간에 있습니다. 그것들을 월드 공간으로 변환하려면 먼저 객체 행렬이 업데이트되었는지 확인하십시오. 이제

var normalMatrix = new THREE.Matrix3().getNormalMatrix(object.matrixWorld); 

변환 : (.이 단계를 건너 뛸 수 있습니다 렌더러는 각 렌더링 루프에서 당신을 위해 이것을 않기 때문에)

object.updateMatrixWorld(); 

그런 다음, 정규 행렬을 계산 그래서 같은 일반적인 세계 공간 :

var newNoraml = normal.clone().applyMatrix3(normalMatrix).normalize(); 

three.js를 r.66

+0

이것은 정확히 내가 찾고 있던 것입니다 !! 너 할 수 있니? 세계 공간에서 지역 공간으로 법선을 다른 방향으로 옮기는 데 도움을 줍니까? (결국 나는 local-world-local2 번역이 필요하다) –

+0

@tomaspolach 도움이 필요하면 질문을 게시하십시오. – WestLangley

+0

"normal.clone(). applyMatrix3"에서 "normal"을 얻으려면 어떻게해야합니까? – arpo

관련 문제