Graphics Output?: 렌더링 파이프라인의 마지막 단계에서 화면 상의 픽셀 단위로 실제 도형을 그리는 과정
- 렌더링 결과물
→ GPU 파이프라인의 끝에서 화면에 실제로 표시되는 픽셀 이미지
→ 즉, 출력된 2D 이미지(프레임 버퍼) - 출력을 위한 마지막 처리 과정
→ 픽셀 단위 처리, 정수 좌표로 스캔 변환, 버퍼에 기록, 디스플레이 출력
→ 여기서 픽셀 위치 계산, 색상 혼합, Z-buffer 처리 등 포함됨

차원, 데이터 타입, 벡터로 구성 / glBegin과 end로 구성
라인 드로우 알고리즘
- 기본 요소가 정수화 화면으로 이동될 때 발생하는 문제, 파이프라인 마지막 부분 픽셀을 어떻게 그려야 할까?

DDA ( 디지털 디프렌쳐 알고리즘 )

1. x 또는 y 좌표를 하나씩 움직여준다
2. 그때 다른 좌표( 1에서 x면 y, 1에서 y면 x )를 직선의 기울기 만큼 변화시켜 다음 점을 계산
3. 다음 점을 찍어줌
1. x 또는 y 좌표를 하나씩 움직여준다
- 기울기의 절대값을 기준으로 x또는 y를 선택한다. [ 기울기가 1보다 작으면 x를 아니면 y를 ]
|m| = |(By – Ay) / (Bx – Ax)| = |3/6| 은 기울기가 1보다 작으니 x를 선택해 하나씩 움직임
2. 다음 점을 계산
- x축을 선택 하였다면 x는 + 1 y는 y+m / y축을 선택하였다면 x는 x+1/m y는 y+1
그 이유는 y= (1/2)*x + 2에서 x가 1증가 한다면 mx + m +b = 두 번째 y 라고 했을 때 첫 번째 y가 mx + b를 적용해서 식에 대입하면 첫 번째 y + m = 두 번째 y가 된다. 그렇다면 y축을 선택한다면? 거꾸로 될 것이다.
(2, 3) -> (3, 3.5) -> (4, 4) -> (5, 4.5) -> (6, 5) -> (7, 5.5)
3. 다음 점을 찍어줌
- 반올림을 할 것인가 반 내림을 할 것 인가, 중간값을 올리냐 내리냐
올리면
(2, 3) -> (3, 4) -> (4, 4) -> (5, 5) -> (6, 5) -> (7, 6) 으로 나오는 모습
미드포인트(브래저넌) 알고리즘
- DDA의 문제
1. Y값을 구할 때 반올림을 매번 해주어야 한다는 것
2. 실수를 정수로 변환해주는 과정에서 시간이 걸린다는 것

1) 중간점이 실제 선 위에 있다면 중간점 아래에 있는 픽셀 선택
2) 중간점이 실제 선 아래에 있다면 중간점 위에 있는 픽셀 선택
- 눈으로 보면 중간점이 선 위에 있는지 아래에 있는지 딱 보이고 간단하다.
위에 있는지 아래에 있는지 판단하기 위하여 음함수로 표현
y = ax + b -> 0 = ax – y + b
- f() 가 0보다 작으면 중간점이 아래에 있다 ( 위를 선택 )
- f() 가 0보다 크면 중간점이 위에 있다 ( 아래를 선택 )
- f() 가 0이다 중간점이 선에 있다 ( 둘중에 하나 골라 )
이를 판별하는 정수형 판별식을 구한다. 판별식 d0 / 기울기가 0과 1사이알 때를 예시로 들었다
f(x+1, y+1/2) = ax + a – y – 1/2 + b ( 정수가 아닐 수 있는 수 = a, 정수가 아닌 수 = 1/2 )
a는 y증가량 / x증가량이며 (By – Ay) / (Bx – Ax) 이다.
2* x 증가량 * f(x+1, y+1/2) = 2(y 증가량)x + 2(y 증가량) - 2(x 증가량)*y - 2(x 증가량)*(1/2) + 2b(x 증가량)
- d 가 0보다 작으면 중간점이 아래에 있다 ( 위를 선택 ) => 다음 좌표는 (x+1, y+1)
- d 가 0보다 크면 중간점이 위에 있다 ( 아래를 선택 ) => 다음 좌표는 (x+1, y)
- d 가 0이다 중간점이 선에 있다 ( 둘중에 하나 골라 )
[주의] x의 증가량이 음수라면 음수를 곱하는 거기 때문에 거꾸로 해야함

d0 = 2* x 증가량 * f(x0+1, y0+1/2) = 2(y 증가량)x0 + 2(y 증가량) - 2(x 증가량)*y0 - 2(x 증가량)*(1/2) + 2b(x 증가량)

도형을 그리는 알고리즘

음함수 식으로 전계

대칭성을 이용하여 한 부분만 구하고 대칭 이동하여 전부 구함 + 미드포인트 알고리즘을 이용


도형이 Convex한지 Concave한지 판단하는 방법

v1 ~ v6를 지나 다시 돌아오는 백터에서 각 E의 외적이 음수인지 양수인지 음수가 나오는 친구가 하나라도 있으면 콘케이브한 도형

도형의 앞 뒤 구분하기
odd-even
- 도형 내부 점에서 밖으로 가는 선을 그었을 때 지나는 면의 수가 홀수면 앞면, 짝수면 뒷면

winding-num 룰
- 백터를 만들고 왼쪽에서 오른쪽으로 가는 선을 지나면 –1 오른쪽에서 왼쪽으로 가는 선을 지나면 +1 / 0이 아니면 내부, 0이면 외부

Graphics Attributes
- 도형이나 픽셀에 시각적인 효과를 부여하는 속성값 즉, "어떻게 그릴 것인가?"에 대한 시각적 특성 정보
- General Scan-Line Polygon-Fill Algorithm

- 도형을 체우는 과정
도형의 선을 만나면 1 꼭짓점은 2로 / y기준 값이 증가하고 증가하거나, 감소하고 감소하는 점이 있으면 그 점은 서로 띄어줌

- 바운더리 필 알고리즘

안티 엘리어싱
계단 모양으로 짤리는 모습의 엘리어싱 문제가 있음
- 어떻게 해결하지?

- 슈퍼 샘플링

- 오버랩 에리아

다음 값이 크면 클수록 가중치가 커짐

p는 이 값에 1-m을 한 값
p의 값이 1-m보다 작으면 아래 / 크면 위에 픽셀을 선택한다
p+m이 < 1 이면 위에 있다 아래 생성
p+m이 > 1 이면 아래에 있다 위에 생성 픽셀을 벗어났다
p+m은 y – 0.5 ~ y= mx + b 위의 점까지의 길이

- p로 한번에 해결 가능
=> 점과 선 사이의 길이가 얼마냐
- 음수면 아래에 만들고
- 양수면 위에 만들어라
'Computer Graphics > Basic' 카테고리의 다른 글
| [Computer Graphics] 그래픽스 파이프 라인과 렌더링 파이프 라인 (0) | 2024.03.26 |
|---|