-1

I could get the transform matrix(4x4) from surface by getTransformMatrix(), but I don't know how to set scale x,y or set pivot x,y of it. I don't know the matrix structure in this case.

Help me. Here is the code:

private SurfaceTexture mSurface;
private float[] mTransformMatrix = new float[16];
private int mTransformMatrixHandle;
public void onSurfaceCreated(GL10 glUnused, EGLConfig config) {
    ...
    mTransformMatrixHandle = GLES20.glGetUniformLocation(mProgram, "textureTransform");

}
public void onDrawFrame(GL10 glUnused) {
    ...
    mSurface.getTransformMatrix(mTransformMatrix);
    //how to set pivot/scale mTransformMatrix
    ...

    GLES20.glUniformMatrix4fv(mTransformMatrixHandle, 1, false, mTransformMatrix, 0);
    ...
}
genpfault
  • 51,148
  • 11
  • 85
  • 139
Trung NT Nguyen
  • 403
  • 2
  • 14

1 Answers1

0

Short answer :

If you don't want to bother too much with the maths, which is understandable and will save you a lot of time, you could use an existing matrix library such as android.opengl.Matrix

Math answer :

OpenGL matrix writing convention is column major order. So your 16 floats array should corresponds to this matrix :

0 4  8 12
1 5  9 13
2 6 10 14
3 7 11 15

Now to perform rotations and scaling, you have to multiply this matrix by corresponding rotation and scaling matrix. This will recquire some basic knowledge of matrix calculus and projection geometry.

Guillaume Gris
  • 2,135
  • 17
  • 34