🎨DirectX

[DX] 높이맵

공대 컴린이 2023. 2. 4. 23:37
728x90

📚 높이맵

지금까지는 2D 좌표계에서 x축과 z축으로만 그리드를 만들고 y값을 0으로 설정하였다.

이번에는 이러한 y값을 0이 아닌 높이값을 할당하여 평평한 2D 그리드에서 입체적으로 y값이 들쭉날쭉한 3D 그리드로 출력하는 방법을 공부하였다.

 

Texture의 픽셀 하나에는 r,g,b,a 를 갖는 색상값이 존재하는데 그 값은 0~1까지의 범위를 갖는다.

정규화된 범위에 255를 곱하면 0부터 255로 범위가 늘어나게 되어, Texture의 픽셀 범위가 256 * 256이 된다.

 

이후 Texture에 있는 0번째 픽셀이 그리드의 0번째 y값이 되고 Texture의 1번째 픽셀은 그리드의 1번째 값이 된다.

이렇게 Texture에서 픽셀 값을 꺼내다가 높이를 만들어서 생긴 맵을 높이맵이라고 한다.

 

그렇다면 Texture를 읽어 생성된 높이맵을 출력해보자.

 

사용된 Texture

높이맵으로 출력할 Texture는 위와같이 보통 흑백을 많이 사용한다. Texture의 가장 밝은 부분이 가장 높은 부분이고, 가장 어두운 부분이 0에 가까운 부분이다.

 

출력결과를 보면 한가지 이상한 점이 있다.

Texture의 가장 높은부분(흰색부분)을 보면 왼쪽 상단에 위치해있는데, DX에서 출력한 높이맵을 보면 높은 부분이 왼쪽 하단에 출력되어 있다.

그밖에도 살펴보면 출력된 높이맵이 Texture의 x축을 뒤집어 반대로 뒤집혀서 나온것을 알 수 있다.

💡 맵 이미지를 출력할때 뒤집혀서 나오는 이유

UV좌표는 좌표값이 위에서 아래로 내려오는데 DX좌표계에서는 좌표값이 밑에서 위로가기 때문에 이미지대로 Terrain을 출력하면 뒤집혀서 나온다.

 

Terrain.cpp

따라서 정점 정보를 저장할 때 높이값을 역순으로 입력하여 Texture 이미지와 같은 맵이 나오도록 구현하였다.


[ 출력 결과 ]

 

728x90