1

OpenSceneGraph を使用してマルチパス レンダリング メソッドを実装しようとしています。ただし、私の問題が理論的なものなのか、OSG の応用知識が不足しているためなのか、完全にはわかりません。これまでのところ、正射影を使用してテクスチャにレンダリングすることでマルチパス シェーディングをうまく実装できましたが、透視投影を機能させることはできないようです。

マルチパス シェーディングの実装方法がよくわかっていない可能性があります。もちろん、マルチパス シェーダーを使用してシーン全体をテクスチャにプリレンダリングしてから、最終レンダリングでそのテクスチャを使用する必要があります。ただし、シーン内のオブジェクトごとに個別のテクスチャを作成することについて話しているのではなく、事前にレンダリングされたシーン全体のスクリーンショットを効果的にキャプチャすることについて話しているのではありません。次に、そのテクスチャだけから、レンダリングされた効果を個々のジオメトリに適用します。

これは、頂点シェーダーのジオメトリごとに頂点座標の追加の変換を行う必要があることを意味すると思います。つまり、計算後:

gl_Position = ModelViewProjectionMatrix * Vertex;

頂点を正しくマッピングするには、さらに一歩進んで頂点のスクリーン座標を計算する必要があります (テクスチャがシーンのスクリーン ショット全体で構成されている場合)。

私が正しければ、直交ビューではなく、最終レンダリングで使用されるビューと同じパース ビューでシーンを事前レンダリングできるはずです。これは私が問題を抱えているところです。直交ビューを希望どおりに作成できますが、透視ビューは作成できません。

私のアプローチは正しいですか?私が想像できる唯一の他のアプローチは、すべてを画面いっぱいのクワッドにレンダリングすることです(実際には、画面座標に変換するのと同じことです)が、それはプリレンダリング段階で透視投影を使用する必要性を軽減しません.

考え?リンク??

編集:成功した試みでは、フラグメントシェーダーのみを使用したことも指摘する必要があります。透視投影は機能しましたが、もちろん、私が使用していた画面に合わせたクワッドは、中央ではなくオフセットされていました。パススルー頂点シェーダーを追加したところ、すべてが空白になりました。

4

1 に答える 1

1

結局のところ、私のアプローチは正しかったのです。最終的な出力をレンダリングするために別のカメラをシーン グラフに追加する必要がないので、特に便利です。メイン カメラをそのまま使用できます。残念ながら、出力テクスチャはすべて、オブジェクトのサイズに適した解像度ではなく、画面解像度でレンダリングされることを意味します。つまり、画面が 1024 x 1024 の場合、出力テクスチャも同様で、グラフ内のプリレンダリング カメラごとに 1 つです。正確には効率的ではありませんが、今のところは十分です。

于 2012-06-04T01:20:17.627 に答える