C++ 在这个镜像代码中可以使用什么样的矩阵变换?
我试图理解镜像的代码,它包含以下矩阵变换:C++ 在这个镜像代码中可以使用什么样的矩阵变换?,c++,opengl,math,matrix,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没有矩阵转置的命令,也不可能执行这些命令。我想知道如何使用它 这段代码中可以使用什么样
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);
md3_vox_calcmat_common(tspr、dvoxa0、f、矩阵);
如果(grhalfxdown10x<0){
矩阵[0][0]=-矩阵[0][0];
矩阵[1][0]=-矩阵[1][0];
矩阵[2][0]=-矩阵[2][0];
矩阵[3][0]=-矩阵[3][0];
}
矩阵[0][3]=矩阵[1][3]=矩阵[2][3]=0.f;
矩阵[3][3]=1.f;
gl.bglmatrix模型(gl_MODELVIEW);
//让OpenGL(也许还有硬件)处理矩阵旋转
gl.bglLoadMatrixf(矩阵);
//calcmat_常见的是:
mat.idt();
垫旋转(0.0f,0.0f,-1.0f,滚动);
垫旋转(-1.0f,0.0f,0.0f,节距);
垫旋转(0.0f,-1.0f,0.0f,偏航);
材料刻度(-1/16f、1.0f、1/16f);
材料翻译(a0.y,a0.z,a0.x);
垫旋转(0.0f,-1.0f,0.0f,喷水);
让我们做一些代数:
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
让
然后
进一步:
C'= -I,-J,-K,-L
M, N, O, P
Q, R, S, T
0, 0, 0, 1
让
然后
让我们做一些代数:
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
让
然后
进一步:
C'= -I,-J,-K,-L
M, N, O, P
Q, R, S, T
0, 0, 0, 1
让
然后
它们不是GL的命令-OpenGL是图形标准,不是数学库。任何此类“命令”都属于外部库,例如
glu
或glm
,除非您使用固定功能管道。但我真的不会这么做。它们不是GL的命令——OpenGL是图形标准,不是数学库。任何此类“命令”都属于外部库,例如glu
或glm
,除非您使用固定功能管道。但我真的不会那么做。
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'