Renderizado de mallas con múltiples índices


Tengo algunos datos de vértices. Posiciones, normales, coordenadas de textura. Probablemente lo cargué de A.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?

Author: Nicol Bolas, 2012-06-22

1 answers

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.

Así que si usted tiene un cubo, donde cada cara tiene su propia normal, tendrá que replicar la posición y los datos normales mucho. Necesitarás 24 posiciones y 24 normales, aunque el cubo solo tendrá 8 posiciones únicas y 6 únicas normal.

Su mejor opción es simplemente aceptar que sus datos serán más grandes. Muchos formatos de modelo usarán múltiples índices; necesitará arreglar estos datos de vértices antes de poder renderizarlos. Muchas herramientas de carga de malla, como Open Asset Importer, realizarán esta reparación por usted.

OG 3.x y D3D10

Para D3D10/OpenGL 3.hardware de clase x, es posible evitar realizar correcciones y usar múltiples atributos indexados directamente. Sin embargo, tenga en cuenta que esto es probable que disminuya el rendimiento de renderizado.

La siguiente discusión utilizará la terminología de 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 vértice directamente, los atributos que se pasan son en realidad los índices para ese vértice en particular. El sombreador de vértices luego usa los índices para acceder al atributo real a través de uno o más texturas de búfer.

Los atributos se pueden almacenar en múltiples texturas de búfer o todos dentro de uno. Si se usa este último, entonces el sombreador necesitará un desplazamiento para agregar a cada índice con el fin de 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, lo que permite solo un número relativamente limitado de formatos de vértices (a través de los formatos de imagen que apoyo).

Tenga en cuenta de nuevo que cualquiera de estas técnicas puede disminuir el rendimiento general de procesamiento de vértices. Por lo tanto, solo debe usarse en las circunstancias más limitadas en 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 búfer. Las versiones más altas de OpenGL le permiten leer objetos de búfer más directamente a través de SSBOs en lugar de texturas de búfer, que podrían tener un mejor rendimiento característica.

 62
Author: Nicol Bolas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-05-16 01:38:44