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: }