Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/159.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在这个镜像代码中可以使用什么样的矩阵变换?_C++_Opengl_Math_Matrix - Fatal编程技术网

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'