Comment Puis-Je Créer Des Ombres À Bas Prix En OpenGL?
J'ai deux modèles, A et B, et une lumière, L. je voudrais Un modèle de jeter une ombre sur le modèle B. je ne veux pas les embêter avec des volumes d'ombre ou d'un bon d'ombres pour le moment, juste un simple cercle d'ombre suffira. L'effet est que modèle est traitée comme une sphère pour la projection des ombres fins.
Ici est la façon dont je conçois l'algorithme:
Pour chaque triangle dans le modèle B, tracer le triangle. Projet un cercle sur le triangle le long de la ligne à partir de L à, l'augmentation de la taille du cercle en fonction de la distance de la triangle. Assurer le cercle est coupé pour le triangle des frontières (à l'aide du pochoir, tampon, d'une certaine façon, j'imagine).
Je travaille avec OpenGL et de la plaine C.
Tous les pointeurs sur certains documents de référence, je peux lire? Ou de mise en oeuvre des idées?
OriginalL'auteur Martin | 2009-07-11
Vous devez vous connecter pour publier un commentaire.
Je pense qu'il est effectivement plus facile à mettre en œuvre correcte des ombres, car OpenGL peut faire le travail pour vous.
J'ai trouvé un travail de l'ombre code avec beaucoup de documentation ici: http://www.opengl.org/resources/code/samples/mjktips/TexShadowReflectLight.html
Le code ci-dessus rend l'objet à deux reprises: d'abord normalement, puis avec une matrice spéciale. Il fait beaucoup de choses sans rapport entre elles, tels que le contrôle de la souris et de réflexions. Voici donc les parties intéressantes.
Ce calcule l'ombre de la matrice:
Je ne prétends pas comprendre ce complètement. lightpos est la position de la source de lumière. Les 3 premières coordonnées de groundplane sont le vecteur normal de la surface du sol. Le quatrième est le décalage (dans quelle mesure est-il de 0,0,0).
Et cette partie fait rend l'ombre:
Il y a certaines choses que vous devez glEnable/glDisable première pour regarder le lien.
Celui-ci peut soi-disant faire: nehe.gamedev.net/data/lessons/lesson.asp?lesson=27 Malheureusement je ne peux pas le compiler avec gcc.
Cette méthode semble bonne, mais le coût de dessiner le modèle de source une fois pour toutes les faces B semble élevé. Est-il un moyen de réduire la complexité de cette méthode?
J'ai décidé (pour le moment) pour cette méthode, réitéré une fois pour chaque triangle du modèle B, il semble fonctionner, mais la vitesse laisse à désirer. Merci!!!!
Voici un lien de travail pour au moins le code complet: cs.uiuc.edu/class/sp05/cs419/accum/softshadow.c
OriginalL'auteur stribika
Ce document semble couvrir vos besoins, à l'aide d'OpenGL et de l'accélération matérielle pour créer un shadow map.
Si je tente d'accomplir cela, je serais tenté d'utiliser des rayons coulée. Pour chaque triangle en B, de créer un vecteur à partir du triangle de la lumière. Si elle frappe tout le long de la voie, il est dans l'ombre. Ce serait une sorte de lent, à moins que vous utilisiez un décent de l'accélération de la structure et rapide triangle test de collision. J'aime délimitation du volume des hiérarchies; de nombreux programmes de les utiliser pour la détection de collision.
OriginalL'auteur R Ubben