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);
}
}
TrackBack URL :
Comments (0)
コメントはまだありません»
コメントはまだありません。
この投稿へのコメントの RSS フィード。TrackBack URL
コメントする