2013-06-02 5 views
0

왜 내가 정점 버퍼의 배열을 활성화 할 수 있지만 하나의 인덱스 버퍼 만 설정할 수 있는지 혼란 스럽습니까? 하나의 인덱스 버퍼가 모든 정점 버퍼의 정점을 처리 할 수 ​​있습니까? 그리고 만약 그렇다면 인덱스가 속한 버퍼를 어떻게 지정해야합니까?DX10 + 여러 개의 정점 버퍼, 단일 인덱스 버퍼

내가 가지고있는 또 다른 질문은 색인 된 삼각형 목록을 사용하고 있기 때문에 인덱스 데이터는 대략 메쉬 당 정점 데이터와 같은 크기입니다. 하나의 정점 버퍼 당 하나의 인덱스 버퍼를 만드는 것에 대해 생각하고있었습니다. 나는 하나의 버퍼가 없어 질 때까지 동적으로 메쉬를 추가하여 다른 쌍이 만들어 질 것입니다. 필연적으로이 작업을 수행하면 한 쌍의 버퍼 중 하나가 항상 다른 버퍼보다 ​​먼저 채워지고 나머지 공간은 사용되지 않습니다. 그 공간은 실제로 gpu에서 예약 된 것으로 표시 되나요? 예를 들어, 32MB의 데이터를 포함하는 4 개의 버퍼를 수용 할 수 있지만 128MB의 vram에는 64MB의 바이트 폭으로 생성됩니까?

답변

1

같은 인덱스를 모든 정점 버퍼와 동시에 사용해야합니다. 이것의 목적은, 다른 정점 버퍼가 정점 데이터의 다른 성분을 포함 할 수 있도록 (듯이)하기 위해서입니다. 예를 들어, 하나의 정점 버퍼에 위치를 저장하고 두 번째 버퍼에 텍스처 좌표를 저장할 수 있습니다. 0 번째 인덱스는 첫 번째 정점 버퍼에서 첫 번째 위치에 액세스하고 두 번째 인덱스에서 첫 번째 텍스처 좌표를 액세스합니다.

프레임마다 텍스처 좌표를 업데이트하지만 위치를 변경하지 않으려는 경우 대역폭을 절약 할 수 있습니다.

복수의 정점 버퍼도 인스턴스화에 사용됩니다.

정점 또는 인덱스 버퍼를 만들 때 버퍼 크기를 지정합니다. 이 메모리 양은 비디오 RAM에 예약되어 있으므로 다른 용도로 사용할 수 없습니다.

그래서 내가 당신의 질문을 이해한다면, 당신은 128 메가 비트 램에 4 개의 64mb 버퍼를 맞출 수 없습니다.

+0

잘 정리하면, 여러 버퍼의 버텍스 데이터를 가져 오는 것이 성능에 어떤 영향을 줍니까? 또한 두 정점 버퍼에 위치 데이터가 있으면 어떻게됩니까? 둘 다 얻을 수 있고 애니메이션 등을 삽입 할 수 있습니까? –

+0

DX10 +에는 고정 파이프 라인이 없으므로 동일한 버텍스에 대해 두 가지 위치로 수행하는 작업은 전적으로 쉐이더 작성시에 달려 있습니다. 애니메이션은 일반적으로 두 개의 버텍스 버퍼 사이의 보간보다는 월드 매트릭스 간의 보간법을 사용하여 수행됩니다. 그러나 이것은 다른 주제입니다! – gareththegeek

관련 문제