2009-02-27 14 views
5

Sto cercando una tecnica alternativa per il rendering dei riflessi in OpenGL ES su iPhone. Solitamente lo farei usando il buffer degli stencil per contrassegnare dove può essere visto il riflesso (la superficie riflettente) e quindi rendere l'immagine invertita solo in quei pixel. Quindi, quando l'oggetto riflesso si sposta dalla superficie, il suo riflesso non viene più visto. Tuttavia, poiché l'implementazione dell'iPhone non supporta il buffer degli stencil, non è possibile determinare come nascondere le parti del riflesso che cadono al di fuori della superficie.Come posso eseguire il rendering dei riflessi in OpenGL ES su iPhone senza un buffer stencil?

Per chiarire, il problema non è rendere i riflessi stessi, ma nasconderli quando non sarebbero visibili.

Qualche idea?

risposta

9

Renderizza per prima la scena riflessa; copiare su una trama usando glCopyTexImage2D; cancella il framebuffer; disegnare la scena corretta, applicando la trama copiata alla superficie riflettente.

2

Non ho una risposta per le riflessioni, ma ecco come sto facendo le ombre, senza lo stencil buffer, forse vi darà un'idea:

Eseguo back-face determinazione base front-face/della maglia dal punto di vista della sorgente luminosa. Poi ottengo una lista di tutti i bordi che collegano un triangolo frontale a un triangolo posteriore. Tratto questa lista di spigoli come una linea "loop". Proietto i vertici di questo anello lungo il raggio di luce dell'oggetto fino a quando interseca il terreno. Questi punti di intersezione vengono quindi utilizzati per calcolare un poligono 2D sullo stesso piano del terreno. Quindi utilizzo un algoritmo di tessellazione per trasformare quel poligono in triangoli. (Funziona bene finché le sorgenti luminose o gli oggetti non si muovono troppo spesso.)

Una volta ottenuti i triangoli, li renderò con un leggero spostamento in modo che il buffer di profondità consenta all'ombra di passare. In alternativa è possibile utilizzare un decaling algorithm such as the one in the Red Book.

Problemi correlati