2017-12-27 9 views
0

약 6 개월 전에 3D 그래픽 엔진을 만들기 시작했습니다. 이미 잘 보입니다. 이미 회전, 변환, 크기 조절, Z 버퍼 (화가의 알고리즘)를 구현했습니다 ... Im은 이제 반사 쉐이더에서 작업합니다. 그를 위해 개인적인 얼굴의 각도를 얻는 방법이 필요합니다. 내 질문은 네 모퉁이의 위치 만 알고 비행기의 각도를 얻는 방법입니다. 여기네 모서리의 위치를 ​​사용하여 3D 평면의 각도를 얻는 방법

내가 지금까지 무엇을 가지고 있습니다 : 공간에 평면의

function faceAngle(verts,faces){ 
    var arr = []; 
    for(var i=0;i<faces.length;i++){ 
    var posA = verts[faces[i][0]];//the four corners 
    var posB = verts[faces[i][1]];// A  B 
    var posC = verts[faces[i][2]];//  ----- 
    var posD = verts[faces[i][3]];//  |  | 
            //  |  | 
    var ar = [];     //  ----- 
    ar.push(/*some Maths*/);//x // D  C 
    ar.push(/*some Maths*/);//y 
    ar.push(/*some Maths*/);//z 
    arr.push(ar); 
    } 
    return arr; 
} 
+0

각도입니다

n = (posB - posA) x (posC - posA) //cross product of two vectors 

주? – MBo

답변

2

방향은 법선 벡터에 의해 정의된다. 이 벡터를 얻으려면 cross product of two edges (비행기에 속함)을 계산하십시오. 따라서 평면에 3 개의 비선형 점만 있으면됩니다. 정규화 (단위) 법선 벡터의 구성 요소면 어떤 사이 ... direction cosines

+0

이 주제를 잘 이해하지 못해 죄송합니다. 하지만 어떻게 정상적인 벡터를 사용하여 비행기의 방향을 계산합니까? 피타고라스 정리를 사용하여면 중심과 법선 벡터 및 3 축 사이의 선의 각도를 계산해야합니까? 왜냐하면 나는 각도를 라디안 단위로 반환하기를 원하기 때문입니다. –

+0

@DylanMissuwe 평면의 방향 *은 법선 벡터입니다. 구형 극각으로 변환하려면 [here] (https://en.wikipedia.org/wiki/Vector_fields_in_cylindrical_and_spherical_coordinates#Vector_fields)를 참조하십시오. – meowgoesthedog

+0

@Dylan Missuwe 그래서 내가 물어 보는 이유는 무엇입니까? 법선 벡터는 방향의 가장 좋은 특성을 나타냅니다. 다른 모든 매개 변수는 보통에서 추론 될 수 있습니다 – MBo

관련 문제