2010-11-20 17 views
7

OpenGLのジオメトリシェーダを使用したレイヤードレンダリングは、一部のドライバ/ハードウェアで少しばかげているようですので、私は自分のソリューションで機能を置き換えたいと思います。これはレンダリングターゲットとして大きなテクスチャを使用して、たとえば解像度が300²の場合です。その後、テクスチャ内の1002チャンクにレンダリングすることによって、レイヤードレンダリングをシミュレートします。以下モックアップに示すように解像度では9タイル/層をもたらすであろう:テクスチャの一部にレンダリングする

Tiles

の問題です。どのようにOpenGLでこれに?おそらくシーンを1回のパスで異なるタイルにレンダリングするジオメトリシェーダの助けを借りています。

答えて

2

簡単な方法はありません。ジオメトリシェーダを使って一緒にハックすることはできますが、多くのジオメトリインスタンスを実行してから頂点シェーダにジオメトリシェーダを使用する必要があるため、おそらく遅くなります。なぜなら、頂点シェーダはゲームから外れているからです。

問題への基本的な考え方:それぞれのオン

  • 残す頂点シェーダ空とちょうどジオメトリシェーダで
  • 変わらない頂点がすべての三角形の8の新しいインスタンスを作成して返します(一緒にあなたが9つの三角形を持つことになります)
  • 三角形は三角形を投影する関数を実行します。あなたのスクリーンショットによれば、ジオメトリシェーダに送られるべき9種類のビューマトリックスが必要です。
  • ここで、それぞれが画像の異なる部分をレンダリングするように、三角形を配置します。投影後、座標は[-1; 1]であるため、各三角形の座標を3で割って、対応する三角形を1/3の倍数だけシフトする必要があります。
  • ピクセルごとにフォンシェーディングを計算する場合は、フラグメントシェーダが分割されているスクリーンについての手がかりがなく、カメラの位置が9種類あるため、カメラの位置を各頂点のフラグメントシェーダに送信する必要があります。
  • +0

    お返事ありがとうございます。おそらく、私はGPUメーカーが一緒にドライバー(ATI)を手に入れるのを待つだけです。だから彼らはレイヤーを 'texture2Darray'にレンダリングするのをサポートしています。 –

    +0

    はい、間違いなく。質問は、ATIがドライバーを正しく動かせるかどうかです... –

    関連する問題