「OpenGLのプログラミングガイド」1.4 OpenGLのレンダリングパイプライン - コンセプトの明確な説明とのインタビュー

オリジナルリンク: https://yq.aliyun.com/articles/117345

https://yq.aliyun.com/articles/117345

 

「OpenGLのプログラミングガイド」1.4 OpenGLのレンダリングパイプライン

フア・ジャンコンピュータ  2017年7月3日午前14時04分00秒1896ビュー

章を押して「OpenGLのプログラミングガイド、」より多くの章はYunqiコミュニティ「コンピュータの章、」いいえパブリックビューにアクセスすることができブック第1章、セクション1.4、著者ビルLicea-ケイン、からこのセクションの抜粋

レンダリングパイプライン1.4 OpenGLの

OpenGLは、我々は、通常、データの一連の処理であり、最終的なレンダリングされた画像へのアプリケーションのデータを変換するレンダリング・パイプライン(レンダリングパイプライン)を指します。図1-2は、ラインのOpenGL 4.3バージョンです。OpenGLの誕生以来、そのレンダリングパイプラインは、非常に大きな変化が起こってきました。
OpenGLは最初含む、シェーダステージを処理する一連のジオメトリユーザによって提供されたデータ(頂点及び形状)、及び入力を受信し、(それ自体が2つのシェーダを含む)、頂点シェーダ、有色セグメントを、そして最後にジオメトリシェーダは、それはラスタユニット(ラスタライザ)に供給されます。すべての地域で、図せん断のフラグメントデータを生成する責任ラスタライズ部要素(領域クリッピング)し、次いで各フラグメントに対して生成されたフラグメントシェーダを実行します。

画像

ご存知のように、OpenGLのアプリケーションのためのシェーダが大きな役割を果たしました。あなたはそれらの所望の機能を達成するためにシェーダを使用するために彼らの必要性を完全に制御を持っています。私たちは、実際には、唯一の頂点シェーダとフラグメントシェーダが必要とされている、すべての着色のステージを使用する必要はありません。セグメントは、ジオメトリシェーダは、オプションのステップです。
今、私たちは、より多くの背景情報については、各着色段階に少し深くなります。それは、多くの人々が落胆感じるが、心配しないでどのように現段階ということが理解されます。概念のさらなる理解することで、あなたはすぐにOpenGLの開発プロセスを使用してしまいます。

1.4.1のOpenGLにデータを転送する準備ができて

OpenGLは、OpenGLのサーバによって維持されるメモリの領域に相当するキャッシュオブジェクト(バッファオブジェクト)に保存されたすべてのデータを必要とします。私たちは、このようなデータ・キャッシュを作成するためのさまざまな方法を使用することができますが、最も一般的な方法は、glBufferData例1.1()コマンドを使用することです。また、第3章を参照してください、いくつかの余分なキャッシュ設定、関連するコンテンツを実行する必要があります。

1.4.2は、OpenGLにデータを転送します

初期化が完了キャッシュがあるとき、私たちは例えば、要求ジオメトリに描画コマンドをレンダリングOpenGLを呼び出すことができ、glDrawArrays 1.1(一般的に使用される描画コマンドです)。
頂点データをレンダリングするOpenGLは通常、サーバのOpenGLに送信されます。頂点が統一されたパケットの処理を必要と我々は考えることができます。このパッケージ内のデータは、ほとんどの場合、位置データが含まれ、通常は、我々が必要とするすべてのデータ(つまり、我々はすべてのデータの頂点を構成するものの独自の定義を担当している)とすることができます。他のデータは、画素の最終的な色を決定するために使用することができます。
第3章では、コンテンツがより詳細にコマンドを描画しますについて説明します。

1.4.3頂点シェーダ

描画コマンドの各頂点のために、OpenGLの頂点シェーダは、プロセスに関連した頂点データを呼び出します。他の活性ラスタライズシェーダの前か、頂点シェーダは、例えば、単にデータをコピーし、転送シェーダと呼ばれる着色剤の次のステージに渡さ(パススルーシェーダ)、非常に単純であってもよく、それも可能です例えば、画面上の頂点の位置を得るために実行される計算の数が多い(一般的には、我々は第5章を参照して、変換行列(変換行列)の概念を使用する)、または照明を計算することによって、複合(セクション7を参照してください頂点の色を決定する、またはいくつかの他の技術を達成するための章)。
一般的に言って、複雑なアプリケーションは、多くの頂点シェーダを含んでいてもよいが、同時に、一つだけ頂点シェーダの仕事。

1.4.4セグメント着色

同時に細分シェーダ(テッセレーションシェーダ)を活性化する場合、各頂点に関連付けられた頂点シェーダ処理データの後に、さらにデータを処理します。第9章に見られるように、シェーダは、オブジェクトの形状を記述するためにパッチの細分割を使用し、作業を完了するためにセグメントを接続する比較的単純な幾何学的パッチを使用して、結果は、幾何学的要素の数を増加させることで、モデルの外観がよりスムーズになります。シェーディング段階セグメントは別々に2つのシェーダパッチデータを管理し、最終的な形状を生成するために使用されます。

1.4.5ジオメトリシェーダ

次の段階を着色 - ジオメトリシェーダを - そのような新しいエンティティを作成するように、各幾何学的要素に更なる処理を行うラスタライズする前に許可されます。この着色段階はオプションですが、我々はその強力な場所を理解するだろう第10章ではどこ。

1.4.6プリミティブ・アセンブリ

前述したシェーディング段ものOpenGLに渡されるジオメトリの頂点間の情報の方全てに加えて、頂点データを処理しています。プリミティブアセンブリジオメトリに関連付けられている要素の頂点間一緒に組織の段階、剪断および次の作業ラスタライズを準備します。

1.4.7カット

頂点は外にビューポート(ビューポート)を落ちること - つまり、我々はウィンドウ領域を描画することができます - プリミティブの頂点に関連し、この時点では、関連するピクセルは、ビューポートの外に描画しないことを確実にするための変更を行います。このプロセスは、OpenGLのにより自動的に実行され、切断(クリッピング)と呼ばれています。

1.4.8ラスタライズ

切削加工を行うことが直後の更新は、ラスタープリミティブユニットに送信された後、対応するフラグメントを生成します。我々は、「候補画素」としてタイル、すなわち、フレームバッファのピクセルに配置されてもよいことができ、それはまた、位置が更新されていない画素に対応し、最終的に除去することができます。二相を断片、すなわち、フラグメントシェーディングオペレーションの処理後に断片によって実行されます。

1.4.9 片元着色

色の最後の段階は、フラグメントシェーディングステージと呼ばれる、画面上の制御プログラムによって表示されてもよいです。この段階で、我々は、シェーダが最終的なカラーフィルム要素(も)動作断片により(次のステージが一度色を変化させてもよい)、その奥行き値を算出する使用します。フラグメントシェーダ非常に強力な、ここでは、計算された位相プロセスサプリメントの頂点のカラー値をテクスチャマッピングを使用します。我々はフラグメントシェーダでフラグメントを描画し続けるべきではないと思われる場合も、このフラグメントの処理を終了することができ、このステップはフラグメント廃棄(廃棄)と呼ばれています。
私たちはより良いプロセスの頂点シェーダとフラグメントシェーダの違いを理解する必要がある場合は、この方法は覚えてするために使用することができます(セグメントとジオメトリシェーディングを含む)、頂点シェーダは、図1の画面の要素がどうあるべきかを決定します。位置、及びフラグメントシェーダはどうあるべきかの断片の色を決定するためにこの情報を使用します。

動作によって1.4.10断片

我々はフラグメントシェーダの仕事で行うほか、次のステップでは、最後の独立したフラグメントのフラグメント処理操作です。この段階では(デプステスト、またはさらに一般的にZバッファと呼ばれる)の深さをテストするために使用され、断片を表示するかどうかを決定するためにステンシルテスト(ステンシルテスト)方法。
断片が正しくすべてのアクティブなテストに合格した場合はオン融合は(ブレンド場合、それは、色の値は、更新される画素に対応する(奥行き値を含んでいてもよい)、フレームバッファに直接描画することができます)モード、次いで、フラグメントは、新しいカラー値を形成するために、ピクセルの現在の色が重畳し、フレームバッファに書き込まれます。
1-2図からわかるように、ピクセルデータが伝送される経路を有しています。一般に、画素データの画像ファイルから、それはまた、直接OpenGLレンダリングすることができるが。画素データは、典型的には、呼のテクスチャマッピングの方法によりテクスチャマップに格納されます。私たちは、テクスチャのステージで1からのデータ値または複数のテクスチャマップを見つけることができます。私たちは、第6章では、テクスチャマッピングについて学びます。
今、私たちは、パイプラインの動作する様子を説明するために、バック1.1例に、その後、OpenGLパイプラインの基本を理解していること。

おすすめ

転載: blog.csdn.net/u010029439/article/details/102740487