2010-09-27 5 views
5

Je suis nouveau à OpenGL. Je l'utilise avec JOGL.Confus au sujet de l'élimination de Frustum

Je lis à propos de culling frustum:

http://www.lighthouse3d.com/opengl/viewfrustum/

http://www.crownandcutlass.com/features/technicaldetails/frustum.html

Je ne sais pas exactement ce qu'il est censé faire. OpenGL ne supprime-t-il pas automatiquement les objets hors écran? (Ce retrait est-il beaucoup plus lent que de ne pas envoyer les objets en premier lieu?)

D'après ce que je lis, il ne semble pas que cela vous évitera de dessiner des objets qui sont cachés derrière un autre mais qui sont dans le Regarder le tronc. Cela signifie-t-il que le seul avantage est d'éviter d'envoyer des objets hors écran à OpenGL?

+0

Deuxième lien enregistrer ma journée, merci! :-) –

Répondre

1

Lorsque vous faites des vérifications frustales dans le code, vous le faites en utilisant une géométrie simple qui entoure l'objet en cours de dessin. Cela peut être fait beaucoup plus rapidement que la carte essayant d'éliminer chaque triangle.

4

Oui, vous avez fondamentalement raison. L'effacement de Frustum coupe les objets qui sont en dehors de la pyramide de la caméra. OpenGL, lors du rendu d'une scène, fait bien sûr cela aussi mais sur une base par vertex. Le cueillage de Frustum fonctionne par objet et son potentiel d'amélioration des performances est donc beaucoup plus élevé.
L'un des goulots d'étranglement est le transfert des données entre le processeur et le GPU. Si vous avez besoin de transférer par exemple seulement 1/4 de tous les objets/sommets dans une scène en plein air, l'effacement des troncs peut donner un bon coup de boost.

3

L'objet le plus rapide est celui que vous n'avez pas à dessiner du tout.

En général, pour les objets qui ne sont pas déjà simples, vous allez fournir un volume de délimitation simplifié et conservateur. De cette manière, vous pouvez effectuer une suppression tronconique sans traiter chaque triangle d'un objet complexe.

Éviter les objets dessinés qui sont cachés les uns derrière les autres est appelé suppression d'occlusion. L'élimination des occlusions est généralement plus complexe que l'abattage des troncs; Notez cependant qu'il peut toujours utiliser le même volume de délimitation simplifié.

3

Oui - trituration juste supprime les objets qui se trouvent entièrement à l'extérieur du tronc de visionnage. Rien de plus ou de moins. Oui, vous pouvez potentiellement améliorer les performances par rapport à OpenGL lui-même, en particulier si vous pouvez réduire un plus grand nombre d'éléments en même temps (par exemple, une bibliothèque de vues peut rapidement couper des branches entières du graphique).

est également également face abattage qui supprime les triangles (ou quoi que ce soit) qui sont opposés à la visionneuse, mais c'est séparé de l'abattage de tronc.

Il existe plusieurs façons de gérer les objets qui sont masqués par d'autres objets. L'élimination d'occlusion est la plus simple, mais OpenGL ne fait rien pour la supporter directement (bien que certains matériels le font en tant qu'extension). L'autre est le buffer de profondeur - que OpenGL supporte directement. La différence est que l'élimination d'occlusion regarde un objet entier, et ne le rend pas du tout si elle est complètement obscurcie. Le tampon de profondeur fonctionne fragment par fragment, de sorte qu'il n'a lieu qu'après avoir rendu (presque) entièrement un objet. En fonction du nombre d'objets que vous traitez (et ainsi de suite), faire votre propre sélection d'occlusion peut donc être une grosse victoire (car cela évite d'avoir à faire beaucoup de rendu avant que le buffer de profondeur puisse faire sa chose).

Questions connexes