Google で OpenGL プログラミングについて検索するたびに記事を見つけましたが、すべてシェーダーとバッファーについて言及しているようです。それらは何ですか?それらのいくつかを説明できますか:
- 深度バッファ
- ステンシル バッファー
- ピクセル シェーダー
- フレームバッファ
- ...?
それらのいくつかについて聞いたが、完全なリストを見つけることができなかった. OpenGL のシェーダーとは何ですか? バッファーとは何ですか? それらを使用しているときに誰かが例を提供できますか?
カラー バッファは、指定されたメモリ レイアウトを持つ内部メモリの一部ですが、それ以外の場合は画像を表す多かれ少なかれ不透明です。画像内の各ピクセルの色に関する情報を保持します。カラーバッファに描画/レンダリングします。最近のハードウェアの OpenGL の最近のバージョンでは、複数のカラー バッファが存在する可能性があり、これを使用して、いくつかの特別なレンダリング テクニックをより効率的にすることができます。
深度およびステンシル バッファーは、色ではなく深度およびステンシル情報を (名前が示すように) 保持することを除いて、カラー バッファーと同じです。深度とステンシルは、多くの場合、1 つのバッファーに結合されますが (そうである必要はありません)、一度に複数の深度/ステンシル バッファーを持つことはできません。
深度バッファは通常、特定の順序で複数のオブジェクトをレンダリングするときにオーバードローイングのあいまいさを解決するために使用されます。「あなたの目」に最も近い断片だけが生き残ります。ステンシル バッファーは、バッファーの領域をマスクするなど、特殊な効果に使用できます。
フレームバッファは、カラーバッファをアタッチして描画/レンダリングするもので、オプションで画面に表示されます。少なくとも 1 つのフレーム バッファが常に存在し、これが画面に表示されますが、いくつでも存在する可能性があります。これは、バージョン 3.0 以降のコア機能であるフレームバッファ拡張によって管理されます。フレームバッファには、通常、「フロント」バッファと「バック」バッファも別々にあります。もう一方にレンダリングしている間、一方が表示されます。適切なタイミングでバッファーが反転されるため、ちらつきは見られません。
シェーダーは、最も一般的には、適切に定義されたデータに対して適切に定義された時間にパイプライン内で OpenGL がユーザーに代わって実行し、目的の効果を生成する「プログラム」です。ほとんどの場合、グラフィックス カードで実行されますが、部分的または完全に CPU で実行されることもあります。
歴史的に利用可能な最初のシェーダーであるピクセル シェーダー (およびネームギバー) は、フラグメントごとに 1 回実行されます。いくつかの定義された入力 (ライトの位置、法線など) を受け取り、単一の出力を生成します。この出力は後で深度テストを通過し、最終的にカラー バッファーに書き込まれるか、カラー バッファーとブレンドされます。
頂点、ジオメトリ、またはテッセレーション シェーダーは、実際には何も「シェーディング」しません (頂点とプリミティブを変換および/または生成し、後でフラグメントに変換します)、名前を継承します。
グーグルで入力するopengl shaders
と、実際にシェーダーの答えが得られます。
最初の検索結果: http://en.wikipedia.org/wiki/GLSL
各シェーダーのより直接的なリストについては、こちらのリンクも参照してください: http://en.wikipedia.org/wiki/Shader#Types_of_shaders
OpenGL の場合、シェーダーのプログラミングには GLSL を使用し、Direct3D には HLSL を使用します。
それは一般的な紹介として役立つはずです。
他のいくつかの簡単なメモ(単純化されている可能性があります):
z バッファとも呼ばれる深度バッファは、レンダリング時に何が背後にあるかという問題を解決するために使用されます。
フレーム バッファは、現在のフレーム (画面/ピクセル) が格納されるメモリです。
ステンシル バッファーはもう少し複雑で、いくつかの異なる方法で使用されます。
紹介目的で、それぞれのグーグルの最初のヒット(ウィキペディア)は、これらに関して非常に役立ちます:
http://en.wikipedia.org/wiki/Framebuffer
http://en.wikipedia.org/wiki/Stencil_buffer
http://en.wikipedia.org/wiki/Z-buffering
等