O Google tem o compromisso de promover a igualdade racial para as comunidades negras. Saiba como.

Adicionar movimento

Desenhar objetos na tela é um recurso bastante básico do OpenGL, mas você pode fazer isso com outras classes do framework gráfico do Android, incluindo objetos Canvas e Drawable. O OpenGL ES oferece recursos adicionais para mover e transformar objetos desenhados em três dimensões ou de outras maneiras exclusivas para criar experiências do usuário atrativas.

Nesta lição, você dá mais um passo para usar o OpenGL ES aprendendo a adicionar movimento a uma forma com rotação.

Girar uma forma

Girar um objeto de desenho com o OpenGL ES 2.0 é relativamente simples. No renderizador, crie outra matriz de transformação (uma matriz de rotação) e, em seguida, combine-a com suas matrizes de transformação de projeção e visualização de câmera:

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);
    }
    

Se o triângulo não girar depois de fazer essas modificações, verifique se você comentou a configuração GLSurfaceView.RENDERMODE_WHEN_DIRTY, conforme descrito na próxima seção.

Ativar renderização contínua

Se você tiver acompanhado atentamente o código de exemplo desta aula até agora, comente a linha que configura o modo de renderização para desenhar apenas quando estiver sujo. Caso contrário, o OpenGL gira a forma em apenas um incremento e aguarda uma chamada para requestRender() do contêiner 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 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);
    }
    

A menos que você tenha objetos que mudam sem interação do usuário, é recomendável que essa sinalização esteja ativada. Prepare-se para remover a marca de comentário desse código, porque a próxima lição torna essa chamada aplicável novamente.