【发布时间】:2013-11-17 10:28:37
【问题描述】:
来自android.opengl.Matrix.translateM(float[] m, int mOffset, float x, float y, float z)的sources:
/**
* 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;
为什么这里将 translate 参数的 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);
实际上是乘以缩放:(
【问题讨论】:
-
我不确定,这个问题应该在这里问还是在gamedev.stackexchange.com 上问?
标签: java android matrix opengl-es-2.0 matrix-transform