본문 바로가기

예전/3D

[3D] 지형(Terrain)


3D 공간에 지지대 역할을 하는 것이 지형이다.



지형은 버텍스 버퍼와 인덱스 버퍼로 만들 수 있다.


버텍스 버퍼로 생성하게 되면 각 폴리곤 마다 정점이 3개씩 존재하기 때문에 큰 지형의 경우 부하가 발생한다.

하지만 인덱스 버퍼로 지형을 생성하게 되면 각 포인트 마다만 정점을 생성하고, 인덱스 버퍼로 순서만 지정하면 되기 때문에

훨씬 가볍다.


만약 w, h 크기의 지형을 생성한다고 하자.


이때 버텍스 버퍼든, 인덱스 버퍼든 셀의 개수는 (w-1)*(h-1)개 이다.


버텍스 버퍼로 지형을 생성할 때 필요한 정점의 개수는

한 폴리곤당 필요한 정점의 수가 3개 이고, 한 샐당 존재하는 폴리곤의 수가 2개 이므로

(w-1)*(h-1)*6 개 이다.


만약, 인덱스 버퍼로 지형을 생성할 때 필요한 정점의 수는 w * h 이고, 필요한 인덱스 버퍼의 수는 

(w-1)*(h-1)*2 개 이다.



또 지형을 생성할 때 중요한 것은 (0,0)을 중점이 되도록 생성해야 한다는 것이다.


따라서, 처음 시작 위치를 (-w/2,0,h/2) 로 지정해야 한다. z가 + 인 이유는 DirectX 에서는 +z의 값이 화면의 안쪽이기 때문이다.

이런 식으로 생성하면 원점을 중심으로 좌 상단부터 우 하단까지 정점이 설정될 것입니다.





지형을 생성하는 과정은 

w * h 개 만큼 D3DXVECTOR3를 생성한 후, 원점이 중심이 되도록 배치한다.

버텍스 버퍼를 w * h 개 만큼 생성한 후 위치와 법선 벡터, 텍스쳐 등을 설정해준다.

인덱스 버퍼를 (w-1)*(h-1)*2 개 만큼 생성한 후 인덱스 버퍼의 위치를 지정해 주고, 렌더하면 된다.





이것은 지형에 임의로 y값을 줘서 Wire 모드로 뿌린 것이다.



'예전 > 3D' 카테고리의 다른 글

[3D] 지형 올리고 내리기  (0) 2013.01.08
DrawPrimitive , DrawPrimitiveUP  (0) 2013.01.08
[3D] 높이 맵  (0) 2013.01.08
[3D] 픽킹 (Picking)  (3) 2013.01.08
[3D] 알파 블렌딩 (ALPHABLEND)  (0) 2013.01.07