我试着理解一个镜像代码,它包含了这个矩阵变换:
matrix[0][0] = -matrix[0][0];
matrix[1][0] = -matrix[1][0];
matrix[2][0] = -matrix[2][0];
matrix[3][0] = -matrix[3][0];
首先想到的是:
matrix.tra() matrix.scale(-1,1,1); matrix.tra()
但GL没有矩阵转置命令,也无法执行这些命令。我想了解如何使用它。
此代码中可以进行哪种矩阵转换?
下面我将编写更多代码以提供更多详细信息。
md3_vox_calcmat_common(tspr, dvoxa0, f, matrix);
if (grhalfxdown10x < 0) {
matrix[0][0] = -matrix[0][0];
matrix[1][0] = -matrix[1][0];
matrix[2][0] = -matrix[2][0];
matrix[3][0] = -matrix[3][0];
}
matrix[0][3] = matrix[1][3] = matrix[2][3] = 0.f;
matrix[3][3] = 1.f;
gl.bglMatrixMode(GL_MODELVIEW);
// Let OpenGL (and perhaps hardware) handle the matrix rotation
gl.bglLoadMatrixf(matrix);
//calcmat_common is:
mat.idt();
mat.rotate(0.0f, 0.0f, -1.0f, roll);
mat.rotate(-1.0f, 0.0f, 0.0f, pitch);
mat.rotate(0.0f, -1.0f, 0.0f, yaw);
mat.scale(-1 / 16f, 1.0f, 1 / 16f);
mat.translate(a0.y, a0.z, a0.x);
mat.rotate(0.0f, -1.0f, 0.0f, spriteang);
答案 0 :(得分:0)
让我们做一些代数:
A = I, J, K, L
M, N, O, P
Q, R, S, T
U, V, W, X
C = -I,-J,-K,-L
M, N, O, P
Q, R, S, T
U, V, W, X
让
B = -1, 0, 0, 0
0, 1, 0, 0
0, 0, 1, 0
0, 0, 0, 1
然后
B x A = C
此外:
C'= -I,-J,-K,-L
M, N, O, P
Q, R, S, T
0, 0, 0, 1
让
B'= -1, 0, 0, 0
0, 1, 0, 0
0, 0, 1, 0
0, 0, 0, 0
D = 0, 0, 0, 0
0, 0, 0, 0
0, 0, 0, 0
0, 0, 0, 1
然后
B'x A + D = C'