• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2011 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package com.example.android.opengl;
17 
18 import javax.microedition.khronos.egl.EGLConfig;
19 import javax.microedition.khronos.opengles.GL10;
20 
21 import android.opengl.GLSurfaceView;
22 import android.opengl.GLU;
23 
24 /**
25  * Provides drawing instructions for a GLSurfaceView object. This class
26  * must override the OpenGL ES drawing lifecycle methods:
27  * <ul>
28  *   <li>{@link android.opengl.GLSurfaceView.Renderer#onSurfaceCreated}</li>
29  *   <li>{@link android.opengl.GLSurfaceView.Renderer#onDrawFrame}</li>
30  *   <li>{@link android.opengl.GLSurfaceView.Renderer#onSurfaceChanged}</li>
31  * </ul>
32  */
33 public class MyGLRenderer implements GLSurfaceView.Renderer {
34 
35     private Triangle mTriangle;
36     private Square mSquare;
37     private float mAngle;
38 
39     @Override
onSurfaceCreated(GL10 gl, EGLConfig config)40     public void onSurfaceCreated(GL10 gl, EGLConfig config) {
41         // Set the background frame color
42         gl.glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
43 
44         mTriangle = new Triangle();
45         mSquare = new Square();
46     }
47 
48     @Override
onDrawFrame(GL10 gl)49     public void onDrawFrame(GL10 gl) {
50 
51         // Draw background color
52         gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
53 
54         // Set GL_MODELVIEW transformation mode
55         gl.glMatrixMode(GL10.GL_MODELVIEW);
56         gl.glLoadIdentity();   // reset the matrix to its default state
57 
58         // When using GL_MODELVIEW, you must set the view point
59         GLU.gluLookAt(gl, 0, 0, -3, 0f, 0f, 0f, 0f, 1.0f, 0.0f);
60 
61         // Draw square
62         mSquare.draw(gl);
63 
64         // Create a rotation for the triangle
65 
66         // Use the following code to generate constant rotation.
67         // Leave this code out when using TouchEvents.
68         // long time = SystemClock.uptimeMillis() % 4000L;
69         // float angle = 0.090f * ((int) time);
70 
71         gl.glRotatef(mAngle, 0.0f, 0.0f, 1.0f);
72 
73         // Draw triangle
74         mTriangle.draw(gl);
75     }
76 
77     @Override
onSurfaceChanged(GL10 gl, int width, int height)78     public void onSurfaceChanged(GL10 gl, int width, int height) {
79         // Adjust the viewport based on geometry changes
80         // such as screen rotations
81         gl.glViewport(0, 0, width, height);
82 
83         // make adjustments for screen ratio
84         float ratio = (float) width / height;
85         gl.glMatrixMode(GL10.GL_PROJECTION);        // set matrix to projection mode
86         gl.glLoadIdentity();                        // reset the matrix to its default state
87         gl.glFrustumf(-ratio, ratio, -1, 1, 3, 7);  // apply the projection matrix
88     }
89 
90     /**
91      * Returns the rotation angle of the triangle shape (mTriangle).
92      *
93      * @return - A float representing the rotation angle.
94      */
getAngle()95     public float getAngle() {
96         return mAngle;
97     }
98 
99     /**
100      * Sets the rotation angle of the triangle shape (mTriangle).
101      */
setAngle(float angle)102     public void setAngle(float angle) {
103         mAngle = angle;
104     }
105 }