Tag Archive: Starfield


Starfield Day 3

(link fixed)

เพิ่มยานอวกาศ(Pyramid)
เรียกการใช้งานของเซนเซอร์วัดความลาดเอียง


(ภาพจาก emulator)

//ตัวอย่าง Code ที่เรียกใช้เซนเซอร์วัดความลาดเอียงของ Android
package com.peacedev.shooting;

import android.app.Activity;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;

public class Sensors extends Activity implements SensorEventListener  {

	SensorManager sensorManager = null;

	public  float ox;
	public  float oy;
	public  float oz;

	public  float ax;
	public  float ay;
	public  float az;

	 @Override
	 public void onCreate(Bundle savedInstanceState) {
	    super.onCreate(savedInstanceState);
	    sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
	 }

	 @Override
	 protected void onResume() {
	    super.onResume();
	    sensorManager.registerListener(this, sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), sensorManager.SENSOR_DELAY_GAME);
	    sensorManager.registerListener(this, sensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION), sensorManager.SENSOR_DELAY_GAME);
	 }

	public void onAccuracyChanged(android.hardware.Sensor arg0, int arg1) {
		// TODO Auto-generated method stub

	}

	public void onSensorChanged(SensorEvent event) {
		// TODO Auto-generated method stub
		  switch (event.sensor.getType()){
          case Sensor.TYPE_ACCELEROMETER:
        	  ax = event.values[0];
        	  ay = event.values[1];
        	  az = event.values[2];
          break;
      case Sensor.TYPE_ORIENTATION:
    	  ox = event.values[0];
    	  oy = event.values[1];
    	  oz = event.values[2];
      break;
		  }
	}

	@Override
	 protected void onStop() {
	    super.onStop();
	    sensorManager.unregisterListener(this, sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER));
	    sensorManager.unregisterListener(this, sensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION));
	 }

}

download link (.apk 37KB)
http://dl.dropbox.com/u/30815442/android/Shooting%20256%20d3r.apk

Starfield Day 2

(link fixed)

สิ่งที่เพิ่มเข้ามาได้แก่ Speed Optimization, Rendering Optimization การแสดงอักษร การคำนวน FPS
ระบบ Full screen


(ภาพจาก emulator)

การแสดงตัวอักษรบน Opengl ES ใน Android ใช้วิธี Render จาก Canvas ลงบน Texture

		Bitmap bitmap = Bitmap.createBitmap(512, 512, Bitmap.Config.ARGB_4444);
		Canvas canvas = new Canvas(bitmap);
		bitmap.eraseColor(0);

		// Draw the text
		Paint textPaint = new Paint();
		textPaint.setTextSize(fontsize);

		textPaint.setAntiAlias(true);

		textPaint.setARGB(0xff, 0xaa, 0xaa, 0xff);
		canvas.drawText(text, 0+2,32+2, textPaint);

		//Generate one texture pointer...
		gl.glGenTextures(1, textures, 0);
		//...and bind it to our array
		gl.glBindTexture(GL10.GL_TEXTURE_2D, textures[0]);

		//Create Nearest Filtered Texture
		gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_NEAREST);
		gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR);

		//Different possible texture parameters, e.g. GL10.GL_CLAMP_TO_EDGE
		gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_S, GL10.GL_REPEAT);
		gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_T, GL10.GL_REPEAT);

		//Use the Android GLUtils to specify a two-dimensional texture image from our bitmap
		GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap, 0);

		//Clean up
		bitmap.recycle();

download link (32KB)
http://dl.dropbox.com/u/30815442/android/Shooting%20256%20d2r.apk

Starfield Day 1

หลังจากที่ไม่ค่อยได้ติดตามอะไรอย่างจริงจังมาสักพักใหญ่ ช่วงหลังนี้รู้สึกว่าโลกแห่งเทคโนโลยีมันหมุนไปเร็วมาก เร็วจนรู้สึกว่าเราชักเริ่มจะเอ๊าท์เกินไปละ
เลยอยากจะเคาะสนิมตัวเองเสียหน่อย ช่วงนี้หันมาศึกษาการพัฒนาโปรแกรมบนมือถือระบบ Android และอยากจะเน้นไปทางด้านการเขียนโปรแกรมประเภท interactive graphic และ animation เพราะสายนี้อาศัยเทคนิคต่าง ๆ เยอะดี และดูตื่นตาตื่นใจดีด้วยเหมาะกับการเคาะสนิมเป็นอย่างยิ่ง
รู้สึกทึ่งนิด ๆ กับศักยภาพของ Hardware ของอุปกรณ์พกพาขนาดเล็กแบบนี้

โปรเจคของวันแรกนี้จะเป็นการจำลอง Starfield แบบง่าย ๆ ขึ้นมาดูครับ

สิ่งที่ทำไปในวันแรกนี้ก็จะเป็นการเรียนรู้ระบบ Opengl ES กับการเขียนภาษา Java และ Environment ของการพัฒนา Software บนระบบ Android
ทำไปก็ทึ่งไปกับความเร็วของ GPU และ CPU บนมือถือสมัยนี้
หลังจากลองทำดูเล่น ๆ ก็รู้สึกว่าจินตนาการโลดแล่นสมองโปร่งดีครับ เหมาะกับการแก้เบื่อเป็นอย่างยิ่ง 🙂

ใน Opengl Es ไม่มี Display list แล้ว ปัจจุบันหันมาใช้ Vertex buffer object กันแทน (แต่ผมชอบ Display List มากกว่า 😦 )
การใช้ point sprite ก็ยุ่งยาก เลยใช้ vertex สำหรับ เรนเดอร์ starfield แทนครับ

//การใช้ VBO
	private float vertices[] = {
						-1.0f, -1.0f, 1.0f, //v0
						1.0f, -1.0f, 1.0f, 	//v1
						-1.0f, 1.0f, 1.0f, 	//v2
						1.0f, 1.0f, 1.0f, 	//v3

											};
	private float normals[] = {
			// Normals
			0.0f, 0.0f, 1.0f,
			0.0f, 0.0f, -1.0f,
			0.0f, 1.0f, 0.0f,
			0.0f, -1.0f, 0.0f, 

								};
	private float texture[] = {
			0.0f, 0.0f,
			0.0f, 1.0f,
			1.0f, 0.0f,
			1.0f, 1.0f,

						};
	private byte indices[] = {
						// Faces definition
						0, 1, 3, 0, 3, 2, 		

												};

download link (53KB)
http://uploadmirrors.com/download/1KBRTX1I/Shooting_256_r.apk