OpenGL ESで2D描画してみよう

by K.I
2017/06/25〜

Index


概要

OpenGL ES とは


[top]

OpenGLの描画

クリッピング座標系

Viewport変換

ラスタライザ


1つまり、座標変換が全て完了しているものと同義。

[top]

シェーダについて

バーテックスシェーダ

フラグメントシェーダ

attribute変数

uniform変数

varying変数

GLSL

意味
void 戻り値を持たない関数、引数リストが空を示す
bool 条件型(true/false)
int 符号付整数
float 単精度浮動小数点スカラー
vec2 2成分浮動小数点ベクトル
vec3 3成分浮動小数点ベクトル
vec4 4成分浮動小数点ベクトル
bvec2 2成分boolベクトル
bvec3 3成分boolベクトル
bvec4 4成分boolベクトル
ivec2 2成分整数ベクトル
ivec3 3成分整数ベクトル
ivec4 4成分整数ベクトル
mat2 2×2浮動小数点行列
mat3 3×3浮動小数点行列
mat4 4×4浮動小数点行列
sampler2D texture2D関数で使う2Dテクスチャ
samplerCube textureCube関数で使うテクスチャ

2実行時にコンパイルするって、この仕様はちょっと驚いた。中間コード的なものにしても良かったんじゃないかな。

[top]

簡単にOpenGLを使う

バージョン2.0以上の指定

GLSurfaceViewを準備

バッファの準備

GLRendererで描画


3通常はJavaのバッファはヒープ上に作られるが、OpenGLのルーチンはネイティブのメモリ上のバッファを参照するため。バイトオーダーの問題もある。

[top]

三角形の描画

簡単なバーテックスシェーダ

簡単なフラグメントシェーダ

シェーダのコンパイル用メソッド

シェーダプログラムの準備

シェーダプログラムの実行

実行結果


4同次座標系、描画する次元の数+1で計算することで、座標計算がやりやすいらしい。

[top]

アルファブレンディング

アルファブレンドの設定方法

アルファブレンドの確認プログラム

ブレンドモードによる効果

加算とスクリーンの違い

論理演算

glBlendEquation

パラメータ 合成方法
GL_FUNC_ADD 加算(S+D)→デフォルト
GL_FUNC_SUBTRACT 減算(S-D)
GL_FUNC_REVERSE_SUBTRACT 減算(D-S)
GL_MIN 最小
GL_MAX 最大

OR合成もどき


5個人的には描画モードという感じがするが、OpenGLで描画モードというと、頂点情報を描画する順番を指定するものらしい。
6といっても、ほとんど黒だけど。
7これじゃ意味が無いみたいだけど、加算する成分が含まれない、或いは少ない場合は、ちゃんと加算される。
8自分としては、OR合成が出来るというだけで、OpenGLを使う意味があるかも。

[top]

頂点と線

頂点を描画する

頂点を円形にする

線を描画する

→最大のWidth=8でも、この程度の太さしかない

破線


9ES2.0では、バーテックスシェーダで指定するしかないらしい。
10これが自分的には、OpenGLで一番ガッカリだったことだったりする。
11これがフラグメントシェーダの面白い処だと思う。

[top]

パターンで塗潰し

三角関数によるパターン

2値パターン

パターンを重ねる


12ここらへんは、実際にプログラムして描画速度を確認しないと分かんないかも。

[top]

テクスチャ

テクスチャの生成

四角形にテクスチャを

シェーダでテクスチャ描画

文字の描画


13これはきっと、XYZWはポリゴン座標として使っているので、次はUVということになったんじゃないかなぁ。
14画像形式は、jpg, gif, png に対応している。
15あぁでもこれは速度的にはダメかも。

[top]

FBO

FBOの作成

FBOでオフスクリーン描画


16いろいろ調べてみたけど、やり方がわからん。まぁ、画面全体のテクスチャ貼り付けならシェーダは固定だから、最初に一度作ってしまえば後はそんなに手間は掛からないんだけど。
17FBOとシェーダの管理クラス、GLSurfaceView.Rendererを継承した、FBOのオフスクリーン描画クラスを作っているようだ。

[top]

まとめ


18それがOpenGLで高速化される肝心なところという気もするけど、そこらへんは詳しい記事がいろいろあるしね。

[top]

参考

αブレンド関連参考

図形関連


[top]

メモ

OpenGLの座標

パラメータの確認

GLSL関数のメモ

VBO

カスタムView


[top] [プログラムの部屋に戻る]

comments powered by Disqus