2

ピクセル バッファを画面に直接レンダリングする方法を探しています。OSX と Linux の両方でそれを行う方法が必要ですが、おそらく OS ごとに異なる方法で行う必要があることはわかっています (ただし、クロスプラットフォーム ライブラリがあればよいでしょう)。どこから始めますか?

4

1 に答える 1

5

バックバッファ/サーフェスへのクワッドの正投影をいつでも使用できます。

または、行列の乗算を必要とせずに、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 など) に大きく依存し、機能するために特定のテクスチャ フォーマット/レイアウト (または変換) が必要になる場合もあります。

于 2012-07-16T02:57:33.837 に答える