- OpenGL ESこれはOpenGLのサブセットです。
- OpenGL ESは、組込み機器やiOS、Android、Windowsなどのモバイル機器向けの高度な3Dグラフィックスアプリケーションです。
- OpenGL ESはクロスプラットフォームであり、ウィンドウ関連のメソッドを提供しないため、システムは独自のキャリアを用意する必要があります。
OpenGL ESレンダリング処理
イメージは「 」より引用
OpenGL ESのレンダリングは、CPUとGPUの2つの部分に分かれています。
GPUセクション
ラスタライズや表示など、グラフィックスのハードウェア処理を行います。
OpenGL ES グラフィックスパイプライン
OpenGL ESグラフィックス・パイプラインは、以下の2つの方法で説明されます。
図1
- 頂点データを取得し、頂点データをメモリから頂点バッファにコピーするAPI
- テクスチャ座標はテクスチャ・チャンネルを通してバーテックス・シェーダとスライス・シェーダに渡されます。
- このステップでは、頂点をグラフに変換します。
- ラスタライズ:グラフィックがスクリーンのどこに対応するかを決定します。
- フラグメント/セグメント/ピクセルシェーダ:対応するピクセルポイントの色値を処理します。
- 各ピクセルポイントの処理された色値をフレームバッファに格納した後、モニターに表示します。
- API:頂点バッファ、頂点シェーダ、テクスチャ座標、フラグメントシェーダをAPIで操作可能
Apple公式イメージ
イメージは「 」より引用
- アプリ:グラフィックアセンブリの頂点情報、イメージ情報の提供
- 頂点:頂点の取り扱い -- グラフィカルな変換
- Geometryメタファブリケーション+
- フラグメント:テクスチャリング+アトマイゼーション
- フレームバッファの操作:透明度のブレンド、テンプレート化、深度テスト、そして最終的なブレンド。
頂点シェーダ
頂点シェーダーは頂点のシェーダープログラムを処理し、頂点シェーダーの入出力は以下の通りです。
入力には3つの方法があります。 1. 属性チャンネルを介した頂点データ(頂点ごとのデータを提供) 2. ユニフォームチャンネルを介したユニフォーム変数(頂点/スライス・シェーダで使用される不変データ) 3. サンプラー:頂点シェーダで使用されるテクスチャを表す特別なユニフォーム変数タイプ
出力: 処理された最終頂点データ。
- gl_PositionはGLSLの組み込み変数で、処理された最終頂点データが代入されます。
- gl_PointSizeは、点のサイズです。つまり、各点のサイズはバーテックスシェーダで変更できます。
頂点シェーダーが処理する操作
- 行列変換位置
- 頂点ごとの色を生成するための照明式の計算
- テクスチャ座標の生成/変換:ピースワイズシェーダにアトリビュートを渡す方法はありません。バーテックスシェーダのブリッジングを通じて、間接的にピースワイズシェーダにテクスチャ座標アトリビュートを渡すことは可能です。
頂点シェーダーGLSLコード例
attribute vec4 position;
attribute vec2 textCoordinate;
uniform mat4 rotateMatrix;
varying lowp vec2 varyTextCoord;
void main()
{
varyTextCoord = textCoordinate;
vec4 vPos = position;
vPos = vPos * rotateMatrix;
gl_Position = vPos;
}
- 属性、一様 クライアントとサーバ間のチャネルを示します。
- ここで、vec4, vec2 はベクトル型で、4 次元ベクトルと 2 次元ベクトルを表します。
- mat4 *4
- varying は修飾子です。テクスチャ座標は varying を介してスライスシェーダに渡されます。
- lowp低精度
- メインでの操作:1.テクスチャ座標ブリッジの実装、2.頂点回転行列の乗算の実装:列ベクトルと列行列の乗算、回転後の頂点座標の取得、3.上記で取得した頂点座標をgl_Positionに代入。
要素アセンブリ、ラスタライズ
- 要素アセンブリ:個々の要素に頂点データを計算します。
- ラスタライズ:ピクセルを2Dセグメントの集合に変換するプロセス。主に画面が2Dであるため、変換されたピクセルポイントも2Dになります。
フラグメントシェーダ
次の図は、スライス・シェーダの入力と出力を示しています。
頂点シェーダと同様に、入力には3つの方法があります。
1.頂点シェーダブリッジなどで渡されるテクスチャ座標。
2.ユニフォームチャネルを通したユニフォーム変数の入力、すなわち頂点/スライス・シェーダで使用される不変データ。
3.サンプラー:頂点シェーダーで使用されるテクスチャーを表す特殊な一様変数型。
出力:
スライスシェーダで処理されるピクセル点
ピースワイズシェーダーが処理する演算
- 色の計算
- テクスチャ値の取得
- ピクセルをカラー値で塗りつぶします。
チップシェーダーGLSLコード例
varying lowp vec2 varyTextCoord;
uniform sampler2D colorMap;
void main() {
gl_FragColor = texture2D(colorMap, varyTextCoord); }
- varying: テクスチャ座標を渡せるように、頂点シェーダーとまったく同じにする必要があります。
- sampler2D サンプラーの種類
- texture2D(テクスチャサンプラー, テクスチャ座標): 対応する位置/座標のカラー値を取得します。
- gl_FragColor: 最終的な色の値を割り当てます。
まとめ
- バーテックス・シェーダーやスライス・シェーダーは、iOSの関数やメソッドに似たコード・スニペットで、戻り値があります。
- これらの戻り値はどちらもGLSLの組み込み変数で、カプセル化されているので、データを代入するだけでOKです。
- 頂点シェーダの戻り値は、頂点シェーダで頂点を処理した結果であるgl_Positionにコピーされ、フラグメントシェーダの結果は、フラグメントシェーダでピクセルを処理した結果であるgl_fragColorに代入されます。