Depth란 깊이라는 뜻입니다.
화면으로부터 가상공간으로 얼마나 깊이가 들어갔는가라는 의미에서
깊이버퍼라고 부릅니다.
가상공간으로 들어가는 방향이 z방향이기 때문에 z-buffer라고도 불립니다.
Depth buffer의 기본원리는 Ray Tracing과 동일합니다.
z = 1, z = 2, z = 3 인 3개의 물체가 존재할 때 앞에있는 물체가 그려져야합니다.
뒤에있는 물체는 앞에있는 물체에 가려서 그리지지 않아야 합니다.
정투영에서는 비교적 쉽게 Depth buffer를 구할 수 있습니다.
하지만 원근투영에서는 조금 다르게 구현해야합니다.
깊이 버퍼에서 수정해야하는 것들은
1. Render 시작할 때 Depth buffer 초기화
2. 삼각형 안에 픽셀들의 z값 구하기
3. 깊이 버퍼를 업데이트할 수 있는 조건 추가
가 있습니다.
z = 1, z = 2, z = 3 이기 때문에 3.f 보다 큰 값을 넣어 초기화해줍니다.
이후 vertextBuffer.z 값과 이용해 무게 중심 좌표계를 이용해 depth를 설정합니다.
마지막으로 depth가 depthBuffer보다 작으면 그려져야합니다.
조건을 depth < depthBuffer[index] 로 설정하고
depthBuffer[index] = depth로 설정하면 depthBuffer 설정이 마무리됩니다.
무게 중심 좌표계를 활용해 depth를 저장하면 왜곡이 발생합니다.
이 때문에 이 왜곡을 처리하기 위해 해줘야하는 수정값들이 있습니다.
추후에 왜곡을 처리하는 기법을 알아보겠습니다.
'컴퓨터 그래픽스 > Rasterization' 카테고리의 다른 글
Rasterization(8) - 원근 투영 (0) | 2024.07.28 |
---|---|
Rasterization(7) - 후면 추려내기 (0) | 2024.07.28 |
Rasterization(5) - 위성 만들기 (0) | 2024.07.20 |
Rasterization(4) - 물체의 이동과 회전 (0) | 2024.07.20 |
Rasterization(3) - 원 그리기 (0) | 2024.07.20 |