从以下来源:android.opengl.Matrix.translateM(float[] m, int mOffset, float x, float y, float z)
/**
* Translates matrix m by x, y, and z in place.
* @param m matrix
* @param mOffset index into m where the matrix starts
* @param x translation factor x
* @param y translation factor y
* @param z translation factor z
*/
public static void translateM(
float[] m, int mOffset,
float x, float y, float z) {
for (int i=0 ; i<4 ; i++) {
int mi = mOffset + i;
m[12 + mi] += m[mi] * x + m[4 + mi] * y + m[8 + mi] * z;
}
}
问题是关于这一行(或整个 for 循环):
m[12 + mi] += m[mi] * x + m[4 + mi] * y + m[8 + mi] * z;
为什么翻译参数的 x、y 和 z 分量在这里与源矩阵分量相乘?这不应该很简单吗(这行替换了整个 for 循环):
m[12 + mi] += x;
m[13 + mi] += y;
m[14 + mi] += z;
问题背景:
我在 OpenGL ES 2.0 中做一些 2d 游戏。我想在那里缩放和移动一些对象。虽然我简单地移动它:
Matrix.setIdentityM(mModelMatrix, 0);
Matrix.translateM(mModelMatrix, 0, x, y, 0);
一切顺利。只要我在移动前进行缩放 - 此时移动翻译:
Matrix.setIdentityM(mModelMatrix, 0);
Matrix.scaleM(mModelMatrix, 0, xScaleFactor, yScaleFactor, 1);
Matrix.translateM(mModelMatrix, 0, x, y, 0);
实际上乘以缩放:(