2008/07/08 21:39

[D3DX] 높이맵 완성!

사용자 삽입 이미지

::  높이맵을 적용하여 1089개의 버텍스가 렌더링된 모습

사용자 삽입 이미지



:: 높이맵정보를 가지고 있는 이미지 파일(웹에올리기 위해 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면 아예 화면에 보이지도 않을정도로 커져버리기때문..
이올린에 북마크하기(0) 이올린에 추천하기(0)
Trackback 0 Comment 3