エントリーでプロフェッショナル用語は、OpenGL ESの旅を解決する--OpenGL

ベースの名詞との個人的な理解の概念に詳しいです

素早くグラフィックスAPIを理解します

OpenGLの

OpenGL(オープングラフィックライブラリ、オープングラフィックスライブラリ)は、2Dベクトルグラフィック、クロスプラットフォーム・プログラミング・インタフェースのための3Dクロス言語アプリケーションをレンダリングするために使用されます。抽象的コンピュータリソースがこれらのリソースの操作のOpenGLのオブジェクト抽象化と呼ぶことにするOpenGLの命令です。OpenGLのは、出力のみに設計されたので、それは唯一のレンダリング機能を提供しています。OpenGLは、一般的にCAD、バーチャルリアリティ、科学的可視化プログラムやビデオゲームの開発に使用されます。

OpenGL ES

OpenGL ES(組み込みシステム用のOpenGL)はOpenGLの3DグラフィックスAPIのサブセットである、OpenGLのは、カスタムから来てカットされ、それは、携帯電話、PDAやゲーム機用であり、他の組み込みデバイスが設計されています。

DirectXの

DirectXの、(延長線)は、Microsoftによって作成されたマルチメディア・プログラミング・インタフェースです。DirectXは、APIの数で構成されたシンプルなAPIではない、とだけWindowsプラットフォームをサポートすることができます。(IOSの現像剤として理解することができるように)

金属

金属は、ソフトウェアが異なるグラフィックスチップで実行できることを保証するために必要なソフトウェアの最低レベルを提供する低レベルのレンダリング・アプリケーション・プログラミング・インターフェースです。2014 AppleのWWDCでのテクノロジー企業のための新しいプラットフォームは、ゲーム開発者のために提供され、技術は、3D画像をレンダリングする10倍のパフォーマンスを向上させることができます。金属の利点は、ヘテロジニアス・コンピューティングとレンダリングの統合にあり(およびOpenGL GPUレンダリングは、同じ機能を持っており、OpenCLのとGPUのようなヘテロジニアス・コンピューティングを行う、の利点を取ることができ、加速を活用する)統一されたフレームワーク内のさまざまなニーズを提供しています。Appleは現在のOpenGLの市場や使用上のアプリケーションのほとんどは、短い時間で金属に切り替わりませんので、OpenGLを学ぶことは非常に必要かつ重要であるので、金属より、OpenGLの使用を放棄します2018WWDCに発表したが、重要!

OpenGLのプロの用語

OpenGLコンテキスト(文脈)

アプリケーションは、OpenGLコマンドを呼び出す前に、巨大なステート・マシンは、OpenGLの命令実行のための基礎であるOpenGLの、様々な状態を保持しているOpenGLコンテキストを作成する必要があります。OpenGLのクライアントの使用 - 二つのウィンドウがそれぞれ異なる2に対応する場合は、サーバーモデルを、私たちはそれぞれのGPUは、それぞれのクライアントアプリケーションへの描画コンテキストに対応し、ハードウェアサーバであると言うことができ、クライアントは、ステートマシンを維持しますコンテキストを描く、2つのウィンドウは互いに独立して述べています。

大OpenGLのステートマシンコンテキストので、コンテキストスイッチは、より大きなシステムリソースのオーバーヘッドを生成してもよいが、異なるレンダリング・モジュールは、異なるで、アプリケーションに複数のコンテキストを作成することができ、完全に別個の状態を使用する必要があるかもしれません異なるコンテキストで使用されるスレッド、コンテキスト間のテクスチャ、バッファや他のリソースを共有します。

OpenGLのステートマシン

ステートマシンは、それは次のような特徴があり、理論的に存在する機械の一種である:. Aそれは彼らの現在の状態を覚えてできるようにするためのメモリ容量を有しています。B.それは入力、自分の状態に応じて入力されたコンテンツを受信して​​、自分の状態を変更し、出力を得ることができてもよいです。時間は、それが特定の状態(オフ状態)に入ると、C。、それはもはや入力操作が停止されている受信しません。

だから、基本的に、私たちのコンピュータは、1台のステートマシンとして見られていません。

  1. コンピュータのメモリ(メモリ、ハードディスクなど)、コンピュータは自分の現在の状況を覚えてすることができます(お使いのコンピュータ上で、現在インストールされているソフトウェアを、実際には、バイナリ値であり、コンピュータに格納されたデータは、彼らが現在の状態に属しています)。
  2. コンピュータ入力装置は、入力(キーボード入力、マウス入力、ファイル入力)を受信し、(主にプログラム・コードを指す実行することができる)、その状態(メモリ内の修正値)を変更し、入力自状態の内容に応じて取得することができます出力(結果が画面に表示されています)。
  3. それはもはや入力絞り加工を受ける特定の状態(オフ状態)に入ったとき。次のOpenGLは、機械として見ることができる:(1)例えばOpenGLの自身の状態(記録することができる。現在使用色glClearColor(1.0F、1.0F、は0.0f、は0.0f)を、深さになっていますテスト機能glEnableです(GL_DEPTH_TEST);などが挙げられる。これらを記録する)(2)OpenGLは、我々は、OpenGLの機能を呼び出すと、OpenGLが実際に我々の入力を受け付けるように見ることができる(入力を受け取ることができる)、入力の内容に基づいてそして、それらの状態は、自分の状態を変更し、出力を得ることができる(例えば、我々はglColor3fを呼び出し、OpenGLは、それらの「現在の色」この入力の状​​態を変更し、受信し、我々はglRectfを呼び出し、OpenGLは矩形を出力します)( 3)OpenGLが停止にすることがあり、もはや入力を受け取りません。これが私たちのプログラムの中であまり目立たない動作をする可能性がありますが、プログラムが終了する前に、OpenGLは、常に動作を停止します。#####、(レンダリング)レンダリング及びグラフィック画像への画像データは、外部環境光に応じて等、3Dグラフィックス、材料の点におけるテクスチャの内部構成図に描かれていると理解されるべき3D空間レンダリング(などの操作と呼ばれる変換ここでもう一つの興味深いがあります)、より現実的な3次元効果を生成している:私は効果のいくつかに基づいてグラフィック要素を描くだけで、基本的なグラフィック要素を描画する必要があり理解し、もう少し高度なレンダリング、プラス引き分けでなければなりません「描く」こと表示されました。

頂点配列(VertexArray)と頂点バッファ(VertexBuffer)

頂点:我々は、パターンを描画するために参照し、その頂点の位置データを、このデータはGPUに配列またはそのキャッシュメモリに格納することができます。頂点配列:頂点座標、表面法線、RGBA色、二次色、カラーインデックス、テクスチャ座標とポリゴン境界フラグ:頂点配列に記憶されたデータ、データ記載の番号を保存することです。これは非常に関数呼び出しの数を減らす、延伸と呼ばれる機能を介して行うだけでなく、共有冗長な頂点処理、改善されたアプリケーションのパフォーマンスを回避することができます。頂点バッファ:OpenGLはクライアントであるので - 時々サーバに顧客端末からの送信データが遅くなることがあり、バッファオブジェクトの添加ので、ディスプレイは、直接グラフィックサーバに格納されたデータを指定することができ、サーバモデル構造。

パイプライン

パイプラインは、レンダリングパイプラインとして理解することができます。グラフィックデータは組立ライン、実行の順序で次々と同様に、一定の順序に従って処理されるときOpenGLは、一度にグラフィックスをレンダリングします。そして、それは破られることができない、この順序に従って厳格でなければなりません。(パイプラインは、実際には、間に最終的な管理プロセス画面の処理中に発生する変化の様々なを通して、パイプラインを介して元の図形データの束を意味します。)

固定回線(メモリシェーダ)

初期の頃はOpenGLはブロック期間のシェーダ品種をカプセル化など、開発者に完全なレンダリンググラフィックスを支援するための固定シェーダプログラムを完了するための機能を内蔵の光が含まれ、座標変換、クリッピング。OpenGLの#####使用中プログラマブルパイプラインは、固定されたラインは、各サービスのために完了されない場合があり、関連するプログラム可能な部分に開口することが可能です。(栗を理解する個人のために:四角、白い固形石鹸、石鹸単一色、単一の、より少ない自由形状を生成するステップによって最後のステップ、パイプライン段階における原料から、例えば石鹸の生産ライン、すなわち行について、これは固定回線である。石鹸の製造プロセスは、あなたが石鹸の形状をカスタマイズすることができた場合は、石鹸の色は、最終的に我々は、様々な形状、色石鹸)#####シェーダプログラムシェーダのカラーリングを生成することができますデバイス(シェーダ)は、画像レンダリングを達成するために使用され、編集プログラムは、すなわち、プログラム可能なレンダリング・パイプラインを固定されたレンダリングパイプラインを置き換えるために使用することができます。このように、実際に呼び出される前に描画にOpenGL、また、シェーダプログラムで編集にシェーダを指定する必要があります。コモンシェーダは、次のとおり頂点シェーダ(VertexShader)、フラグメントシェーダ(FragmentShader)/ピクセルシェーダ(PixelShader)、ジオメトリシェーダ(ジオメトリシェーダ)、テッセレーションシェーダ(TessellationShader)。最も重要なのは、頂点シェーダとフラグメントシェーダです。シェーダOpenGLを処理するときに、コンパイル、リンク、等シェーダプログラム(glProgram)を生成するステップ、シェーダプログラムは、算術論理頂点シェーダ及びフラグメントシェーダの両方を含みます。プリミティブ組み立てられた頂点をプリミティブ、次いでラスタライズに変換され介して第1の頂点シェーダ頂点データによって計算にOpenGLレンダリングは、次に、ラスターデータにプリミティブを変換するとき、最終的に、ラスタライズフラグメントシェーダに計算されたデータは、フラグメントシェーダは、各ピクセルが算出されるためのデータをラスタライズし、ピクセルの色を決定します。#####頂点シェーダ(VertexShader)頂点シェーダは、典型的には、各頂点処理パターン(回転/並進/突起)は、プログラマブル頂点を操作するための汎用的な方法を実装する形質転換するために使用されます。頂点ごとの頂点シェーダープログラム動作、すなわち、頂点シェーダ頂点毎のデータが(並列的に)一度実行されます。各商品は、品質検査部門を通過する場合は、工場を離れる前に資格の章を刻印。#####フラグメントシェーダ(FragmentShader)フラグメントシェーダ:充填パターンの各ピクセルの色を計算するための一般的方法。OpenGLは画素毎(並列に)カラーセグメント、及び計算を計算するためのプログラムである、任意のパターンは、画素数を持つことになり、それは計算の多くを実行すると、CPUは、この時点で完了することができないこれらの多数計算され、その後、我々は補助GPUを行う必要があります。##### GLSL(OpenGLのシェーディング言語)は、OpenGLのプログラミング言語、手続き指向言語、基本的な構文とC / C ++は、実質的に同じである、彼らはグラフィックスカードのGPUである(グラフィックプロセッサで着色に使用されていますレンダリングパイプラインは、プログラミングの異なるレベルを有するように、代わりに、レンダリングパイプラインの固定部の)グラフィックス処理ユニット単位で行わ。たとえば、次のビュー変換、射影変換等。頂点シェーダ及びフラグメントシェーダ:GLSLシェーダコードは、2つの部分に分割されます。##### GLSL(OpenGLのシェーディング言語)は、OpenGLのプログラミング言語、手続き指向言語、基本的な構文とC / C ++は、実質的に同じである、彼らはグラフィックスカードのGPUである(グラフィックプロセッサで着色に使用されていますレンダリングパイプラインは、プログラミングの異なるレベルを有するように、代わりに、レンダリングパイプラインの固定部の)グラフィックス処理ユニット単位で行わ。たとえば、次のビュー変換、射影変換等。頂点シェーダ及びフラグメントシェーダ:GLSLシェーダコードは、2つの部分に分割されます。##### GLSL(OpenGLのシェーディング言語)は、OpenGLのプログラミング言語、手続き指向言語、基本的な構文とC / C ++は、実質的に同じである、彼らはグラフィックスカードのGPUである(グラフィックプロセッサで着色に使用されていますレンダリングパイプラインは、プログラミングの異なるレベルを有するように、代わりに、レンダリングパイプラインの固定部の)グラフィックス処理ユニット単位で行わ。たとえば、次のビュー変換、射影変換等。頂点シェーダ及びフラグメントシェーダ:GLSLシェーダコードは、2つの部分に分割されます。

ラスタライズラスタライズ

1.プロセスを断片化するための変換手段頂点データは、タイル要素の各々は、ピクセルバッファに相当します。カラー値を割り当てる基地プリミティブ座標決定ウィンドウの整数ラスタ領域占有されている、2:2の幾何学的形状は、プロセスの二次元画像に変換するには、プロセスは2つの部分を含みます。各領域に対する深さ値は、ラスタライズ処理は、フラグメントを生成することです。

穀物

テクスチャキャッシュ要素のOpenGL ES画像の色値を格納するために使用される、グラフィックをレンダリングする際に、より現実的なシナリオでは、テクスチャを作るために、画像符号化を埋める必要とする、画像/画像として理解することができます。

混合(ブレンド)

OpenGLで、混合は一般に、固体の色でないオブジェクト、透明オブジェクトの透明度の手法で、その色は、その色やオブジェクト自体その背後にある他のオブジェクトの色の異なる程度の組み合わせです。例えば、我々は一緒にその後三原色は、赤、緑、青、黒、色より多くの色を混合することができます。画素がまだ取り外されていない場合、テスト段階の後、次いで、フレーム・バッファ内のピクセルの色とが混色アタッチメント上の色であろう。

変換行列(変換)

グラフィックス描画処理では、三それぞれ変換の種類、パン、ズーム、回転があります。私たちは、変換行列を使用する必要があります。

行列のプロジェクション(投影)

図3Dは、二次元のスクリーン座標に変換するため、実際の線は、2次元座標に描画される座標。

オンスクリーンレンダリング/交換バッファ(SwapBuffer)

Windowsなどの一般的なマッピングシステムリソースをレンダ。画像をウィンドウに対応する描画バッファに直接レンダリングされる場合、画像が画面上に表示することができます。各ウィンドウは、緩衝液のみである場合、画面のリフレッシュを描画処理において、ウィンドウは全体像が表示されない場合があり、ことに留意されたいです。この問題を解決するために、従来のOpenGLのプログラムは、少なくとも二つのバッファが存在します。画面に表示される画面バッファと呼ばれ、オフスクリーンバッファと呼ばれる表示されません。バッファレンダリングが完了した後、スクリーンバッファとオフスクリーンバッファ交換、画面上の画像表示装置。上下二つの異なるサブフレームに属する画面の領域、およびは、したがって、一般に、信号表示リフレッシュを待機する交換が完了したときに表示を更新するために起因するが、一般に、画像スワップバッファを防止するために、2つの表示のリフレッシュ間隔をライン毎に行われます。引き換えに、この信号は、この技術は、垂直同期と呼ばれ、垂直同期信号と呼ばれます。

ます。https://juejin.im/post/5d0ae1d06fb9a07ead5a0040で再現

おすすめ

転載: blog.csdn.net/weixin_34187822/article/details/93182334