※ 지엘은 3차원 그래픽 처리를 위주, 고정된 하드웨어 파이프라인 구조를 가진 지엘에서는 2차원, 3차원을 구분하여 처리하는 것 자체가 부담이기 때문에, 2차원은 3차원으로 바꾸어 계산
※ 2차원 버전의 gluOrtho2D(0,200,0,200)함수는 gluOrtho(0,200,0,200,-1,1)로 바뀌어 투상 행렬을 생성
※ 가시부피 밖의 물체를 절단 할 때 절단의 기준이 되는 다각형을 절단 다각형, 일반적으로 2차원에서 절단 다각형은 윈도우, 뷰포트, 시저박스 등
※ 절단 알고리즘
1. 코헨 - 서더랜드 알고리즘
2. 리앙 - 바스키 알고리즘
3. 서더랜드 - 핫지먼 알고리즘
4. 웨일러 - 에서톤 알고리즘
5. 내외부 판정 및 교차점
1.코헨 - 서더랜드 알고리즘
※ 4비트 아웃코드(Outcode)
※ 테스트1) E1 = E2 =0000
완전히 사각형 내부 선분이므로 보이는 선분으로 판정한다. 선분(A)
※ 테스트2) E1 & E2 !=0000
선분은 온전히 절단 사각형 밖에 있으므로 제거한다. 선분(B)
※ 테스트3) E1 != 0000, E2 = 0000 (또는 그 반대)
교참점 계산에 의해 절단한다. (선분 C)
※ 테스트4) E1 & E2 = 0000
양끝점이 모두 절단 사각형 밖에 있지만 서로 다른 선분이다.
교참점 계산에 의해 절단한다. (선분 D, D')
※ 선분분할
분할된 선분을 대상으로 다시 테스트
선분 D : E3 & E2 ! = 0000 이므로 온전히 외부 선분으로 무시
2. 리앙 - 바스키 알고리즘
※ 교차점에서의 파라미터 값의 순서를 기준으로 여러 가지 경우를 판단
(a)
0 < t1 < t2 < t3 < t4
(b)
0 < t1 < t3 < t2 < t4
3. 서더런드 핫지먼 알고리즘
※ 선분을 연장한 직선을 기준으로 절단
Ex. 좌변기준의 절단
※ 3차원 절단
상, 하, 좌, 우, 전, 후의 6개의 면을 기준으로 절단
면을 기준으로 내외부 판정
※ Silicon Graphics의 Geometry Engine에 사용
※ 서더런드 - 핫지먼
볼록 다각형에만 적용
하나의 다각형으로 취급
오목 다각형 처리결과: 오류
※ 해법 1: 다각형 분할
오목 -> 볼록
※ 해법 2: 웨일러 - 애서톤 알고리즘
4. 웨일러 - 애서톤 알고리즘
※ 내부에서 외부로 가는 교차점이 추가되면 즉시 그 교차점으로부터 절단 사각형을 따라서 반 시계 방향으로 간다. 즉, 가장 최근에 외부에서 내부로 들어온 교차점을 만날 때까지 간다.
※ 1-C-D-2로 구성되는 하나의 다각형이 완성
※ 분리된 여러 개의 다각형을 생성함
5. 정점의 내외부 판정
(P-Q) * N > 0iff Pis Outside the Clip Plane
(P-Q) * N = 0iff Pis on the Clip Plane
(P-Q) * N < 0iff Pis Inside the Clip Plane
점과 평면선의 거리
법선벡터 방향이 면의 외부로 정의됨
d = H * P = (A,B,C,D)*(x,y,z,1) = Ax + By + Cz + D
Ax+By+Cz+D > 0iff Pis Outside the Clip Plane
Ax+By+Cz+D = 0iff Pis on the Clip Plane
Ax+By+Cz+D < 0iff Pis Inside the Clip Plane
p(t) = R+t(S-R) = (1-t)R+tS
x(t) = (1-t)Rx+tSx
y(t) = (1-t)Ry+tSy
z(t) = (1-t)Rz+tSz
(p(t)-Q)*N > 0iff Pis Outside the Clip Plane
(p(t)-Q)*N = 0iff Pis on the Clip Plane
(p(t)-Q)*N < 0iff Pis Inside the Clip Plane
p(t)*N = Q*N
(R+t(S-R))*N = Q*N
t = (Q-R)*N/(S-R)*N
'공부 > 컴퓨터 그래픽스' 카테고리의 다른 글
OpenGL glut 모델 (0) | 2020.04.11 |
---|
댓글