Después de ayudar a otro usuario con una pregunta sobre el tutorial de Android Responding to Touch Events, descargué el código fuente y quedé bastante desconcertado por lo que vi. El tutorial parece no ser capaz de decidir si quiere usar vectores de fila o columnas, y todo se ve confundido para mí.¿Es el tutorial Android OpenGL de Google que enseña el álgebra lineal incorrecta?
En la página de Android Matrix, afirman que su convención es column-vector/column-major, que es típica de OpenGL.
¿Tengo razón, o hay algo que me falta? Aquí están los bits relevantes:
Comience creando una MVPMatrix multiplicando mProjMatrix * mVMatrix. Hasta aquí todo bien.
// Set the camera position (View matrix)
Matrix.setLookAtM(mVMatrix, 0, 0, 0, -3, 0f, 0f, 0f, 0f, 1.0f, 0.0f);
// Calculate the projection and view transformation
Matrix.multiplyMM(mMVPMatrix, 0, mProjMatrix, 0, mVMatrix, 0)
siguiente están añadiendo un giro a la izquierda de la MVPMatrix? Esto parece un poco raro.
// Create a rotation for the triangle
Matrix.setRotateM(mRotationMatrix, 0, mAngle, 0, 0, -1.0f);
// Combine the rotation matrix with the projection and camera view
Matrix.multiplyMM(mMVPMatrix, 0, mRotationMatrix, 0, mMVPMatrix, 0)
Carga con el fin de no transpuesta.
GLES20.glUniformMatrix4fv(mMVPMatrixHandle, 1, false, mvpMatrix, 0);
último en su shader, un vector * multiplicación de matrices?
// the matrix must be included as a modifier of gl_Position
" gl_Position = vPosition * uMVPMatrix;"
La adición de esta todos juntos, obtenemos:
gl_Position = vPosition * mRotation * mProjection * mView;
cual no es correcto por cualquier tramo de la imaginación. ¿Hay alguna explicación de que no estoy viendo qué está pasando aquí?
Dos posibilidades para mí. O el ejemplo es incorrecto o implementaron las operaciones de la matriz de manera diferente. [ver] (http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/2.2_r1.1/android/opengl/Matrix.java) –
¿Podría aclarar el problema, por favor? – user1071136