2010-06-12 4 views
3

Je bricole avec un projet open source qui utilise OpenGL pour le rendu en 3D. Dans la construction des matériaux que je vois le code comme ceci:OpenGL - GL_FRONT par rapport à GL_FRONT_AND_BACK

// set ambient material reflectance 
glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, mAmbient); 

Dans d'autres exemples, il est utilisé:

glMaterialfv(GL_FRONT, GL_AMBIENT, mAmbient); 

Donc ma question est, quelle est la différence ici? Dans quelles circonstances cela serait-il différent et, si mon volume est entouré de toutes les normales pointant vers l'extérieur, y a-t-il une différence de performance?

Répondre

7

On définit le matériau pour les faces avant et arrière, l'autre, uniquement les faces avant. Si vous rabattez des visages, ça ne va pas vraiment avoir d'importance. Si vous ne cueillez pas les visages, vous verrez le matériel sur la face avant seulement.

Si vous masquez un volume, vous ne verrez probablement pas directement les faces arrière - la seule façon de procéder serait si la caméra était à l'intérieur du volume. Si c'est à l'extérieur, vous ne verrez jamais les visages arrière, et il est inutile de les rendre. (C'est pourquoi dans de nombreux jeux, si vous forcez l'appareil photo dans un objet, il semblera que tous les polygones sont à 1 face: c'est la face arrière) OpenGL a juste la possibilité de définir différentes propriétés pour les faces avant et arrière d'un triangle/quad/etc

+0

Ok est logique. Sur le point de performance, est-ce que l'abattage en arrière utilise moins de ressources/améliore la performance? Et si le "culling" est déjà activé (je pense que c'est le cas, mais que je dois trouver ce bit du code), est-ce que ça change si je spécifie "GL_FRONT_AND_BACK" ou juste "GL_FRONT"? –

+0

Du point de vue du rendu final, non - si les faces arrières sont éliminées (et donc ne dessinent pas), peu importe le matériau qui leur est appliqué. Il peut cependant être plus rapide de n'appeler que GL_FRONT, car OGL n'aurait alors qu'à changer la partie de son état liée aux faces avant, et non les faces arrière. – Thanatos

+2

Du point de vue des performances, vous devez ignorer complètement glMaterialfv. Il provient de l'ancien pipeline de fonctions fixes et est maintenant obsolète. Regardez à l'aide de shaders à la place. –

Questions connexes