Bewegung hinzufügen

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.