GLSurfaceViewの利点と使い方

ゲームなどを作るとき、描画処理するにはいくつか方法があります。

SurfaceViewGLSurfaceViewを使う場合と比べて2次元という縛りはあるものの、楽に図形を描画できます。

一方GLSurfaceViewはOpenGLになじみがないと使うのは難しいと思われます。

もし、2次元で物理演算なども使わないゲームならSurfaceViewを使うのが賢明です。

逆に3次元のゲームの場合はGLSurfaceViewや物理エンジンなどを使うというような使い分けが大事です。

GLSurfaceViewの使い方

まず、GLRendererクラスを拡張してレンダリング処理を担当するクラスを作ります。

class GameRenderer implements GLSurfaceView.Renderer
{
    @Override
    public void onSurfaceCreated(GL10 gl, EGLConfig config) {
        
    }

    /** ここで描画*/
    @Override
    public void onDrawFrame(GL10 gl) 
    {
        gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);   
        gl.glClearColor(1.0f, 1.0f, 0.0f, 1.0f);
            ///黄色で塗りつぶす。
        gl.glLoadIdentity();
        
        GLU.gluLookAt(gl, 0, 0, -5, 0f, 0f, 0f, 0f, 1.0f, 0.0f);
    }

    /** 大きさが変わった時に呼ばれる。*/
    @Override
    public void onSurfaceChanged(GL10 gl, int width, int height) 
    {
        gl.glViewport(0, 0, width, height);
        float ratio = (float) width / height;
        gl.glMatrixMode(GL10.GL_PROJECTION); 
        gl.glLoadIdentity();                       
        gl.glFrustumf(-ratio, ratio, -1, 1, 3, 7);
    }
}

次にこれをGLSurfaceViewに実装します。

public class GameView extends GLSurfaceView
{
    GameRenderer renderer;
    
    public GameView(Context context, AttributeSet attrs) 
    {
        super(context, attrs);
        
        renderer = new GameRenderer();
        setEGLConfigChooser(8, 8, 8, 8, 16, 0);
        setRenderer(renderer);
        
        renderer.setAxis();
    }
}

あとはこれをActivityに設置すればOKです。

エミュレーターの場合は正しく動かないかもしれないので実機で確認したほうがいいかもしれません。

以上、GLSurfaceViewの使い方でした。では、また!

関連項目
プライバシーポリシー