2009-06-05 5 views
2

Lorsque j'allume mon modèle humain dans OpenGL en utilisant des normales de faces, il est très apparent où chaque face est sur le modèle. L'éclairage devient considérablement plus lisse en utilisant les normales vertex mais toujours perceptible. Existe-t-il une technique disponible pour lisser les modèles organiques sans ajouter de sommets supplémentaires (ex: subdivisions)?Techniques pour lisser les arêtes de face dans OpenGL

Répondre

6

Si vous voyez un seul visage avec par Normales de sommets que vous pourriez avoir oublié de permettre Parement lisse:

glShadeModel(GL_SMOOTH); 

Si cela n'aide assurez-vous que tous les sommets avec la même position ont également la même normale. Cela devrait être fait automatiquement par blender. Il est également possible que votre modèle comporte trop peu de polygones. Si c'est le cas, vous devez utiliser plus de polygones ou faire ce que dit Basszero. Create a normal map et l'utiliser avec un shader GLSL.

4

Si vous avez accès à un modèle de résolution supérieure/maillage ou peut-être un 3d modeling tool décent qui peut créer un modèle highres par subdivisions ou d'autres méthodes de fantaisie ...

GLSLper-pixel-lighting + normal maps

MISE À JOUR :

http://www.blender.org/development/release-logs/blender-246/render-baking/

+0

J'utilise Blender. Je garde mon modèle low-poly pour des raisons de performance. L'ombrage de Phong semble prometteur mais n'est pas supporté par OpenGL et l'avantage ne justifierait pas le coup de performance. – Kai

+0

S'il ne s'agit pas d'une question OpenGL ES 1.1 (par exemple iPhone), votre matériel prend probablement en charge les shaders et vous pouvez écrire un shader qui implémente le mappage phong shading + normal. –

+0

À droite, vous créez un modèle highres dans Blender et l'utilisez pour générer une carte normale. Créez une version basse résolution et utilisez les mappages map + normaux pour créer le détail de sommet manquant dans le rendu final. – basszero

1

Oui il y a beaucoup de techniques différentes. On doit d'abord calculer une normale pour chaque face (que vous utilisez probablement pour les sommets dans le visage) et utiliser ces normales pour calculer de nouvelles normales pour chaque sommet.

Voici one où vous calculez la moyenne de cinq triangles adjacents.

À la votre!

Questions connexes