c++ - mirror这段代码可以进行什么样的矩阵变换呢?

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

最佳答案

让我们做一些代数:

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/

相关文章:

c++ - 使用 C++ 在 char 数组最后一个索引中添加值

c++ - 为什么 glGetSubroutineIndex 为不同的函数返回相同的值?

c++ - OpenGL命令的执行顺序

python - 以给定角度在矩形上查找点

c++ - cmake 如何在 C++ 中将编译器标志附加到末尾

c++ - 如何更改Visual Studio中所有项目的默认语言标准。 C++

c++ - 如何进行一维 "valid"卷积?

opengl - Freeglut、OpenGL 和内存

algorithm - 可被 N 整除的最小正数

c# - 从高斯分布中抽取随机值的最快方法是什么?