728x90
반응형
- 개요
원근 보정 매핑을 적용하여 왜곡이 발생한 캐릭터의 얼굴을 보정한다
- 문제 상황

메시를 구성하는 삼각형을 그리는 DrawTriangle3D 함수의 일부 로직은 위와 같다
삼각형을 구성하는 세 개의 점의 무게중심좌표의 값이 [0, 1]의 범위내에 있는 경우에만
해당 픽셀의 최종 UV 값을 계산하도록 로직을 구성하였다
위와 같은 텍스처 매핑 기법을 "아핀 텍스처 매핑"이라고 표현한다

위와 같이 아핀 텍스처 매핑을 수행하면 깊이 값을 고려하지 않아 위와 같이 왜곡이 발생하는 것을 확인할 수 있다
- 원근 보정 매핑의 사용

메시를 구성하는 삼각형을 그리는 DrawTriangle3D 함수의 로직을 위와 같이 수정한다
이전에는 무게중심좌표의 값만을 고려하여 아핀 텍스처 매핑을 수행하였지만,
추가적으로 뷰 공간의 Z값(깊이값)도 고려하는 원근 보정 매핑을 수행한다
수정한 코드는 다음과 같다
- 뷰 공간의 Z값(깊이값)이 보관된 클립 좌표의 W값의 역수를 로컬 변수에 각각 저장
- NDC 공간의 무게중심좌표에 각각 역수를 곱해 분모 값을 구하고 z 로컬 변수에 저장
- z 로컬 변수의 역수를 계산하여 invZ 로컬 변수에 저장
- W값의 역수를 저장한 로컬 변수들에 무게중심좌표를 곱하고 추가로 invZ 변수를 곱하는 연산을 진행
- 최종적으로 뷰 공간에서 보간된 무게중심좌표를 계산하고 targetUV 로컬 변수에 저장

위와 같이 원근 보정 매핑을 사용하면 무게중심좌표 + 깊이값을 고려하여 매핑하므로 왜곡이 발생하지 않는다
728x90
반응형
'수학 > 이득우의 게임 수학 - 실습 예제' 카테고리의 다른 글
| 원근 투영 행렬을 이용한 절두체 컬링의 구현 (0) | 2026.07.08 |
|---|---|
| 절두체 컬링의 구현 (0) | 2026.07.01 |
| 깊이 값을 적용하여 화면에 원근감 부여하기 (0) | 2026.06.03 |
| 화면에 원근감 부여하기 (0) | 2026.05.27 |
| 3차원 공간에서의 자유로운 회전 (0) | 2026.05.06 |