1: package com.programmez.opengl.exercice1;
  2: 
  3: import javax.microedition.khronos.egl.EGLConfig;
  4: import javax.microedition.khronos.opengles.GL10;
  5: import com.programmez.opengl.exercice1.R;
  6: 
  7: import android.content.Context;
  8: import android.opengl.GLSurfaceView;
  9: 
 10: import static android.opengl.GLES10.*;
 11: 
 12: class CubeRenderer implements GLSurfaceView.Renderer {
 13:         private final Context context;
 14: 
 15:         private final GLCube cube = new GLCube();
 16:         private long startTime;
 17:         private float mAngleX;
 18:         private float mAngleY;
 19: 
 20:         public float getmAngleX() {
 21:                 return mAngleX;
 22:         }
 23: 
 24:         public void setmAngleX(float mAngleX) {
 25:                 this.mAngleX = mAngleX;
 26:         }
 27: 
 28:         public float getmAngleY() {
 29:                 return mAngleY;
 30:         }
 31: 
 32:         public void setmAngleY(float mAngleY) {
 33:                 this.mAngleY = mAngleY;
 34:         }
 35: 
 36:         CubeRenderer(Context context) {
 37:                 this.context = context;
 38:         }
 39: 
 40:         public void onSurfaceCreated(GL10 gl, EGLConfig config) {
 41: 
 42:                 glDisable(GL10.GL_DITHER);
 43:                 glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_FASTEST);
 44: 
 45:                 startTime = System.currentTimeMillis();
 46: 
 47:                 // Define the lighting

 48:                 float lightAmbient[] = new float[] { 0.2f, 0.2f, 0.2f, 1 };
 49:                 float lightDiffuse[] = new float[] { 1, 1, 1, 1 };
 50:                 float[] lightPos = new float[] { 1, 1, 1, 1 };
 51:                 glEnable(GL10.GL_LIGHTING);
 52:                 glEnable(GL10.GL_LIGHT0);
 53:                 glLightfv(GL10.GL_LIGHT0, GL10.GL_AMBIENT, lightAmbient, 0);
 54:                 glLightfv(GL10.GL_LIGHT0, GL10.GL_DIFFUSE, lightDiffuse, 0);
 55:                 glLightfv(GL10.GL_LIGHT0, GL10.GL_POSITION, lightPos, 0);
 56: 
 57:                 // What is the cube made of?

 58:                 float matAmbient[] = new float[] { 1, 1, 1, 1 };
 59:                 float matDiffuse[] = new float[] { 1, 1, 1, 1 };
 60:                 glMaterialfv(GL10.GL_FRONT_AND_BACK, GL10.GL_AMBIENT, matAmbient, 0);
 61:                 glMaterialfv(GL10.GL_FRONT_AND_BACK, GL10.GL_DIFFUSE, matDiffuse, 0);
 62: 
 63:                 // Set up any OpenGL options we need

 64:                 glEnable(GL10.GL_DEPTH_TEST);
 65:                 glDepthFunc(GL10.GL_LEQUAL);
 66:                 glEnableClientState(GL10.GL_VERTEX_ARRAY);
 67: 
 68:                 // Enable textures

 69:                 glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
 70:                 glEnable(GL10.GL_TEXTURE_2D);
 71: 
 72:                 // Load the cube's texture from a bitmap

 73:                 GLCube.loadTexture(gl, context, R.drawable.texture_cube);
 74:         }
 75: 
 76:         public void onSurfaceChanged(GL10 gl, int width, int height) {
 77:                 glViewport(0, 0, width, height);
 78:                 glMatrixMode(GL10.GL_PROJECTION);
 79:                 glLoadIdentity();
 80:                 float ratio = (float) width / height;
 81:                 // GLU.gluPerspective(gl, 45.0f, ratio, 1, 100f);

 82:                 glFrustumf(-ratio, ratio, -1, 1, 1, 10);
 83:                 
 84:                 //la camÃİra par dÃİfaut est en 0,0,0

 85:         }
 86: 
 87:         public void onDrawFrame(GL10 gl) {
 88:                 glDisable(GL10.GL_DITHER);
 89: 
 90:                 // Clear the screen to black

 91:                 glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
 92: 
 93:                 // Position model so we can see it

 94:                 
 95:                 // de cette manière on va tourner toute la scène

 96:                 //si je voulais seulement dÃİplacer la camÃİra...

 97:                 //il faudrait faire un push/pop, puis dÃİplacer camÃİra??

 98:                 
 99:                 
100:                 glMatrixMode(GL10.GL_MODELVIEW);
101:                 glLoadIdentity();
102:                 glTranslatef(0, 0, -2.0f);//bouge le cube uniquement

103: 
104:                 // Other drawing commands go here...

105: 
106:                 // Set rotation angle based on the time

107:                 long now = System.currentTimeMillis();
108:                 long elapsed = now - startTime;
109: 
110:                 glRotatef( (mAngleX), 1, 0, 0);
111:                 glRotatef( (mAngleY), 0, 1, 0);
112:                 startTime = now;
113: 
114:                 // Draw the model

115:                 cube.draw(gl);
116:         }
117: }