我开始阅读learningwebgl 博客中的第 1 课,我注意到了这一部分:
var pMatrix = mat4.create();
mat4.perspective(45, gl.viewportWidth / gl.viewportHeight, 0.1, 100.0, pMatrix);
我大致了解矩阵(平移/旋转/多重)的工作原理,但我不知道是什么mat4.perspective(...)
意思。这有什么用途?如果我将一个向量与这个矩阵相乘,结果是什么?
我开始阅读learningwebgl 博客中的第 1 课,我注意到了这一部分:
var pMatrix = mat4.create();
mat4.perspective(45, gl.viewportWidth / gl.viewportHeight, 0.1, 100.0, pMatrix);
我大致了解矩阵(平移/旋转/多重)的工作原理,但我不知道是什么mat4.perspective(...)
意思。这有什么用途?如果我将一个向量与这个矩阵相乘,结果是什么?
透视矩阵用于缩放,并可能平移或翻转坐标系,为透视分割做准备。由于透视投影操作涉及除法,它不能单独用线性矩阵变换来表示。
在可编程图形管道中(请参阅像素着色器),您看不到除法操作 - 它仍然是固定功能部分之一。程序员通过调整操作中涉及的变量来控制它。在透视分割的情况下,投影矩阵为您提供了这种控制。
投影矩阵用于将世界坐标转换为屏幕坐标。
三维虚拟世界中的位置是 x、y 和 z 坐标的三元组。当你想画一些东西(或者更确切地说是告诉 OpenGL 画一些东西)时,它需要计算这些坐标在用户屏幕上的位置。
该计算是通过矩阵乘法实现的。
由 x、y 和 z 组成的向量(以及允许矩阵执行缩放等操作所必需的第四个值 1)与矩阵相乘以接收一组新的 x、y 和 z 坐标(第 4 个值被丢弃)表示该点在用户屏幕上的位置(需要 z 坐标来确定哪些对象在其他对象的前面)。
函数 mat4.perspective 生成一个投影矩阵,该投影矩阵生成一个完全可以做到这一点的矩阵。论据是:
当一个点与这个矩阵相乘时,结果是必须绘制这个点的屏幕坐标。