Ombres volumétriques d'objets 3d en utilisant le stencil (c++ / opengl / win32)

Description

Toujours dans la série OpenGL à donf, la 3D j'adore ça :-))

Ce programme est un évolution du "précédent" : http://www.cppfrance.com/code.aspx?id=28920

Cette fois on va plus loin dans l'utilisation du stencil buffer alors j'espère que vous avez compris son fonctionnement, on applique ici une méthode de calcule d'ombre dite volumétrique, on calcule la silhouette des objets par rapport à la position de la lumière et on crée un volume d'ombre à partir de cette silhouette en étirant les arretes de celle ci dans la direction lumière->objet
C'est pas simple mais pas si compliqué que cela, c'est des maths/géométrie vectorielle

L'avantage par rapport à l'autre méthode c'est que l'ombre est "réelle" et se projette sur les autres objets 3D, le premier jeu à utiliser cette technique est doom3, bien sûr elle y est optimisée et + évoluée et elle utilise les shaders (calculs 3D en interne à la carte graphique) lorsque cela est possible mais là vous avez les base et vous êtes libre de vous en inspirer

A noter la contrainte pour obtenir une ombre qui ne buggue pas : les objets 3D doivent être des volumes parfaits...
c'est à dire qu'un objet est composé exclusivement de triangles (3côtés), que chaque triangle doit être raccordé à 3 autres triangles (ses voisins), pas plus et pas moins, donc l'objet doit avoir en toute circonstance un intérieur et un extérieur, comme un volume
j'espère que je me fait comprendre

pour d'autres explications sur la technique et d'autres possibilités approfondies vous pouvez aller voir un document pdf (1,2 mo) qui explique cela relativement bien : http://developer.nvidia.com/attach/6774

j'ai essayé de commenter les parties importantes autant que possible en fonction du peu de tems libre que j'ai en ce moment
alors bon courage quand même ^__^

Conclusion :


Il est possible d'optimiser énormément le code, il doit y avoir quelques bugs, si vous en voyez et que vous avez la solution n'hésitez pas à en faire part, je ferai une mise à jour dès que j'en aurai le temps

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.