2017-02-26 3 views
-2

Lors d'un dessin instancié dans OpenGL, le diviseur d'attribut ne peut être défini que sur 255 comme valeur maximale, donc pour combiner un grand maillage, je dois le séparer en plusieurs instances. J'ai besoin de mieux comprendre le diviseur en OpenGL, est-ce que la limite maximale dépend du driver/GPU ou est-ce que c'est toujours 255 sur tous les devices?Valeur maximale du diviseur d'attribut OpenGL

+0

La spécification ne mentionne pas un maximum, donc je suppose que chaque valeur qui correspond à un 'GLuint' est valide. C'est soit un bug dans les pilotes ou dans votre code. S'il vous plaît montrer le code. – ybungalobill

+0

Je connais l'instanciation et comment diviseur va m'aider à parcourir les données sur vertex_buffer_object. Cela fonctionne bien quand je veux qu'une transformation soit passée à n chaque instance (n de 1 à 255), mais quand je veux qu'une transformation soit passée à plus de 256 instances, alors elle se comporte comme un ventilateur de bruit dans l'écran. – Manh

+0

Cela ressemble à un bug dans votre code, comme si vous utilisiez un mauvais type de données quelque part. – ybungalobill

Répondre

1

Vous ne comprenez pas comment le divisor and instance arrays fonctionne. Instancer signifie rendre le même maillage plusieurs fois, en fournissant différentes données par instance comme des transformations, etc. Les tableaux d'instances sont un moyen de fournir des données par instance.

Le diviseur n'est pas un diviseur du nombre de vertex. C'est un diviseur de l'instance . Et ainsi, il ne fait réellement quelque chose d'utile que si vous utilisez instanced rendering.

Si le diviseur est zéro, aucune instanciation ne se produit pour cet attribut. Si le diviseur est 1, alors l'attribut sera le même pour tous les sommets d'une instance, mais l'instance suivante obtiendra la valeur suivante. Si le diviseur est 2, alors les deux premières instances auront la même valeur, mais les deux suivantes auront une valeur différente. Etc. Sauf si vous faites quelque chose de très spécial avec l'instanciation, votre diviseur doit être 0 ou 1. Il ne doit jamais être basé sur le nombre de vertex.

+0

avec 320 triangles et je peux combiner beaucoup de modèles différents dans le même VAO, la bonne chose que je vois est que je peux gérer vertex, normal, couleur de ces modèles, ce qui signifie avec beaucoup d'instances que je peux atteindre une scène dynamique complexe plusieurs appel de tirage et faible frais généraux de transfert de données à GPU. – Manh

+0

@Manh: Je ne peux pas déchiffrer ce que vous dites. On dirait que vous affichez plusieurs modèles * différents * à l'aide d'un seul appel de dessin instancié, plutôt que le même modèle à différents endroits. Mais c'est * impossible *. Donc, soit vous n'expliquez pas correctement ce que vous faites, soit vous ne faites pas ce que vous pensez faire. –

+0

Je l'ai rendu possible. ce que je fais est de voir le modèle avec 80 triangles est le même que les modèles avec 100 ou 120 triangles ... – Manh