【发布时间】:2017-01-20 22:20:06
【问题描述】:
我正在制作一个 OpenGL 应用程序,其中我有以下代码来设置透视矩阵。
Matrix4 Matrix4::Perspective(float pL, float pR, float pB, float pT, float pN, float pF) {
Matrix4 matrix;
matrix[0] = 2 * pN / (pR - pL);
matrix[5] = 2 * pN / (pT - pB);
matrix[8] = (pR + pL) / (pR - pL);
matrix[9] = (pT + pB) / (pT - pB);
matrix[10] = -(pF + pN) / (pF - pN);
matrix[11] = -1;
matrix[14] = -(2 * pF * pN) / (pF - pN);
matrix[15] = 0;
return matrix;
}
当我操纵对象的平移时,-Z 向前移动它,+Z 向后移动它。
我通过将矩阵[11] 和矩阵[14] 切换为:
matrix[11] = 1;
matrix[14] = (2 * pF * pN) / (pN - pF);
但是网格会稍微变形。 (可能在更复杂的网格上发生巨大变形。)
我将如何操作这个方法来给我想要的结果(反转 z 轴)?
pF = zFar pN = zNear
【问题讨论】: