@blog.justoneplanet.info

日々勉強

androidのOpenGL ESでカメラを使う

こんな感じ。

@Override
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
    gl.glClearColor(0.0f, 1.0f, 1.0f, 1.0f);
    gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
    
    {
        final float[] vertices = new float[]{
                0.0f,  1.0f,  1.0f,
                0.0f, -1.0f,  0.0f,
                1.0f, -1.0f, -1.0f,
        };
        
        FloatBuffer fb = ByteBuffer.allocateDirect(vertices.length * 4).order(ByteOrder.nativeOrder()).asFloatBuffer();
        
        fb.put(vertices);
        fb.position(0);
        
        gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
        gl.glVertexPointer(3, GL10.GL_FLOAT, 0, fb);
    }
    
    // カメラ
    {
        gl.glMatrixMode(GL10.GL_PROJECTION);
        gl.glLoadIdentity();
        
        GLU.gluPerspective(gl, 45.0f, 1.0f, 0.01f, 100.0f);// 視野の設定
        GLU.gluLookAt(gl, 0, 0, 10.0f, 0, 0, 0.0f, 0.0f, 1.0f, 0.0f);// カメラの位置向き
    }
    gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, 3);
}

インデックスバッファを使用すると以下のようになる。

@Override
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
    gl.glClearColor(0.0f, 1.0f, 1.0f, 1.0f);
    gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
    
    {
        final float[] vertices = new float[]{
                0.0f,  1.0f,  1.0f,
                0.0f, -1.0f,  0.0f,
                1.0f, -1.0f, -1.0f,
        };
        
        FloatBuffer fb = ByteBuffer.allocateDirect(vertices.length * 4).order(ByteOrder.nativeOrder()).asFloatBuffer();
        
        fb.put(vertices);
        fb.position(0);
        
        gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
        gl.glVertexPointer(3, GL10.GL_FLOAT, 0, fb);
    }
    
    // カメラ
    {
        gl.glMatrixMode(GL10.GL_PROJECTION);
        gl.glLoadIdentity();
        
        GLU.gluPerspective(gl, 45.0f, 1.0f, 0.01f, 100.0f);// 視野の設定
        GLU.gluLookAt(gl, 0, 0, 10.0f, 0, 0, 0.0f, 0.0f, 1.0f, 0.0f);// カメラの位置向き
    }
    
    // インデックスバッファ
    {
        final byte[] indices = new byte[]{0, 1, 2};
        ByteBuffer bb = ByteBuffer.allocateDirect(indices.length).order(ByteOrder.nativeOrder());
        bb.put(indices);
        bb.position(0);
        
        gl.glDrawElements(GL10.GL_TRIANGLE_STRIP, 3, GL10.GL_UNSIGNED_BYTE, bb);
    }
}

コメントはまだありません»

No comments yet.

RSS feed for comments on this post.TrackBack URL

Leave a comment