J'ai des données de sommet. Positions, normales, coordonnées de texture. Je l'ai probablement chargé à partir d'un fichier .obj ou d'un autre format. Mais chaque donnée de sommet a son propre index. Puis-je rendre ces données de maillage en utilisant OpenGL / Direct3D?
Réponse
Trop de publicités?Dans le sens le plus général, non. OpenGL et Direct3D seulement permettre un index par vertex; l'index extrait de chaque flux de vertex. Par conséquent, chaque combinaison unique de composants doit avoir son propre index.
Donc, si vous avez un cube, où chaque face a ses propres normal, vous devrez reproduire la position et des données normales beaucoup. Vous aurez besoin de 24 positions et 24 normales, même si le cube aura seulement 8 unique positions et 6 unique normales.
Votre meilleur pari est de tout simplement accepter que vos données seront plus grandes. Un grand nombre de modèle de formats utiliser plusieurs indices; vous aurez besoin de la correction de ce sommet de données avant de vous rendre avec elle. De nombreux filet de chargement d'outils, telles que l'ouverture de l'Actif de l'Importateur, va effectuer cette correction pour vous.
GL 3.x et D3D10
Pour D3D10/OpenGL 3.x-matériel de classe, il est possible d'éviter d'effectuer la correction et l'utilisation de plusieurs attributs indexés directement. Toutefois, sachez que ce sera probablement diminuer les performances de rendu.
La discussion qui va suivre va utiliser l'OpenGL terminologie, mais Direct3D v10 et ci-dessus a des fonctionnalités équivalentes.
L'idée est d'accéder manuellement les différents sommet des attributs à partir du vertex shader. Au lieu d'envoyer le sommet des attributs directement, les attributs qui sont passés sont en fait les indices pour que le vertex. Le vertex shader utilise ensuite les indices pour accéder à la véritable attribut par un ou plusieurs tampons de textures.
Les attributs peuvent être stockées dans de multiples tampon de textures ou de tous dans un. Si ce dernier est utilisé, alors le shader aurez besoin d'un décalage à ajouter à chaque indice pour trouver l'attribut correspondant de l'index de début de la mémoire tampon.
Régulière de sommet attributs peuvent être compressés dans de nombreuses façons. Tampon de textures ont moins de moyens de compression, ce qui permet qu'un nombre relativement limité le nombre de vertex formats (via les formats d'image qu'ils soutiennent).
Veuillez noter encore une fois que ce sera une diminution globale de vertex performances de traitement. Par conséquent, il doit être utilisé uniquement dans le plus de mémoire limité de circonstances, après que toutes les autres options de compression ou d'optimisation ont été épuisés.
OpenGL ES n'est pas encore offrent des fonctionnalités similaires à ce.