当前位置: 首页 > 知识库问答 >
问题:

在Matrix4::Perspective中反转Z轴

松增
2023-03-14

我正在制作一个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);

pF=zFar pN=zNear

共有1个答案

严欣怡
2023-03-14

从概念上讲,在应用投影之前,您想要的是反转z,这将产生将投影从-z镜像到z的效果。因此,从概念上讲,您需要做的是计算P*Scale(1,1,-1)=P*diag(1,1,-1,1)。如果你做数学运算,你会看到这只会导致对投影矩阵的第三列求反,所以正确的矩阵是:

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;

像您那样否定矩阵[14]没有任何意义,它只会将您的近平面和远平面移动到其他地方。

 类似资料:
  • 问题内容: 我将如何在SELECT查询中反转此路径: 为了 其中/是定界符,并且在一行中可以有许多定界符 问题答案: 最简单的方法可能是编写一个存储的pl / sql函数,但是可以单独使用SQL(Oracle)来完成。 这将分解子路径中的路径: 然后,我们使用来重构反向路径:

  • Perspective是一款C#开源Wiki引擎,它使用户可以很容易的合作进行编辑,链接和共享Web页面,它里面有安全和分级的管理环境。Perspective居于奇妙的Wiki思想,包含了其它一些有前途且效果好的特性。

  • 问题内容: 为了满足程序的需要,我创建了一种使图像变形并将其放置在地图上的工具(我的程序是基于地图的程序)。 我编写了自己的机制,使用在图像上放置的三个点,在地图上放置的三个点来放置和扭曲图像,然后我只是简单地创建了一个AffineTransform,实际上将第一个三角形转换为第二个三角形将图像精确地放置在我想要的位置,并进行转换以适合用户的需求。 问题在于,使用AffineTransforms只

  • 表示为一个 4x4 matrix. 在3D计算机图形学中,4x4矩阵最常用的用法是作为一个变换矩阵Transformation Matrix。 有关WebGL中使用的变换矩阵的介绍,请参阅本教程this tutorial。 这使得表示三维空间中的一个点的向量Vector3通过乘以矩阵来进行转换,如平移、旋转、剪切、缩放、反射、正交或透视投影等。这就是把矩阵应用到向量上。 任何3D物体Object3

  • AWS Perspective (v1.1.1) AWS Perspective is a tool that quickly visualizes AWS Cloud workloads as architecture diagrams. You can use the solution to build, customize, and share detailed workload visua

  • Perspective tabs- 这个滑动门的前身是Sliding Tabs,使用mootools 创建,允许在有限的宽度里面拥有更多的Tab选项卡,也就是说,顶部的Tab是可以滚动的