Wednesday, June 20, 2012

change background color in openGL in android


package home.backGroundColorChange;

import java.util.Random;

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

import android.app.Activity;
import android.content.Context;
import android.opengl.GLSurfaceView;
import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;


public class ClearActivity extends Activity
{
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mGLView = new ClearGLSurfaceView(this);
       
        setContentView(mGLView);
    }

    @Override
    protected void onPause() {
        super.onPause();
        mGLView.onPause();
    }

    @Override
    protected void onResume() {
        super.onResume();
        mGLView.onResume();
    }

    private GLSurfaceView mGLView;
}


class ClearGLSurfaceView extends GLSurfaceView
{
    ClearRenderer mRenderer;
   
    public ClearGLSurfaceView(Context context)
    {
        super(context);
        mRenderer = new ClearRenderer();
        setRenderer(mRenderer);
    }

    public boolean onTouchEvent(final MotionEvent event)
    {
        final Float blue_color=this.genarate_random_number();
        queueEvent(new Runnable()
                                {
                                    public void run()
                                    {
                                        mRenderer.setColor(event.getX() / getWidth(),
                                                event.getY() / getHeight(), blue_color);
                                    }
                                }  
                 );
       
        Log.d("getWidth="+getWidth()+" "+"getHeight="+getHeight()+"event.getX="+event.getX()+" "+"event.getY="+event.getY()+" ","blueColor="+blue_color);
            return true;
    }
   
    public float genarate_random_number()
    {
        Random rand = new Random();
       
       
        float pick = rand.nextFloat();
       
        return pick;
    }

}


class ClearRenderer implements GLSurfaceView.Renderer
{
    private float mRed;
    private float mGreen;
    private float mBlue;
    public void onSurfaceCreated(GL10 gl, EGLConfig config) {
        // Do nothing special.
    }

    public void onSurfaceChanged(GL10 gl, int w, int h) {
        gl.glViewport(0, 0, w, h);
    }

    public void onDrawFrame(GL10 gl) {
        gl.glClearColor(mRed, mGreen, mBlue, 0.0f);
        gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
    }

    public void setColor(float r, float g, float b)
    {
        mRed = r;
        mGreen = g;
        mBlue = b;
    }

}

generate random number in java / android


 import java.util.Random;
 public class RandomTest
 {

  public static void main(String[] args)
 {
    Random rand = new Random();

    for(int i=0;i<10;i++)
  {
      float pick = rand.nextFloat(); // random between 0.0 to 1.0
      System.out.println(pick);
  }
  }

  Random rand = new Random();
 }


////////////////////////////////////////////////////////////


 import java.util.Random;
 public class RandomTest
 {

   public static void main(String[] args)
  {
     Random rand = new Random(20071969);

     for(int i=0;i<10;i++)
   {
       int pick = rand.nextInt(10);
       System.out.println(pick);
   }
   }

   Random rand = new Random();
 }

Thursday, June 14, 2012

android openGL touch events

HelloOpenGLES10.java
---------------------------------------------

package com.example.android.apis.graphics;

import android.app.Activity;
import android.content.Context;
import android.opengl.GLSurfaceView;
import android.os.Bundle;
import android.view.MotionEvent;

public class HelloOpenGLES10 extends Activity
{
    private GLSurfaceView mGLView;
 
 

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        // Create a GLSurfaceView instance and set it
        // as the ContentView for this Activity.
        mGLView = new HelloOpenGLES10SurfaceView(this);
        setContentView(mGLView);
    }
 
    @Override
    protected void onPause()
    {
        super.onPause();
        mGLView.onPause();
    }
 
    @Override
    protected void onResume()
    {
        super.onResume();
        // The following call resumes a paused rendering thread.
        // If you de-allocated graphic objects for onPause()
        // this is a good place to re-allocate them.
        mGLView.onResume();
    }
}

class HelloOpenGLES10SurfaceView extends GLSurfaceView
{
    private final float TOUCH_SCALE_FACTOR = 180.0f / 320;
    private HelloOpenGLES10Renderer mRenderer;
    private float mPreviousX;
    private float mPreviousY;

    public HelloOpenGLES10SurfaceView(Context context){
        super(context);
        // set the mRenderer member
        mRenderer = new HelloOpenGLES10Renderer();
        setRenderer(mRenderer);
     
        // Render the view only when there is a change
        setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY);
    }
 
    @Override
    public boolean onTouchEvent(MotionEvent e) {
        // MotionEvent reports input details from the touch screen
        // and other input controls. In this case, you are only
        // interested in events where the touch position changed.

        float x = e.getX();
        float y = e.getY();
     
        switch (e.getAction()) {
            case MotionEvent.ACTION_MOVE:
 
                float dx = x - mPreviousX;
                float dy = y - mPreviousY;
 
                // reverse direction of rotation above the mid-line
                if (y > getHeight() / 2) {
                  dx = dx * -1 ;
                }
 
                // reverse direction of rotation to left of the mid-line
                if (x < getWidth() / 2) {
                  dy = dy * -1 ;
                }
           
                mRenderer.mAngle += (dx + dy) * TOUCH_SCALE_FACTOR;
                requestRender();
        }

        mPreviousX = x;
        mPreviousY = y;
        return true;
    }
}



HelloOpenGLES10Renderer.java
-----------------------------------------------------

package com.example.android.apis.graphics;

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;
import android.opengl.GLU;

public class HelloOpenGLES10Renderer implements GLSurfaceView.Renderer {
    private FloatBuffer triangleVB;
    public float mAngle;
 
    public void onSurfaceCreated(GL10 gl, EGLConfig config)
    {
        // Set the background frame color
        gl.glClearColor(0.1f, 0.5f, 0.5f, 1.0f);
     
     // Enable use of vertex arrays
        gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
    }

    public void onDrawFrame(GL10 gl) {
        // Redraw background color
        gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
     
     // Set GL_MODELVIEW transformation mode
        gl.glMatrixMode(GL10.GL_MODELVIEW);
        gl.glLoadIdentity();                      // reset the matrix to its default state

        // When using GL_MODELVIEW, you must set the camera view
        GLU.gluLookAt(gl, 0, 0, -5, 0f, 0f, 0f, 0f, 1.0f, 0.0f);
     
     // Create a rotation for the triangle
        //long time = SystemClock.uptimeMillis() % 4000L;
        //float angle = 0.090f * ((int) time);
        gl.glRotatef(mAngle, 0.0f, 0.0f, 1.0f);  
     
        // initialize the triangle vertex array
        initShapes();
     
     // Draw the triangle
        gl.glColor4f(0.63671875f, 0.76953125f, 0.22265625f, 0.0f);
        gl.glVertexPointer(3, GL10.GL_FLOAT, 0, triangleVB);
        gl.glDrawArrays(GL10.GL_TRIANGLES, 0, 3);
    }

    public void onSurfaceChanged(GL10 gl, int width, int height)
    {
        gl.glViewport(0, 0, width, height);
     
        gl.glViewport(0, 0, width, height);
     
        // make adjustments for screen ratio
        float ratio = (float) width / height;
        gl.glMatrixMode(GL10.GL_PROJECTION);        // set matrix to projection mode
        gl.glLoadIdentity();                        // reset the matrix to its default state
        gl.glFrustumf(-ratio, ratio, -1, 1, 3, 7);  // apply the projection matrix
    }

    private void initShapes()
    {

        float triangleCoords[] = {
                // X, Y, Z
                -0.5f, -0.25f, 0,
                0.5f, -0.25f, 0,
                0.0f, 0.559016994f, 0
                                    };

        // initialize vertex Buffer for triangle
        ByteBuffer vbb = ByteBuffer.allocateDirect(
        // (# of coordinate values * 4 bytes per float)
                triangleCoords.length * 4);
        vbb.order(ByteOrder.nativeOrder());// use the device hardware's native
                                           // byte order
        triangleVB = vbb.asFloatBuffer(); // create a floating point buffer from
                                          // the ByteBuffer
        triangleVB.put(triangleCoords); // add the coordinates to the
                                        // FloatBuffer
        triangleVB.position(0); // set the buffer to read the first coordinate

    }

}