ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [펌] [DX]인덱스버퍼(1)
    프로그래밍/3D 2005. 8. 6. 18:14
     

     어느순간 막혀버린 인덱스 버퍼, 나름의 정리를 하겠습니다.
    인덱스 버퍼에 관한 자료는 인터넷 검색으로도 거의 전무한 상태이군요.

     

    인덱스 버퍼란 정점의 인덱스를 보관하기 위한 전용 버퍼를 말한다.
    메모리 소모량이 적고 캐시를 이용해 높은 효율을 낼 수 있다.
    캐시를 통한 최적화는 인덱스 버퍼를 사용할 때만 가능한 것으로
    통상 출력 속도가 두 배 정도 빨라진다.
    인덱스 버퍼는 DirectX 8.0에서 새롭게 등장한 것으로서,
    인덱스된 렌더링에 사용할 인덱스를 저장합니다.
    인덱스 버퍼는 복사 작업을 제거(하거나 최소한 줄이기 위해) 제공된 것으로서,
    DirectX 7.0에 비해 성능 상의 향상을 가져 왔습니다.
    인덱스 버퍼는 16비트나 32비트로 할당됩니다. 최대 인덱스 값에 해당하는 제한 값이 있는데,
    2**16이며, 모든 2**32는 아직 사용할 수 없습니다.

     

    뭐, 남는건 아~ 빠르구나~  이것 밖에는 <(o.o)>

     

     

    사용순서는

    1. SetFVF()함수로 정점 버퍼의 정보를 D3D에 전달한다.
    2. SetStreamSource()함수로 정점 버퍼사용할 준비를 한다.
    3. SetIndices()함수를 사용하여 인덱스 버퍼를 사용할 준비를한다.
    4. 기존에 사용했던 DrawPrimitive()함수가 아닌
       DrwaIndexedPrimitive()함수를 사용하여 정점 버퍼 + 인덱스 버퍼로 폴리곤을 출력한다.

       입니다.

     

     

    사용자 삽입 이미지

    버텍스(정점)버퍼에 관한 사항은 자료가 충분하므로 공부하시기 편할 겁니다.

     

    뭐, 제가 이해한 위의 그림을 설명하자면 

    평소의 정점출력(DrawPrimitive)은 2,1,6정점과 10,-3,0 정점 4,8,6좌표의 정점들 등등...을 이어서 삼각형을 만들어가면서 원하는 대상물을 출력합니다.

    삼각형들이 모여서 물체가 이루어 진다는 것은 다들 아시죠?

     

    두번째 그림에서 버택스버퍼이외에 하나의 인덱스버퍼가 더 추가됩니다. 2,1,6은 0번 인덱스

    10,-3,0은 1번인덱스 4,8,6은 2번 인덱스 입니다.

    인덱스로 출력(DrawIndexedPrimitive)을 하면 인덱스버퍼를거쳐 버텍스버퍼를 참조하여 출력을 하게됩니다.

     

     

    또다른 장점은 하나의 버텍스버퍼에 종류별로 인덱스를 묶어

    인덱스 번호로 원하는 버텍스를 찍을 수 있는 장점이 있겠습니다.

    LOD쓸때 편하죠

     

    자세한 사항은 추후 내공이 더욱 쌓이면 올리도록 하겠습니다.

     

     

    댓글