透视矩阵如何工作?

时间:2013-03-11 13:41:31

标签: opengl matrix webgl

我开始阅读lesson 1 in learningwebgl blog,我注意到了这一部分:

var pMatrix = mat4.create();
mat4.perspective(45, gl.viewportWidth / gl.viewportHeight, 0.1, 100.0, pMatrix);

我粗略地理解矩阵(平移/旋转/多重)如何工作,但我不知道mat4.perspective(...)的含义。它是干什么用的?如果我将一个向量与这个矩阵相乘,结果是什么?

2 个答案:

答案 0 :(得分:5)

透视矩阵用于缩放,并可能平移或翻转坐标系以准备透视分割。由于透视投影操作涉及划分,因此不能仅通过线性矩阵变换来表示。

在可编程图形管道中(见pixel shaders),您无法看到除法运算 - 它仍然是固定功能部件之一。程序员通过调整操作中涉及的变量来控制它。在透视分割的情况下,它是投影矩阵,为您提供此控制。

答案 1 :(得分:-1)

投影矩阵用于将世界坐标转换为屏幕坐标。

三维虚拟世界中的位置是x,y和z坐标的三元组。当你想绘制某些东西(或者告诉OpenGL绘制某些东西)时,需要计算这些坐标在用户屏幕上的位置。

这种计算是通过矩阵乘法实现的。

由x,y和z组成的向量(以及允许矩阵执行某些操作(如缩放)所需的第四个值1)与矩阵相乘以接收一组新的x,y和z坐标(第4个值被丢弃),表示此点在用户屏幕上的位置(需要z坐标来确定哪些对象位于其他对象之前)。

函数mat4.perspective生成一个投影矩阵,该矩阵生成一个完全相同的矩阵。论点是:

  • 学位(45)的视野
  • 视野的纵横比(视口的纵横比)
  • 距离观看者的最小距离(0.1世界单位)
  • 距离观看者的最大距离(100.0世界单位)
  • 存储生成的矩阵的数组(pMatrix)

当一个点与此矩阵相乘时,结果就是必须绘制此点的屏幕坐标。