フリーハンド線とビブラートAPP(1)知人のOpenGL ES

それはノートを書かれているので、行うには何も、フリーハンドのラインとビブラートのAppは、順序がやや混沌となりませんが、基本的には以下のいくつかのステップに分けられます

  • 使用して、最初のOpenGLを満たし

  • ディスプレイカメラ

  • 録画映像

  • 機能の追加:設定した映像記録速度

  • 機能の追加:特殊効果の様々な

ここでは開口部があります

1. OpenGLは何ですか?

オープングラフィックライブラリ

業界標準のグラフィックス・スペースは、クロスプログラミング言語、クロスプラットフォーム、プロフェッショナル・グラフィックスのプログラミング(ソフトウェア)のインタフェースです。それは強力で、簡単に呼び出し基礎となるグラフィックスライブラリで、2次元、3次元画像です。
ハードウェアとは何の関係もありません。これは、WindowsやLinux、Macの、アンドロイド、など異なるプラットフォーム間で移植することができ IOS。そのため、OpenGLのソフトウェアのサポートが良い移植性を持っている、あなたは、アプリケーションの非常に広い範囲を得ることができます。

2.0は、現在広くサポートされています

<uses-feature android:glEsVersion="0x00020000" android:required="true"/>

GLSurfaceViewの
SurfaceView、OpenGLレンダリングを担当し、その埋め込まれた表面に継承。

  • 表面の管理とEGL
  • カスタムレンダラを(レンダリング)できます。
  • 運転中に別のスレッド、およびUIスレッドの分離にレンダラをしてみましょう。
  • オンデマンド(オンデマンド)と連続レンダリング(連続)のサポートをレンダリング。

2. OpenGLのレンダリング処理

文章は、一つの画像からなる幾何学的グリッドに情報を変換する処理です。

ここに画像を挿入説明

  1. 頂点データを取得し、頂点データは、頂点シェーダ、プリミティブ頂点位置決意に渡されます。
  2. 以下のための要素アセンブリ
  3. ラスタライズ
  4. 、画像上の影の色を埋めるために光の影響を処理するフラグメントシェーダは、各フラグメントが、最終的なフレームバッファを処理しています。

3.座標系のOpenGL

座標系のOpenGL

  • OpenGLの世界は、OpenGLの形状を決定するため、[-1,1]の範囲内の頂点座標の位置座標は、この座標に応じて与えられます。
  • テクスチャ座標は、範囲の[0,1]、OpenGLのテクスチャで動作し、この座標に応じて操作されます。
  • Androidの画面は、[0,1]の範囲内にOpenGLでコンテンツを表示する画面の座標に係る装置を、調整します。

4.シェーダシェーダ

  • シェーダ(シェーダ)は、GPU上で実行中のアプレット
  • 頂点シェーダ
    -どのようにアプレットの頂点、法線、およびその他のデータ
  • フラグメントシェーダ
    -環境の表面に光、影、閉塞などを処理する方法の効果は、アプレットは、最終的な画像を生成し、

5. GLSL

OpenGLのシェーディング言語(OpenGLのシェーディング言語)

データの種類

フロートフロート
VEC2は、2つの浮動小数点データベクトル含ま
vec4ベクトルは、4つの浮動小数点データを含んでいる
(一方のテクスチャを表す)sampler2D 2Dテクスチャサンプラ

修飾子

属性は、変数を属性。唯一の頂点シェーダ。頂点座標、テクスチャ座標、色等:頂点データの一般的な使用は、以下のようないくつかの変数を表します。
制服一貫変数。値は、実行中のシェーダ変数が一定であることに同意します。そして、コンパイル時に知られていない。この値は、外部シェーダによって初期化され、定数のconstは異なっています。
揮発性の変数を変化させることができます。これは、頂点シェーダ変数フラグメントシェーダからのデータに転送されます。

組み込み関数

テクスチャにTexture2D(サンプラー座標)サンプル指定された位置
にTexture2D(サンプラー、サンプル点座標)

組み込み変数

頂点シェーダ
gl_Position vec4頂点位置の
フラグメントシェーダ
gl_FragColor vec4カラー

他の

精密lowp低精度
で精密mediump精度
精度highp精度

例:

// 把顶点坐标给这个变量, 确定要画画的形状
attribute vec4 vPosition;
//接收纹理坐标,接收采样器采样图片的坐标
attribute vec4 vCoord;
//变换矩阵, 需要将原本的vCoord(01,11,00,10) 与矩阵相乘 才能够得到 surfacetexure(特殊)的正确的采样坐标
uniform mat4 vMatrix;
//传给片元着色器 像素点
varying vec2 aCoord;
void main(){
    //内置变量 gl_Position ,我们把顶点数据赋值给这个变量 opengl就知道它要画什么形状了
    gl_Position = vPosition;
    // 进过测试 和设备有关
    aCoord = (vMatrix * vCoord).xy;
    //aCoord =  vec2((vCoord*vMatrix).x,(vCoord*vMatrix).y);
}
#extension GL_OES_EGL_image_external : require
//SurfaceTexture比较特殊
//float数据是什么精度的
precision mediump float;
//采样点的坐标
varying vec2 aCoord;
//采样器
uniform samplerExternalOES vTexture;
void main(){
    //变量 接收像素值
    // texture2D:采样器 采集 aCoord的像素
    //赋值给 gl_FragColor 就可以了
    gl_FragColor = texture2D(vTexture,aCoord);
}

おすすめ

転載: blog.csdn.net/u011077027/article/details/93379997