Frustum Culling with VBOs

8

J'ai du terrain en cours de rendu dans mon projet à l'aide de VBO dans OpenGL. Je voudrais appliquer un tri sélectif mais je ne sais pas comment accéder à chaque polygone tel qu'il est dessiné pour vérifier s'il est en vue. Je pense que c'est là que les octrees entrent en jeu, mais je n'ai aucune idée de comment cela se fait vraiment. Est-ce que quelqu'un connaît un bon tutoriel sur la façon de faire cette chose spécifique ou a un pseudocode pour moi?

Merci d'avance!

Krankzinnig
la source

Réponses:

3

Plus d'informations sur la façon dont vous stockez les données de terrain seraient utiles ici. Stockez-vous des morceaux? Reconstruisez-vous constamment les VBO? Est-ce que tout le terrain est dans un VBO et que vous en restituez des morceaux à la fois?

Essayer d'éliminer par polygone va probablement introduire plus de frais généraux qu'il n'en économise. Le plus grand morceau de terrain que vous pouvez tester à la fois, plus l'abattage sera rapide, avec le compromis évident de la précision. En fin de compte, vous devrez effectuer un profilage pour déterminer le point optimal de ce compromis, donc la création d'un système qui vous permettra de changer dynamiquement la façon dont votre terrain est divisé sera très utile.

Jason Morales
la source
1

Un GPU peut déjà supprimer les polygones sur une base par polygone, mais cela se produit au moment de la tramage / configuration qui se produit après l' ombrage des sommets (en utilisant les shaders Vertex / Geometry / Hull / Domain). Cela signifie que le GPU peut toujours finir par ombrer les sommets des polygones qui finiront par être éliminés. Si cela se produit, le GPU aura fait beaucoup de travail pour rien et sera donc un gaspillage de cycles GPU.

Pour cette raison, nous essayons de ne pas gaspiller les cycles GPU en éliminant la géométrie invisible côté CPU (ou côté GPU en utilisant les fonctionnalités DX10 + telles que DrawIndirect et / ou le rendu prédicat) dans des lots de polygones en n'appelant simplement pas draw pour ces lots.

Généralement, ce lot de polygones peut être représenté par une sphère ou une boîte qui entoure tous ces polygones. Cette sphère / boîte englobante est ensuite testée contre le tronc et si elle touche le tronc, l'appel de dessin est invoqué pour ces polygones. Sinon, l'appel de tirage est ignoré. Un octree est simplement une autre façon de déterminer quels lots de géométrie sont visibles, sauf qu'il organise ces données de manière hiérarchique. Les octrees ne conviennent pas nécessairement à toutes les géométries.

Voici quelques références assez bonnes qui expliquent la technique sphère / tronc:

jpaver
la source