2009-02-27 8 views
5

私はiPhone上のOpenGL ESで反射をレンダリングするための代替技術を探しています。通常、私はステンシルバッファを使用して、反射が見える場所(反射面)をマークし、反転した画像をそのピクセルだけでレンダリングします。したがって、反射された物体が表面から離れて移動するとき、その反射はもはや見られない。しかし、iPhoneの実装はステンシルバッファをサポートしていないので、サーフェスの外側にある反射の部分を隠す方法を決定することはできません。ステンシルバッファなしでiPhone上のOpenGL ESで反射をどのようにレンダリングできますか?

明確にするために、問題は反射そのものをレンダリングするのではなく、見えないときにそれらを隠すことです。

アイデア?

答えて

9

最初に反射したシーンをレンダリングします。 glCopyTexImage2Dを使用してテクスチャにコピーします。フレームバッファをクリアします。シーンを適切に描画し、コピーしたテクスチャを反射面に適用します。

2

私は反射のための答えを持っていますが、ここで私はステンシルバッファなしで影をやっている方法です、多分それはあなたのアイデアを与えるだろうしません。

私は基本的な前面/背面決意を行います光源の視点から見たメッシュの大きさ。その後、前三角と後三角を結ぶすべての辺のリストを取得します。私はこのエッジリストを線 "ループ"として扱います。このループの頂点をオブジェクトの光線に沿って地面と交差するまで投影します。これらの交点は、地面と同じ平面上の2次元ポリゴンを計算するために使用されます。次に、そのポリゴンを三角形に変換するための切り出しアルゴリズムを使用します。 (これは、光源やオブジェクトがあまり頻繁に動かない限り、うまく動作します)

三角形を作成したら、奥行きバッファでシャドーを通過させるようなわずかなオフセットで描画します。代わりにdecaling algorithm such as the one in the Red Bookを使用することもできます。

関連する問題