:: 높이맵정보를 가지고 있는 이미지 파일(웹에올리기 위해 jpg로 확장자 변환하였다.)
먼저 33 * 33 타일을 만들었다
버텍스수는 33 * 33 = 1089가 되므로 픽셀수도 1089개 되어야함..
33 * 33 짜리 이미지는 포토샵에서 필터 - 렌더 - Difference Clouds 을 적용하여 만들었다.
이미지 - 적용 에서 그레이스케일로한후 save as 에서 .raw 확장자로 저장하게되면
한 픽셀당 8 비트가 할당된 이미지가 만들어지게된다(총 1089바이트)
색상이 흰색에 가까울수록 255에 가깝고 검은색에 가까울수록 0에 가깝다
이제, 이 픽셀들을 버텍스들과 매핑시킬때 버텍스의 y 좌표값에 이 바이트값을 넣어주면 높이가 표현된다.
맵이미지 파일을 읽어올때는 fopen() 과 fscanf() 를 사용해서 읽었다.
읽은후에는 버텍스버퍼 락을걸고 1089 번 루프를 돌면서 각 버텍스의 y성분만 건드려주면된다.
제법 간지나게 나온듯해서 뿌듯하다 -_-흐흐..
.. 그리고 몇가지 이슈사항..
1. D3DXCreateVertexBuffer9 로 버텍스 버퍼를 생성할때 D3DUSAGE 인자를 넣어야하는데..
높이맵처럼 버텍스의 특정 성분(y좌표)만 수정이 빈번하게 이루어진다면 어떤 플래그를 넣어야할까..
D3DUSAGE_WRITEONLY, D3DUSAGE_DYNAMIC(이걸로 해봤더니 버텍스버퍼에 쓰기할때 에러난다), 등등등..
플래그가 여러개가 있는데.. 뭘쓰는게 가장 최적화에좋을지..
2. 1바이트는 0 부터 255까지 나타낼수있는데 이 값을 그대로 버텍스의 Y성분에 적용해버리면 안되고
0.03 정도를 곱해서 전체적인 수치를 좀 낮춰줘야한다.. 왜냐하면.. 버텍스 간의 간격이 1로되어있는데
높이가 255면 아예 화면에 보이지도 않을정도로 커져버리기때문..

이올린에 북마크하기
이올린에 추천하기
Prev
Rss Feed