Das Zeichnen von Objekten auf dem Bildschirm ist eine ziemlich grundlegende Funktion von OpenGL. Sie können dies jedoch mit anderen
Grafik-Framework-Klassen von Android, einschließlich Canvas
und
Drawable
-Objekte. OpenGL ES bietet zusätzliche Funktionen für
das Verschieben und Transformieren gezeichneter Objekte in drei Dimensionen oder auf andere einzigartige Weise,
User Experiences zu schaffen.
In dieser Lektion lernen Sie, wie Sie Bewegungselemente hinzufügen, in eine Form mit Drehung.
Formen drehen
Das Drehen eines Zeichenobjekts mit OpenGL ES 2.0 ist relativ einfach. Erstellen Sie im Renderer eine weitere Transformationsmatrix (eine Rotationsmatrix) und kombinieren Sie diese mit Ihrer Projektion und Transformationsmatrizen der Kameraansicht:
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); }
Wenn sich das Dreieck nach diesen Änderungen nicht dreht, muss das Dreieck auskommentiert sein.
GLSurfaceView.RENDERMODE_WHEN_DIRTY
wie im nächsten Abschnitt beschrieben.
Kontinuierliches Rendering aktivieren
Wenn Sie den Beispielcode in diesem Kurs bislang sorgfältig befolgt haben, stellen Sie
Kommentieren Sie die Linie aus, die festlegt, dass der Rendermodus nur bei Schmutz gezeichnet wird, andernfalls mit OpenGL.
rotiert die Form nur ein Inkrement und wartet dann auf einen Aufruf von requestRender()
vom GLSurfaceView
-Container:
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); }
Sofern sich die Objekte nicht ohne Interaktion des Nutzers ändern, empfiehlt es sich in der Regel, dies zu tun. aktiviert ist. Bereiten Sie sich darauf vor, diesen Code aus Kommentaren zu entfernen, da dieser Aufruf in der nächsten Lektion anwendbar ist. noch einmal.