【Android】OpenGLの学習(2) 拡大・縮小と回転(2D)

投稿者: | 2012年1月16日

前回は、とにかく四角形を表示してみた。
今回は表示した図形を拡大・縮小したり、回転させてみよう。
描画の処理は、とにかくRendererのonDrawFrameメソッド内に書くことになっている。
まずは前回のonDrawFrameメソッドの処理を再掲する。

@Override
public void onDrawFrame(GL10 gl) {

    // 画面を塗りつぶす
    gl.glClearColor(0.f, 0.f, 1.f, 1.f);
    gl.glClear(GL10.GL_COLOR_BUFFER_BIT);

    gl.glMatrixMode(GL10.GL_MODELVIEW);
    gl.glLoadIdentity();

    // 四角形の座標
    float[] vertices ={
            -0.5f, -0.5f,
             0.5f, -0.5f,
            -0.5f, 0.5f,
             0.5f, 0.5f,
    };

    FloatBuffer fb = makeFloatBuffer(vertices);

    // 四角形の描画
    gl.glVertexPointer(2, GL10.GL_FLOAT, 0, fb);
    gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
    gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, 4);
}

図形を回転させるにはGL10#glRotatef()メソッドを使う。
第一引数にはどれくらい回転させるのかを角度で指定する。
第二引数以降はx,y,zのどの軸を元に回転させたいかを指定する。
2Dの場合はz軸のみを考えればよいので第四引数に1.0を指定する。
例えば、24行目のglDrawArrays()メソッドの直前に以下の記述を追加してみよう。

gl.glRotatef(30.f, 0.0f, 0.0f, 1.0f);

このようにすると30度回転することができる。

変更前
変更後

図形を拡大・縮小するにはGL10#glScalef()メソッドを使う。
3つの引数はそれぞれ、x,y,z軸に対してどれくらい倍率を変化させるかを指定する。
2Dの場合は、第3引数には1.0fを指定しておけばよい。
例えば、24行目のglDrawArrays()メソッドの直前に以下の記述を追加してみよう。

gl.glScalef(0.6f, 0.6f, 1.0f);

このようにすると60%縮小することができる。

変更前
変更後

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です