我试图理解镜像的代码,它包含这个矩阵转换:
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);
最佳答案
让我们做一些代数:
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'
关于c++ - mirror这段代码可以进行什么样的矩阵变换呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45996571/