ピクセル バッファを画面に直接レンダリングする方法を探しています。OSX と Linux の両方でそれを行う方法が必要ですが、おそらく OS ごとに異なる方法で行う必要があることはわかっています (ただし、クロスプラットフォーム ライブラリがあればよいでしょう)。どこから始めますか?
1 に答える
バックバッファ/サーフェスへのクワッドの正投影をいつでも使用できます。
または、行列の乗算を必要とせずに、NDC 空間 (-1 から +1) でクワッドを送信するだけです。
これは明らかに十分に明確ではないため、更新してください。
「フルスクリーン クワッド」アプローチの場合、次のように 2 つのトライまたは 1 つのクワッドを送信します。
頂点の構成/順序は、巻く順序とプリミティブ モードに依存します。Z
値は ~ の間である必要があり-1
ます1
。選択するだけ-1
です。プロジェクションと ModelView マトリックスは単位マトリックスである必要があります (つまり、すべてゼロで、主対角線が 1 になります)。
言い換えれば、座標が既に正規化されたデバイス座標 (NDC) にあるため、行列の乗算を行う必要がないため、実際にはシェーダーで行列演算を行う必要はありません。
つまり、すでにターゲット デバイスの間隔内にあります。
ここにいくつかのコードがあります:
glMatrixMode (GL_MODELVIEW);
glPushMatrix ();
glLoadIdentity ();
glMatrixMode (GL_PROJECTION);
glPushMatrix ();
glLoadIdentity ();
glBegin (GL_QUADS);
glVertex3i (-1, -1, -1);
glVertex3i (1, -1, -1);
glVertex3i (1, 1, -1);
glVertex3i (-1, 1, -1);
glEnd ();
glPopMatrix ();
glMatrixMode (GL_MODELVIEW);
glPopMatrix ();
頂点シェーダーは、ピクセル/フラグメント シェーダーへの直接のパススルーにすぎません。明らかに、関連するピクセル/テクスチャ バッファーをシェーダー リソース/変数として設定し、ピクセル/フラグメント シェーダーでサンプリングします。また、頂点の texcoord UV を対応するテクスチャ値に設定することを忘れないでください ( 0-1
)。
または、対応するウィンドウ システムを使用して、テクスチャをウィンドウ サーフェスに直接ブリットすることもできます。これは、ウィンドウ管理に使用しているもの (SDL など) に大きく依存し、機能するために特定のテクスチャ フォーマット/レイアウト (または変換) が必要になる場合もあります。