2009-02-27 4 views
5

Je suis à la recherche d'une technique alternative pour rendre les réflexions dans OpenGL ES sur iPhone. Habituellement, je le ferais en utilisant le tampon stencil pour marquer où la réflexion peut être vu (la surface réfléchissante) et ensuite rendre l'image inversée seulement dans ces pixels. Ainsi, lorsque l'objet réfléchi quitte la surface, sa réflexion n'est plus visible. Cependant, étant donné que l'implémentation de l'iPhone ne supporte pas le tampon du stencil, je ne peux pas déterminer comment cacher les parties de la réflexion qui tombent à l'extérieur de la surface.Comment puis-je rendre des réflexions dans OpenGL ES sur l'iPhone sans tampon stencil?

Pour clarifier, le problème n'est pas de rendre les reflets eux-mêmes, mais de les cacher quand ils ne seraient pas visibles.

Des idées?

Répondre

9

Rendu de la scène réfléchie en premier; copier vers une texture en utilisant glCopyTexImage2D; efface le framebuffer; dessinez la scène proprement dite en appliquant la texture copiée sur la surface réfléchissante.

2

Je n'ai pas de réponse pour des réflexions, mais voici comment je fais des ombres sans le tampon de pochoir, peut-être vous donner une idée:

je joue de base avant-face/arrière face détermination du maillage du point de vue de la source lumineuse. Je reçois alors une liste de tous les bords qui relient un triangle avant à un triangle arrière. Je traite cette liste de bord comme une ligne "loop". Je projette les sommets de cette boucle le long du rayon de l'objet-lumière jusqu'à ce qu'il coupe le sol. Ces points d'intersection sont ensuite utilisés pour calculer un polygone 2D sur le même plan que le sol. J'utilise ensuite un algorithme de tesselation pour transformer ce poly en triangles. (Cela fonctionne très bien tant que vos sources lumineuses ou objets ne bougent pas trop souvent.)

Une fois que j'ai les triangles, je les rends avec un léger décalage de sorte que le tampon de profondeur permette à l'ombre de passer. Vous pouvez également utiliser un decaling algorithm such as the one in the Red Book.

Questions connexes