Render08.java :  » Graphics-3D-2D-OpenGL » ogles-tutorial-android » com » nbx » app » neheport » render » Android Open Source

Android Open Source » Graphics 3D 2D OpenGL » ogles tutorial android 
ogles tutorial android » com » nbx » app » neheport » render » Render08.java
package com.nbx.app.neheport.render;

import java.nio.FloatBuffer;

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

import com.nbx.app.neheport.R;
import com.nbx.library.glutes.util;

import android.content.Context;
import android.graphics.Bitmap;
import android.opengl.GLU;
import android.opengl.GLUtils;
import android.view.KeyEvent;
import android.view.MotionEvent;

public class Render08 extends RenderBase {
    
    private float rotx = 0.0f;
    private float roty = 0.0f;
    
    private float speed = 2.0f;
    
    private float z = -5.0f;
    
    private int mTextureID[];
    
    private boolean blend = true;
    
    private float box[] = {
            // FRONT
            -0.5f, -0.5f,  0.5f,
             0.5f, -0.5f,  0.5f,
            -0.5f,  0.5f,  0.5f,
             0.5f,  0.5f,  0.5f,
            // BACK
            -0.5f, -0.5f, -0.5f,
            -0.5f,  0.5f, -0.5f,
             0.5f, -0.5f, -0.5f,
             0.5f,  0.5f, -0.5f,
            // LEFT
            -0.5f, -0.5f,  0.5f,
            -0.5f,  0.5f,  0.5f,
            -0.5f, -0.5f, -0.5f,
            -0.5f,  0.5f, -0.5f,
            // RIGHT
             0.5f, -0.5f, -0.5f,
             0.5f,  0.5f, -0.5f,
             0.5f, -0.5f,  0.5f,
             0.5f,  0.5f,  0.5f,
            // TOP
            -0.5f,  0.5f,  0.5f,
             0.5f,  0.5f,  0.5f,
             -0.5f,  0.5f, -0.5f,
             0.5f,  0.5f, -0.5f,
            // BOTTOM
            -0.5f, -0.5f,  0.5f,
            -0.5f, -0.5f, -0.5f,
             0.5f, -0.5f,  0.5f,
             0.5f, -0.5f, -0.5f,
    };

    private float texCoords[] = {
            // FRONT
             0.0f, 0.0f,
             1.0f, 0.0f,
             0.0f, 1.0f,
             1.0f, 1.0f,
            // BACK
             1.0f, 0.0f,
             1.0f, 1.0f,
             0.0f, 0.0f,
             0.0f, 1.0f,
            // LEFT
             1.0f, 0.0f,
             1.0f, 1.0f,
             0.0f, 0.0f,
             0.0f, 1.0f,
            // RIGHT
             1.0f, 0.0f,
             1.0f, 1.0f,
             0.0f, 0.0f,
             0.0f, 1.0f,
            // TOP
             0.0f, 0.0f,
             1.0f, 0.0f,
             0.0f, 1.0f,
             1.0f, 1.0f,
            // BOTTOM
             1.0f, 0.0f,
             1.0f, 1.0f,
             0.0f, 0.0f,
             0.0f, 1.0f
    };
    
    private float LightAmbient[]=     { 0.5f, 0.5f, 0.5f, 1.0f };
    private float LightDiffuse[]=     { 1.0f, 1.0f, 1.0f, 1.0f };
    private float LightPosition[]=    { 0.0f, 0.0f, 2.0f, 1.0f };    
   
    private FloatBuffer mCubeVetexBuffer;
    private FloatBuffer mCubeTexBuffer;
    
    private FloatBuffer mLightAmbientBuffer;
    private FloatBuffer mLightDiffuseBuffer;
    private FloatBuffer mLightPositionBuffer;
    
    public Render08(Context context) {
        super(context);
    }

    public void onSurfaceCreated(GL10 gl, EGLConfig config) {
        mCubeVetexBuffer = util.createFloatBuffer(box);
        mCubeTexBuffer = util.createFloatBuffer(texCoords);
        
        mLightAmbientBuffer = util.createFloatBuffer(LightAmbient);
        mLightDiffuseBuffer = util.createFloatBuffer(LightDiffuse);
        mLightPositionBuffer = util.createFloatBuffer(LightPosition);
        
        loadBitmapTex(gl);
 
        gl.glEnable(GL10.GL_TEXTURE_2D); // Enable Texture Mapping
        gl.glShadeModel(GL10.GL_SMOOTH); // Enable Smooth Shading
        gl.glClearColor(0.0f, 0.0f, 0.0f, 0.5f); // Black Background
        gl.glClearDepthf(1.0f); // Depth Buffer Setup
        gl.glEnable(GL10.GL_DEPTH_TEST); // Enables Depth Testing
        gl.glDepthFunc(GL10.GL_LEQUAL); // The Type Of Depth Testing To Do
        gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_NICEST);  // Really Nice Perspective Calculations

        gl.glLightfv(GL10.GL_LIGHT1, GL10.GL_AMBIENT, mLightAmbientBuffer); // Setup The Ambient Light
        gl.glLightfv(GL10.GL_LIGHT1, GL10.GL_DIFFUSE, mLightDiffuseBuffer); // Setup The Diffuse Light
        gl.glLightfv(GL10.GL_LIGHT1, GL10.GL_POSITION, mLightPositionBuffer); // Position The Light
        gl.glEnable(GL10.GL_LIGHT1); // Enable Light One

        gl.glColor4f(1.0f, 1.0f, 1.0f, 0.5f); // Full Brightness. 50% Alpha
        gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE); // Set The Blending Function For Translucency
    }
    
    public void onDrawFrame(GL10 gl) {        
        
        gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT); // Clear Screen And Depth Buffer
        gl.glLoadIdentity();
        
        if(blend)
        {
            gl.glEnable(GL10.GL_BLEND);         // Turn Blending On
            gl.glDisable(GL10.GL_DEPTH_TEST);   // Turn Depth Testing Off
        }
        else
        {
            gl.glDisable(GL10.GL_BLEND);        // Turn Blending Off
            gl.glEnable(GL10.GL_DEPTH_TEST);    // Turn Depth Testing On
        }
        
        // Cube
        gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
        gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
        
        gl.glBindTexture(GL10.GL_TEXTURE_2D, mTextureID[0]);
        
        gl.glVertexPointer(3, GL10.GL_FLOAT, 0, mCubeVetexBuffer);
        gl.glTexCoordPointer(2, GL10.GL_FLOAT, 0, mCubeTexBuffer);

        gl.glPushMatrix();
        gl.glTranslatef(0.0f, 0.0f, z);
        gl.glRotatef(rotx, 1, 0, 0);
        gl.glRotatef(roty, 0, 1, 0);
        
        // FRONT AND BACK
        //gl.glNormal3f(0.0f, 0.0f, 1.0f);
        gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, 4);
        //gl.glNormal3f(0.0f, 0.0f, -1.0f);
        gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 4, 4);

        // LEFT AND RIGHT
        //gl.glNormal3f(-1.0f, 0.0f, 0.0f);
        gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 8, 4);
        //gl.glNormal3f(1.0f, 0.0f, 0.0f);
        gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 12, 4);

        // TOP AND BOTTOM
        //gl.glNormal3f(0.0f, 1.0f, 0.0f);
        gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 16, 4);
        //gl.glNormal3f(0.0f, -1.0f, 0.0f);
        gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 20, 4);
   
        gl.glPopMatrix();

        gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
        gl.glDisableClientState(GL10.GL_TEXTURE_COORD_ARRAY);

        rotx += (speed + 0.1f);
        roty += speed;
    }

    public void onSurfaceChanged(GL10 gl, int width, int height) {
        gl.glViewport(0,0,width,height);                       // Reset The Current Viewport

        gl.glMatrixMode(GL10.GL_PROJECTION);                        // Select The Projection Matrix
        gl.glLoadIdentity();                                   // Reset The Projection Matrix

        // Calculate The Aspect Ratio Of The Window
        GLU.gluPerspective(gl, 45.0f,(float)width/(float)height,0.1f,100.0f);

        gl.glMatrixMode(GL10.GL_MODELVIEW);                         // Select The Modelview Matrix
        gl.glLoadIdentity();   
    }
    
    private void loadBitmapTex(GL10 gl){
        mTextureID = new int[1];
        gl.glGenTextures(1, mTextureID, 0);

        Bitmap bmp = util.getTextureFromBitmapResource(mContext, R.drawable.glass);

        gl.glBindTexture(GL10.GL_TEXTURE_2D, mTextureID[0]);
        gl.glTexParameterf(GL10.GL_TEXTURE_2D,GL10.GL_TEXTURE_MAG_FILTER,GL10.GL_NEAREST);
        gl.glTexParameterf(GL10.GL_TEXTURE_2D,GL10.GL_TEXTURE_MIN_FILTER,GL10.GL_NEAREST);
        GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bmp, 0);
        
        bmp.recycle();

        return;
    }
    
    @Override
    public boolean handleTouchEvent(MotionEvent event) {
        if (event.getAction() == MotionEvent.ACTION_UP) {
            blend = !blend;
            return true;
        }
        return false;
    }

    @Override
    public boolean handleKeyEvent(int keyCode, KeyEvent event) {
        if (event.getAction() == KeyEvent.ACTION_UP) {

            switch (keyCode) {
            case KeyEvent.KEYCODE_DPAD_UP: {
                z -= 2.0f;
                return true;
            }
            case KeyEvent.KEYCODE_DPAD_DOWN: {
                z += 2.0f;
                return true;
            }
            case KeyEvent.KEYCODE_DPAD_LEFT: {
                if (speed > 0.1f) {
                    speed -= 0.1f;
                }
                return true;
            }
            case KeyEvent.KEYCODE_DPAD_RIGHT: {
                speed += 0.1f;
                return true;
            }
            }
        }
        return false;
    }
}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.