2011-02-03 8 views
9

He intentado durante muchos meses para saber cómo funcionan IDirect3DVertexBuffer9 y IDirect3DIndexBuffer9. He leído varios libros, libros electrónicos y foros y aún no puedo entender cómo funcionan. ¿Alguien puede ayudarme a entender cómo funcionan y cómo se relacionan?Luchando con vértices y búferes de índice en Direct3D

PD: He intentado buscar a través de las preguntas relacionadas pero nada me ha interesado.

Gracias.

Respuesta

7

IndexBuffers se utilizan para la memoria & optimizaciones de velocidad. Un indexBuffer es una lista de índices que indexan los vértices en vertexBuffer.

Digamos que voy a renderizar un Flat Quad en la pantalla con 2 triángulos. Cada triángulo ocupa 3 vértices, por lo que para renderizar el quad con solo un VertexBuffer necesitaré 6 vértices.

Ahora bien, si uso un IndexBuffer, solo necesitaría usar 4 vértices (uno para cada esquina del quad). Pero necesitaría 6 índices, 3 índices para cada triángulo, que indexará uno de los vértices de las esquinas.

En modelos grandes, esto puede ahorrar memoria & mejora en gran medida la velocidad ya que la GPU procesará menos vértices.

Aquí hay un sitio con un buen código de muestra :: http://www.codesampler.com/dx9src.htm Allí descargue la muestra llamada "Geometría indexada".

+0

Gracias, zezba9000. Justo lo que necesito saber. Gracias de nuevo. – DeadCapacitor

20

Esto también me confundió al principio. Otra forma de pensar sobre esto es visualmente (soy un gran pensador visual, así que tal vez esto también lo ayude).

Ampliando el ejemplo de zezba, digamos que queremos dibujar un quad con dos triángulos:

Quad

como S/señaló, esto se puede hacer con sólo cuatro vértices. Por lo tanto, su buffer de vértices contendría solo CUATRO entradas. Voy a etiquetar estos {A, B, C, D}:

Quad with vertices: A, B, C, D

Sin embargo, ya que los procesadores gráficos acuerdo con triángulos, todavía es necesario definir grupos de tres vértices de decir la GPU cómo crear triángulos fuera de la lista de vértices ya definidos. Este es el propósito del buffer de índice.

Puede pensar en el buffer de índice simplemente como una lista de índices EN el búfer de vértice que define triángulos. Entonces, dado que estamos formando dos triángulos, y cada triángulo necesita tres vértices, la memoria de índice necesitará SEIS entradas.

El pedido también importa un poco aquí. No entraré demasiado en eso, pero digamos que quiero definir mis triángulos en el sentido contrario a las agujas del reloj. Definiré mis dos triángulos como {B, A, C} y {B, C, D}. Está perfectamente bien reutilizar vértices para múltiples triángulos.

Así que mis memorias intermedias terminar pareciéndose a esto:

Quad with vertex and index buffers

Espero que esto ayude.

+0

Eso ayuda mucho. Gracias, Haylwood. Y sí, soy un pensador visual también :) – DeadCapacitor

Cuestiones relacionadas