AndroidではOpenGLES2.0が使えるので、今回はスクリーンセーバーみたいなものを作って見たいと思います。まずはOpenGLのViewを表示するところまで。
環境
とりあえずは、手元にAndroid4.4のXperiaがあるので、この端末をターゲットにします。
開発環境
- Android Studio 2.1
- Android4.4 (確認用端末)
Android端末でOpenGLの情報はあまり多くはないですが、ほとんど変わっていないとおもうので、2.0〜6までほとんどかわらないのかなと。そう考えるとかなり広いバージョンで動作が保証できる可能性がありますね。(実際はそうでもないかもしれませんが...)
コード解説
それでは、早速コーディングを進めます。Android Studioでプロジェクトを作ります。
OpenGLはGLSurfaceView、Renderer、描画オブジェクト、シェーダーの4つが必要になります。
Viewを作る
OpenGLを利用するには、GLSurfaceViewの派生クラスが必要です。ここにOpenGLは描画するようです。
import android.content.Context;
import android.opengl.GLSurfaceView;
public class GLView extends GLSurfaceView {
/**
* Constractor
* @param context Context
*/
public GLView(Context context) {
super(context);
}
}
Activityを編集
メインのActivityでGLViewを作り、表示エリアに設定します。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.glView = new GLView(this
setContentView(this.glView);
}
Rendererを作成
Redererのクラスを作ります。かならずGLSurfaceView.Rendererを実装します。
いかが最低限の内容にになります。
public class GLRenderer implements GLSurfaceView.Renderer {
@Override
public void onDrawFrame(GL10 gl) {
GLES20.glClearColor(1.0f, 0.0f, 0.0f, 1.0f); // 画面をかならずここで指定した色でリフレッシュします。
GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT | GLES20.GL_DEPTH_BUFFER_BIT); // とりあずは、これを記述しないといけないぐらいで良いです。
}
@Override
public void onSurfaceChanged(GL10 gl, int width, int height) {
}
@Override
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
}
}
コンパイルすると、画面が真っ赤になると思います。ActivityでGLViewを作り、GLViewの内部でRendererが毎フレーム実行され、画面を真っ赤に描画しています。
とりあえずここまではつまづく要素はないと思いますが、OpenGL専門用語がわからない場合があると思います。とりあえずはこう言ったコードをかならず記述しなければいけない程度にとどめるのが良いと思います。興味があれば検索して調べてみるのも良いかと。
次回からゴリゴリ描画していきます。