이제 기본적인 vertex를 이용한 물체 생성을 알아 보았다.
 하지만 이전의 예제들을 보면, 한 가지 의문이 들 수도 있다.. 그 것은 바로...
 공통된 버텍스 좌표인데, 각자 다 따로 선언하여 사용했다는 것이다..

 그렇다 생각해보면, 정육면체 큐브를 만드는데에는 24개의 점이 필요없다. 이 것은 한 면은 4개의 버텍스라는 기본적인 생각에서 x6을 하면 24가 되는 것이지, 겹치는 점을 생각하면, 8개면 충분하다..

 바로 이런 겹치는 점을 없애기 위해서 나온 개념이 바로, 인덱스 버퍼 이다. index라 함은 말 그대로 순번이 메겨져 있다는 것이다.

 즉, 꼭 필요한 만큼의 버텍스를 선언해 놓고, 그 것에 0~n 개의 번호를 부여한다고 치고, 그 n 개 까지의 번호중 현재 필요한 3개의 점을 순서대로 잇도록 배열한 인덱스만 있으면, 똑같은 큐브를 8개의 점만 가지고, 그릴 수 있다..

 머 이렇게 큐브만 놓고 보자면, 사실.. 큰 필요가 없어 보일 지도 모르겠다. 하지만 많은 폴리곤들이 겹치는 하나의 모델링을, 모든 버텍스의 정보를 다 입력하는 것과, 사용되는 점들에 인덱스를 매겨서 가지고 있다가, 인덱스로 그리는 것은 엄청난 버퍼 용량의 이득을 가져온다..

 이 번 예제는 그냥 버텍스버퍼로 그리는 것과 인덱스 버퍼로 그리는 것에 결과가 같음을 보여주기 위한 예제이니, 인덱스 버퍼 위주로만 보겠다..


일단 버텍스를 선언하는데, 인덱스 용으로 따로 하나를 더 했다는 것을 알 수 있다. 그리고 인덱스 정보가 저장되어있는 인덱스버퍼를 선언했다. 그리고 이제는 멀티플 버텍스가 아니기 때문에, 그냥 구조체에 모든 정보를 넣었다.


이 것이 큐브를 그리기 위한 버텍스이다. 뒤의 주석을 보면 알겠지만, 사실 쓰는 꼭지점의 위치는 0~7까지.. 밖에 없다.. 하지만 계속 반복이다.. 아래의 5번 6번 면도 더 있다... 그 것을 인덱스 버퍼로 그리게 되면,


고유의 8개의 버텍스 정보와, 어떤 순서로 그릴지 하는 인덱스 정보만 남는다.

 


그리고 버텍스 8개만큼의 공간을 선언하고, 인덱스의 갯수는 24개 이니까 24개의 공간만큼 (WORD로 선언되었으니까 2byte 만 쓴 것이다. 실제로 저 구조체 자체를 24개를 썻다면, 현재 차이가 나는 16개에 곱하기 16바이트만 해도 엄청난 차이이다. ) 선언해준다.


해제도 물론 다 해줘야한다.


그리는 법은 인덱스 쪽만 보겠다. 먼저 스트림에 인덱스 버퍼의 버텍스 정보가 들어있는 버퍼를 넣어주고, Set인덱스에다가 인덱스 버퍼를 넣어준다. 그리고 FVF 정보도 넣어주면된다.
 그리고 나머지는 DrawIndexedPrimitive로 그려주면된다. 중간에 Indexed가 추가되었다.. 그렇게 하면,


 


인덱스 버퍼 만으로, 이런 큐브들이 만들어 진다..
Posted by 바람처럼..
|