2010-11-21 23 views
6

Permettez-moi d'avoir un maillage (par exemple sphère) dans le centre de la pièce, plein de cubes et une source de lumière. Comment puis-je faire rapide et facile ombre-casting dans OpenGL, en utilisant "standard" (fixe) seulement des fonctions? Remarque: le résultat doit également contenir des ombres de cube et de sphère.Comment créer rapidement et facilement des ombres indépendantes de la scène sans shaders dans OpenGL

+1

BTW- "fonctions standard" ne sont pas vraiment l'expression que vous recherchez. "Fonction fixe" ressemble plus à ça, mais les shaders sont ce qui est "standard" depuis quelques années maintenant. – Kos

+0

Oui, je pensais comment appeler cela quand j'ai composé ma question. C'est réparé maintenant, merci! =) – shybovycha

Répondre

4

Si vous pouvez générer une silhouette de la sphère, vous pouvez utiliser shadow volumes. Le matériel nVidia a également pris en charge la fonction fixe shadow mapping pour un temps tout aussi bien.

Les volumes d'ombre présentent l'inconvénient d'avoir des exigences de taux de remplissage très élevées. Les cartes d'ombre peuvent être meilleures mais nécessitent une passe supplémentaire.

Si vous projetez sur un seul plan, il peut être plus facile de simplement project the object on to a plane.

+0

Le point est d'utiliser l'algorithme universel - pas seulement pour la silhouette sphère =) Mais merci quand même! =) – shybovycha

+0

Désolé, je n'ai pas cliqué un peu sur le deuxième lien ... Ouais, tu avais raison, le mapping des ombres est assez bon et je l'ai découvert par moi même (stupide) =) – shybovycha

+0

@shybovycha: Juste pour que tu le saches. AUCUNE des techniques énumérées ci-dessus sont pour des sphères seulement;) – Goz

2

Il n'y a pas de manière rapide et facile. Il y a beaucoup de techniques différentes, qui ont chacune leurs propres avantages et inconvénients. Vous pouvez regarder un projet que j'héberge sur github, qui utilise un code très simple pour créer une ombre, en utilisant la technique du volume d'ombre (http://iuiz.github.com/VolumeShadow/). Cependant, il est écrit en Java, mais il ne devrait pas être difficile de le porter dans un autre langage. Les méthodes les plus importantes pour créer des ombres sont la méthode dite de «projection d'ombre», dans laquelle vous rendez votre scène (avec la caméra à la source lumineuse, dirigée vers chaque objet d'ombre) vers une texture. Et la seconde technique est la méthode de l'ombre voulume (rendue célèbre avec Doom3).

+0

Merci, mais j'ai déjà eu l'idée =) ombres projectives être assez =) – shybovycha

1

J'ai trouvé un moyen d'utiliser StencilBuffers. Étant un peu confus pendant un moment, j'ai finalement eu l'idée - avec ceci, la chose la plus difficile serait de boucler chaque source de lumière et de projeter tous les objets de la scène. Celui-ci semble plus joli que l'ombrage de la texture et fonctionne plus vite que les ombres volumiques. here et here sont quelques ressources, ce qui m'a aidé à comprendre l'étape de multiplication de la matrice (cela m'a un peu troublé quand je regardais Dino Demo). Pour ma part, cette méthode est la plus facile à comprendre et à utiliser. La seule question à résoudre est de savoir comment calculer la matrice de multiplication.

Bien que cette méthode puisse être modifiée un peu en utilisant les textures as shown here.

Merci à tous! =)