在这个镜像代码中可以进行什么样的矩阵变换?

时间:2017-09-01 08:55:42

标签: c++ opengl math matrix

我试着理解一个镜像代码,它包含了这个矩阵变换:

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);

1 个答案:

答案 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'