2011-10-27 5 views
1

私はOpenGLシーングラフを取り、結果をレンダリングするのにQGLFrameBufferObjectを使用するクラスを作成しています。 (事実上)無限のサイズをサポートするために、私はタイリングを使用して、多くの小さな画像を抽出し、すべてのタイルをレンダリングした後に大きな画像に結合することができます。GL_MAX_VIEWPORT_DIMSより大きいビューポートのタイルレンダリング

画像全体に対してビューポート(glViewport)を設定してから、タイルの後にタイルを「切り取る」ためにglScissorを使用してタイリングします。これは、解像度が最大でGL_MAX_VIEWPORT_DIMSになりますが、この制限を超えて空のタイルが表示されます。

どのようにこの問題にアプローチする必要がありますか?これを行うには、カメラを変更する必要がありますか、それともすてきなトリックですか?私はCoin/OpenInventorを使用していますので、これらのフレームワークに特有のヒントは非常に歓迎します。

答えて

1

カメラを変更することは、考えられるほど困難ではなく、頂点シェーダの変更以外にも、私が見ることができる唯一の解決策です。

投影行列をx軸とy軸に沿ってスケーリングして平行移動することで、通常のカメラのビューの任意の部分領域を簡単に取得できます。

フルビューポートが(-1、-1)および(1,1)であるビューポートの指定された最大値と最小値、(max + min)/ 2で変換し、 )/ 2

+0

[SbViewVolume :: narrow](http://doc.coin3d.org/Coin/classSbViewVolume.html#a10f0ca68486f3dc6fa9253e705573d5a)を使用してレンダリングされた「ウィンドウ」を絞り込み、ビューボリュームを調整しました。 – larsmoa

0

ワールド全体を縮小することができます。間接的に、ビューポートの最大アカウントをより詳細にすることができます。または、基本的には、画像とビューポートを縮小して同じ視覚効果を持たせることができます。

+0

これは、GL_MAX_VIEWPORT_DIMSより大きいイメージを生成することはできませんが、これは必須です。 – larsmoa

+0

それはどれくらい大きくてもかまいません。これは、VISUALエフェクト専用の特定のポイントまで機能します。 – Sean

関連する問題