opengl - oficial - Representación de mallas con índices múltiples
godot oficial (1)
Tengo algunos datos de vértices. Posiciones, normales, coordenadas de textura. Probablemente lo cargue desde un archivo .obj o algún otro formato. Tal vez estoy dibujando un cubo. Pero cada pieza de datos de vértices tiene su propio índice. ¿Puedo renderizar estos datos de malla usando OpenGL / Direct3D?
En el sentido más general, no. OpenGL y Direct3D solo permiten un índice por vértice; el índice obtiene de cada flujo de datos de vértice. Por lo tanto, cada combinación única de componentes debe tener su propio índice separado.
Entonces, si tienes un cubo, donde cada cara tiene su propia normalidad, necesitarás replicar mucho la posición y los datos normales. Necesitarás 24 posiciones y 24 normales, aunque el cubo solo tendrá 8 posiciones únicas y 6 normales únicas.
Su mejor opción es simplemente aceptar que sus datos serán más grandes. Muchos formatos de modelos usarán múltiples índices; deberá corregir estos datos de vértice antes de poder procesarlos. Muchas herramientas de carga de malla, como Open Asset Importer, realizarán esta corrección por usted.
GL 3.x y D3D10
Para el hardware D3D10 / OpenGL clase 3.x, es posible evitar realizar la corrección y usar múltiples atributos indexados directamente. Sin embargo, tenga en cuenta que esto probablemente disminuirá el rendimiento de representación.
La siguiente discusión utilizará la terminología OpenGL, pero Direct3D v10 y superior tiene una funcionalidad equivalente.
La idea es acceder manualmente a los diferentes atributos de vértices desde el sombreador de vértices. En lugar de enviar los atributos de los vértices directamente, los atributos que se pasan son en realidad los índices para ese vértice particular. El sombreador de vértices utiliza los índices para acceder al atributo real a través de una o más texturas de búfer .
Los atributos pueden almacenarse en múltiples texturas de búfer o todo dentro de uno. Si se utiliza este último, el sombreador necesitará un desplazamiento para agregar a cada índice para encontrar el índice de inicio del atributo correspondiente en el búfer.
Los atributos de vértices regulares se pueden comprimir de muchas maneras. Las texturas de búfer tienen menos medios de compresión, permitiendo solo un número relativamente limitado de formatos de vértices (a través de los formatos de imagen que admiten).
Tenga en cuenta una vez más que cualquiera de estas técnicas puede disminuir el rendimiento general del procesamiento de vértices. Por lo tanto, solo se debe usar en la mayoría de las circunstancias limitadas por memoria, después de que se hayan agotado todas las demás opciones de compresión u optimización.
OpenGL ES 3.0 también proporciona texturas de buffer. Las versiones superiores de OpenGL le permiten leer objetos de búfer de forma más directa a través de SSBOs lugar de texturas de búfer, que pueden tener mejores características de rendimiento.