page.title=Adding Motion
parent.title=Displaying Graphics with OpenGL ES
parent.link=index.html

trainingnavtop=true
previous.title=Applying Projection and Camera Views
previous.link=projection.html
next.title=Responding to Touch Events
next.link=touch.html

@jd:body

<div id="tb-wrapper">
<div id="tb">

<h2>This lesson teaches you to</h2>
<ol>
  <li><a href="#rotate-gl1">Rotate a Shape</a></li>
  <li><a href="#cont-render">Enable Continuous Rendering</a></li>
</ol>

<h2>You should also read</h2>
<ul>
  <li><a href="{@docRoot}guide/topics/graphics/opengl.html">OpenGL</a></li>
</ul>

<div class="download-box">
 <a href="http://developer.android.com/shareables/training/OpenGLES.zip"
class="button">Download the sample</a>
 <p class="filename">OpenGLES.zip</p>
</div>

</div>
</div>

<p>Drawing objects on screen is a pretty basic feature of OpenGL, but you can do this with other
Android graphics framwork classes, including {@link android.graphics.Canvas} and
{@link android.graphics.drawable.Drawable} objects. OpenGL ES provides additional capabilities for
moving and transforming drawn objects in three dimensions or in other unique ways to create
compelling user experiences.</p>

<p>In this lesson, you take another step forward into using OpenGL ES by learning how to add motion
to a shape with rotation.</p>


<h2 id="rotate">Rotate a Shape</h2>

<p>Rotating a drawing object with OpenGL ES 2.0 is relatively simple. In your renderer, create
another transformation matrix (a rotation matrix) and then combine it with your projection and
camera view transformation matrices:</p>

<pre>
private float[] mRotationMatrix = new float[16];
public void onDrawFrame(GL10 gl) {
    float[] scratch = new float[16];

    ...

    // Create a rotation transformation for the triangle
    long time = SystemClock.uptimeMillis() % 4000L;
    float angle = 0.090f * ((int) time);
    Matrix.setRotateM(mRotationMatrix, 0, angle, 0, 0, -1.0f);

    // Combine the rotation matrix with the projection and camera view
    // Note that the mMVPMatrix factor *must be first* in order
    // for the matrix multiplication product to be correct.
    Matrix.multiplyMM(scratch, 0, mMVPMatrix, 0, mRotationMatrix, 0);

    // Draw triangle
    mTriangle.draw(scratch);
}
</pre>

<p>If your triangle does not rotate after making these changes, make sure you have commented out the
{@link android.opengl.GLSurfaceView#RENDERMODE_WHEN_DIRTY GLSurfaceView.RENDERMODE_WHEN_DIRTY}
setting, as described in the next section.</p>


<h2 id="cont-render">Enable Continuous Rendering</h2>

<p>If you have diligently followed along with the example code in this class to this point, make
sure you comment out the line that sets the render mode only draw when dirty, otherwise OpenGL
rotates the shape only one increment and then waits for a call to {@link
android.opengl.GLSurfaceView#requestRender requestRender()} from the {@link
android.opengl.GLSurfaceView} container:</p>

<pre>
public MyGLSurfaceView(Context context) {
    ...
    // Render the view only when there is a change in the drawing data.
    // To allow the triangle to rotate automatically, this line is commented out:
    <strong>//setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY);</strong>
}
</pre>

<p>Unless you have objects changing without any user interaction, it’s usually a good idea have this
flag turned on. Be ready to uncomment this code, because the next lesson makes this call applicable
once again.</p>
