인덱싱 없이 두 개의 삼각형 그리기 (인덱스 버퍼 사용 이유)

다음 그림에 표시된 쿼드를 그릴 것이라고 가정해 보겠습니다.

삼각형 목록 기본 형식을 사용하여 두 삼각형을 렌더링하는 경우 각 삼각형은 3개의 개별 꼭짓점으로 저장되므로 다음 그림과 비슷한 꼭짓점 버퍼가 생성됩니다.

그리기 호출은 매우 간단합니다. 꼭짓점 버퍼 내의 위치 0부터 시작하여 두 개의 삼각형을 그립니다. 컬링을 사용하도록 설정하면 꼭짓점의 순서가 중요합니다. 이 예제에서는 기본 시계 반대 방향 컬링 상태를 가정하므로 표시되는 삼각형을 시계 방향 순서로 그려야 합니다. 삼각형 목록 기본 형식은 단순히 각 삼각형에 대한 버퍼에서 선형 순서로 세 개의 꼭짓점을 읽으므로 이 호출은 삼각형(0, 1, 2) 및 (3, 4, 5)를 그립니다.

인덱싱을 사용하여 두 개의 삼각형 그리기

여기서 알 수 있듯이 꼭짓점 버퍼에는 위치 0 및 4, 2 및 5의 중복 데이터가 포함됩니다. 두 삼각형이 두 개의 공통 꼭짓점을 공유하기 때문에 의미가 있습니다. 이 중복 데이터는 낭비되며 인덱스 버퍼를 사용하여 꼭짓점 버퍼를 압축할 수 있습니다. 더 작은 꼭짓점 버퍼는 그래픽 어댑터로 보내야 하는 꼭짓점 데이터의 양을 줄입니다. 더욱 중요한 것은 인덱스 버퍼를 사용하면 어댑터가 꼭짓점 캐시에 꼭짓점을 저장할 수 있습니다. 그리는 기본 형식에 최근에 사용한 꼭짓점이 포함되어 있으면 꼭짓점 버퍼에서 읽는 대신 캐시에서 해당 꼭짓점을 가져올 수 있으므로 성능이 크게 향상됩니다.

각 고유 꼭짓점을 꼭짓점 버퍼에 한 번만 저장해야 하므로 인덱스 버퍼가 꼭짓점 버퍼로 '인덱스'됩니다. 다음 다이어그램은 이전 그리기 시나리오에 대한 인덱싱된 접근 방식을 보여 줍니다.

인덱스 버퍼는 꼭짓점 버퍼 내의 특정 꼭짓점을 참조하는 VB 인덱스 값을 저장합니다. 꼭짓점 버퍼는 꼭짓점 배열로 간주될 수 있으므로 VB 인덱스는 단순히 대상 꼭짓점의 꼭짓점 버퍼에 대한 인덱스입니다. 마찬가지로 IB 인덱스는 인덱스 버퍼의 인덱스입니다. 주의하지 않으면 매우 빠르게 혼동될 수 있으므로 사용 중인 어휘에 대해 명확히 확인해야 합니다. 즉, VB 인덱스 값이 꼭짓점 버퍼로 인덱싱되고, IB 인덱스 값이 인덱스 버퍼에 인덱스되고, 인덱스 버퍼 자체가 VB 인덱스 값을 저장합니다.

그리기 호출은 다음과 같습니다. 모든 인수의 의미는 다음 그리기 시나리오에 대해 길이에 따라 설명됩니다. 지금은 이 호출이 Direct3D에 인덱스 버퍼 내의 위치 0부터 시작하여 두 개의 삼각형이 포함된 삼각형 목록을 렌더링하도록 다시 지시합니다. 이 호출은 이전과 정확히 동일한 순서로 동일한 두 개의 삼각형을 그려서 적절한 시계 방향 방향을 보장합니다.


인덱스 버퍼 만들기

Untitled

인덱스 버퍼를 초기화하려면

  1. 인덱스 정보가 포함된 버퍼를 만듭니다.