
|p| = root(x^2 + y^2 + z)
p' = (x/|p|, y/|p|, z/|p|)
내적(Inner/Dot Product)

s·t = |s| |t| cos(θ) = SxTx + SyTy + SzTz
외적(Outer/Cross Product)




삼각형이 PQR로 정의되었을 때, 오른손으로 명시된 정점 순서대로 감쌌을 때
엄지 손가락의 방향이 벡터의 방향이 됨
PQ벡터인 s, PR벡터인 t 순서로 곱해 s x t
t x s가 되면 벡터 방향이 반대가 됨
정점 나열 순서를 기준으로 PQR이므로
PQ 벡터 다음은 같은 곳에서 출발하는 PR이 되는 것임

Backface = (N·V < 0) = (|N||V|cosθ < 0)
법선벡터의 z값만으로 판단 가능
OpenGL
glEnable(GL_CULL_FACE);glCullFace(GL_FRONT);하나의 면 = 표면 + 이면

표면
반시계방향으로 정의된 면을 표면으로
glFrontFace(GL_CCW)
CCW: Counter Clock Wise
시계방향으로 정의된 면을 표면으로
glFrontFace(GL_CW)

닫혀있지 않은 경우
열려있는 뒷면을 다른 색을 선택하여 그릴 수 있음
glEnable(GL_CULL_FACE); //
// 열려있는 물체에 대해서 Backface Culling을 적용하게 되면
// 뒤에 있는 물체라고 판단 시 그리지 않으므로 오류가 발생할 수 있음
glFrontFace(GL_CW); // 2. 주전자 데이터는 CW로 만들어짐. 표준은 CCW
glCullFace(GL_BACK); // 3. GL_FRONT로 변경
// GL_CCW, GL_FRONT에 대해서도 같은 결과가 나옴
// CCW → BACK(정상), CW → FRONT(정상)
// glPolygonMode(GL_FRONT, GL_FILL); // 4. 모드 설정
// glPolygonMode(GL_BACK, GL_LINE); // 4. 모드 설정
glEnable(GL_DEPTH_TEST);
// 눈에 가장 가까운 부분을 출력해서 그려줌
// 이 기능을 끄게 되면 규칙 없이 그려지는 순서대로 덮어져서 보임

0000: 윈도우 창 영역
바깥 판정에 대해 4비트 아웃코드(Outcode)를 둠
비트의 각 자릿수는 TBLR(Top, Bottom, Left, Right)
테스트 1) E1 = E2 = 0000
테스트 2) E1 & E2 != 0000
테스트 3) E1 != 0000, E2 = 0000 (또는 그 반대)
테스트 4) E1 & E2 = 0000


예) D = E1(0010), E2(1000)




멀리 있는 물체부터 그리며 계속해서 덧그림
깊이 정렬(Depth Sort)이 필요
Zmax를 기준으로 물체를 정렬
정렬 비용이 매우 높음

지-버퍼(z-Buffer) 또는 깊이버퍼(Depth-Buffer)



