눈에 보이는 곳
가시면 결정이란?
관찰자에게 보이는 표면을 식별하는 기술
대부분 이미지 공간 비법 이용
객체공간기법 - 실시간성이 중요한데 계산이 오래걸림
화가의 알고리즘
누가 더 가까운지 판단한 다음에 한다
-먼 곳의 물체부터 색을 덮어 씌워 그림
1. 깊이 값의 내림차순으로 표면을 정렬
2. 가장 큰 깊이 값을 갖는 표면부터 차례로 주사변환
중첩은 - 물체 분리 nlogn (실시간성 확인 어렵)
이미지 공간 기법
- 대표적인 알고리즘
- 현재 z값(눈에서 물체까지 거리)(=깊이값)
- 2차원에서 계산
- 2개의 버퍼 사용 그림을 그리는 버퍼 : 프레임버퍼(도화지) 깊이 버퍼
깊이 정렬 알고리즘 (깊이 버퍼) depth buffer
* 프레임에 대한 개념
960x1280 0~255
큰 값을 멀리
흰색 1111
(프레임버퍼) 도화지는 배경 셋팅, z값은 무한대
그리고 픽셀별로 z값 계산
z에는 z값이 기존값보다 작은 값들이 업데이트 (크면 업데이트 안함) 그리고 도화지에는 색값이 업데이트
for all (x, y) ∈ Viewport {
FrameBuffer(x, y) = BACKGROUND_COLOR;
DepthBuffer(x, y) = 1.0;
}
for i=1 to nPolygon {
for all (x, y) ∈ Polygon[i] {
깊이 값 z 계산;
if (z < DepthBuffer(x, y)) {
색상 값 P 계산;
FrameBuffer(x, y) = P;
DepthBuffer(x, y) = z;
}
}
}
프레임 버퍼
F1, F2
하나만 쓰면 single
두 개 쓰면 double(GLUT_DOUBLE)
임시저장장소 -buffer라고 하는겨
버퍼는 메모리
1바이트(8비트)
rgb는 3바이트(24비트)
-->
960X1280 하나에 3MB 램에 잡힌다
F1에 그림을 그린다 (픽셀에 색을 채운다) 다그리고 모니터나 티비에 보낸다
싱글 버퍼는 그림을
1초
메모리 락 (MEMORY lock) - 그림을 못그려 한장을 보내야 볼 수 있다
한 장에 2초
그래서 f2 까지 하면 빨리 걸린ㅁ
조명 및 표면 렌더링
색을 결정하는 프로세스 가 렌더링
두 개의 값이 다르면 선이 있는 듯해 마하밴드(Mach band) 효과
실제는 10이 차이 나지만 사람에게는 14,15로 보임
부드럽게 만들면 메쉬를 늘리면 됨 -> 속도가 엄청 오래걸린다
그림자를 넣지 않으면 떠있는지 테이블 위에 있는지 모름 ->그림자 효과
조명 모델
전역 조명 모델
-물체에 직접 도달하는 빛뿐만 아니라 다른 물체에 반사되어 도달하는 빛까지 고려한 모델
-정교한 조명 효과를 표현할 수 있음
-물체에 반복적으로 반사되는 빛을 추적하기 위해 많은 계산을 해야 함
-사실적, 시간 오래걸림
지역 조명 모델
- 광원으로부터 물체에 직접 도달하는 빛만 계산
- 전역 조명 모델에 비해 빠른 처리가 가능함
정반사
-매끄러운
난반사
균일 음영법
법선과 빛의 각도 계산 하면 색을 알 수 있다.
구로 음영법( Gouraud shading)
- 다각형의 꼭짓점 색을 구한 후 이를 보간하여 다각형 내부 픽셀을 결정하는 음영법
- 꼭짓점 색의 결정
- 꼭짓점을 공유하는 다각형의 표면 법선벡터 평균을 계산
- 조명 모델을 적용하여 꼭짓점에서의 색을 결정 다각형 내부 색 결정
- 모든 꼭짓점 색을 결정
- 쌍선형 보간(bilinear interpolation)을 통해 각각의 내부 점들에 대한 색을 결정
그라데이션 (r-g)
꼭짓점을 공유하는 점 평균그라레이션을 줘라
퐁음영법
- 구로는 색을 결정한 다음에
- 법선벡터를 그라레이션 한 다음에 색 결정
- 시간이 좀 더 걸림
구로에서 퐁 에서 시간 10배 차이는 1.5배
속도는 구로가 더 빠름
'게임 프로그래밍 > 컴퓨터 그래픽스 (CG)' 카테고리의 다른 글
컴퓨터 그래픽스(CG) :: 3강 기하변환(1) (1) | 2024.07.30 |
---|---|
2강 컴퓨터 그래픽스 :: 소프트웨어 & 기본요소의 속성 (1) | 2024.07.26 |