2

我开始阅读learningwebgl 博客中的第 1 课,我注意到了这一部分:

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

我大致了解矩阵(平移/旋转/多重)的工作原理,但我不知道是什么mat4.perspective(...)意思。这有什么用途?如果我将一个向量与这个矩阵相乘,结果是什么?

4

2 回答 2

6

透视矩阵用于缩放,并可能平移或翻转坐标系,为透视分割做准备。由于透视投影操作涉及除法,它不能单独用线性矩阵变换来表示。

在可编程图形管道中(请参阅像素着色器),您看不到除法操作 - 它仍然是固定功能部分之一。程序员通过调整操作中涉及的变量来控制它。在透视分割的情况下,投影矩阵为您提供了这种控制。

于 2013-03-11T13:56:27.487 回答
-1

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

三维虚拟世界中的位置是 x、y 和 z 坐标的三元组。当你想画一些东西(或者更确切地说是告诉 OpenGL 画一些东西)时,它需要计算这些坐标在用户屏幕上的位置。

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

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

函数 mat4.perspective 生成​​一个投影矩阵,该投影矩阵生成一个完全可以做到这一点的矩阵。论据是:

  • 以度为单位的视野 (45)
  • 视野的纵横比(视口的纵横比)
  • 与仍然绘制的观察者的最小距离(0.1 世界单位)
  • 与仍绘制的观察者的最大距离(100.0 世界单位)
  • 存储生成的矩阵的数组 (pMatrix)

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

于 2013-03-11T13:51:17.907 回答