Dessiner des objets à l'écran est une fonctionnalité assez basique d'OpenGL, mais vous pouvez
Les classes du framework graphique Android, y compris Canvas
et
Objets Drawable
. OpenGL ES offre des fonctionnalités supplémentaires
déplacer et transformer des objets dessinés en trois dimensions ou d'autres manières uniques de créer
des expériences utilisateur
convaincantes.
Dans cette leçon, vous allez faire un pas de plus dans l'utilisation d'OpenGL ES en apprenant à ajouter du mouvement à une forme avec rotation.
Faire pivoter une forme
La rotation d'un objet de dessin avec OpenGL ES 2.0 est relativement simple. Dans votre moteur de rendu, créez une autre matrice de transformation (matrice de rotation), puis la combiner à votre projection et Matrices de transformation des vues de caméra:
Kotlin
private val rotationMatrix = FloatArray(16) override fun onDrawFrame(gl: GL10) { val scratch = FloatArray(16) ... // Create a rotation transformation for the triangle val time = SystemClock.uptimeMillis() % 4000L val angle = 0.090f * time.toInt() Matrix.setRotateM(rotationMatrix, 0, angle, 0f, 0f, -1.0f) // Combine the rotation matrix with the projection and camera view // Note that the vPMatrix factor *must be first* in order // for the matrix multiplication product to be correct. Matrix.multiplyMM(scratch, 0, vPMatrix, 0, rotationMatrix, 0) // Draw triangle mTriangle.draw(scratch) }
Java
private float[] rotationMatrix = new float[16]; @Override 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(rotationMatrix, 0, angle, 0, 0, -1.0f); // Combine the rotation matrix with the projection and camera view // Note that the vPMatrix factor *must be first* in order // for the matrix multiplication product to be correct. Matrix.multiplyMM(scratch, 0, vPMatrix, 0, rotationMatrix, 0); // Draw triangle mTriangle.draw(scratch); }
Si votre triangle ne pivote pas après avoir apporté ces modifications, assurez-vous d'avoir mis en commentaire le
GLSurfaceView.RENDERMODE_WHEN_DIRTY
, comme décrit dans la section suivante.
Activer l'affichage continu
Si vous avez suivi avec diligence l'exemple de code de cette classe jusqu'ici, assurez-vous
veillez à mettre en commentaire la ligne qui définit le mode de rendu uniquement si elle est sale, sinon OpenGL
fait pivoter la forme d'un incrément, puis attend un appel à requestRender()
à partir du conteneur GLSurfaceView
:
Kotlin
class MyGLSurfaceView(context: Context) : GLSurfaceView(context) { init { ... // 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: // renderMode = GLSurfaceView.RENDERMODE_WHEN_DIRTY } }
Java
public class MyGLSurfaceView(Context context) extends GLSurfaceView { ... // 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: //setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY); }
À moins que vous n'ayez des objets qui changent sans aucune interaction de l'utilisateur, il est généralement recommandé d'avoir cette indicateur activé. Préparez-vous à annuler la mise en commentaire de ce code, car la prochaine leçon rend cet appel applicable encore une fois.