JavaとJavaEEプログラマのブログ

JavaEEを中心にしたをソフトウェア開発についてのブログ

さらにリファクタリング。指定した座標に正方形を描写。色指定を16進で行うように修正。

色指定は16進でやらないとダメ。
AndroidSDKのサンプルにあるcom.example.android.apis.graphics.kube.Kubeクラスを参考。

package jp.mprog;


import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.FloatBuffer;

import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.opengles.GL10;

import android.opengl.GLSurfaceView;

public class GLRenderer implements GLSurfaceView.Renderer  {

	static final float [] SQUARE_POLYGONS = new float[]{
		-0.5f, -0.5f, 0.0f,
		 0.5f, -0.5f, 0.0f,
		-0.5f,  0.5f, 0.0f,
		0.5f,   0.5f, 0.0f,

	};


	private final int ONE_POINT_DATA_NUM = 3;//頂点を構成するデータの数(x,y,zの3つ)


	private FloatBuffer getFloatBuffer(float [] array){
		FloatBuffer floatBuffer;
		ByteBuffer bb = ByteBuffer.allocateDirect(array.length * 4);
		bb.order(ByteOrder.nativeOrder());
		floatBuffer = bb.asFloatBuffer();
		floatBuffer.put(array);
		floatBuffer.position(0);
		return floatBuffer;
	}

	public void drawSquare(GL10 gl,float x, float y, int red, int green, int blue, int alpha ){
		final float [] squares = new float[]{
			-0.5f + x, -0.5f + y, 0.0f,
			 0.5f + x, -0.5f + y, 0.0f,
			-0.5f + x,  0.5f + y, 0.0f,
			0.5f + x,   0.5f + y, 0.0f,

		};

		drawSquare(gl,squares,red, green, blue,alpha);

	}

	public void drawSquare(GL10 gl,float[] square, int red, int green, int blue, int alpha ){

		FloatBuffer squareBuffer = getFloatBuffer(square);

		gl.glVertexPointer(ONE_POINT_DATA_NUM, GL10.GL_FLOAT, 0, squareBuffer);//描画する頂点配列を設定
		gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);//頂点配列を有効にする。

		gl.glColor4x(red, green, blue,  alpha);
		final int POLYGON_NUM = 4;
		gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, POLYGON_NUM);

	}


	private void makeWorld(GL10 gl){
		gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT); //画面クリア

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

		gl.glOrthof(-1.0f, 1.0f, -1.5f, 1.5f, 0.5f, -0.5f);//0.0を中心とする座標系

		gl.glClearColor(0.5f, 0.5f, 0.5f, 1.0f ); //画面クリアカラー設定(灰色)
		gl.glClear(GL10.GL_COLOR_BUFFER_BIT); //画面クリア
	}


	@Override
	public void onDrawFrame(GL10 gl) {

		makeWorld(gl);

		int one = 0x10000;

		drawSquare(gl, 0.5f, 0.0f, one, one, 0, one );

	}

	@Override
	public void onSurfaceChanged(GL10 gl, int width, int height) {

		gl.glViewport(0, 0, width, height);

	}

	@Override
	public void onSurfaceCreated(GL10 gl, EGLConfig config) {

	}


}