Java tutorial
//package com.java2s; /* * Copyright 2015 The WebRTC project authors. All Rights Reserved. * * Use of this source code is governed by a BSD-style license * that can be found in the LICENSE file in the root of the source * tree. An additional intellectual property rights grant can be found * in the file PATENTS. All contributing project authors may * be found in the AUTHORS file in the root of the source tree. */ import android.opengl.Matrix; public class Main { /** * Returns texture matrix that will have the effect of rotating the frame |rotationDegree| * clockwise when rendered. */ public static float[] rotateTextureMatrix(float[] textureMatrix, float rotationDegree) { final float[] rotationMatrix = new float[16]; Matrix.setRotateM(rotationMatrix, 0, rotationDegree, 0, 0, 1); adjustOrigin(rotationMatrix); return multiplyMatrices(textureMatrix, rotationMatrix); } /** * Move |matrix| transformation origin to (0.5, 0.5). This is the origin for texture coordinates * that are in the range 0 to 1. */ private static void adjustOrigin(float[] matrix) { // Note that OpenGL is using column-major order. // Pre translate with -0.5 to move coordinates to range [-0.5, 0.5]. matrix[12] -= 0.5f * (matrix[0] + matrix[4]); matrix[13] -= 0.5f * (matrix[1] + matrix[5]); // Post translate with 0.5 to move coordinates to range [0, 1]. matrix[12] += 0.5f; matrix[13] += 0.5f; } /** * Returns new matrix with the result of a * b. */ public static float[] multiplyMatrices(float[] a, float[] b) { final float[] resultMatrix = new float[16]; Matrix.multiplyMM(resultMatrix, 0, a, 0, b, 0); return resultMatrix; } }