WebGL第三十五课:向3D进发!概述 MVP 矩阵

815 阅读4分钟

这是我参与11月更文挑战的第7天,活动详情查看:2021最后一次更文挑战

本文标题:WebGL第三十五课:向3D进发!概述 MVP 矩阵

友情提示

这篇文章是WebGL课程专栏的第35篇,强烈建议从前面开始看起。因为花了大量的工夫来讲解向量的概念和矩阵运算。这些基础知识会影响你的思维。

引子

我们在前面,已经能熟练的掌握 WebGL 的一些用法了,画点,画三角,贴图,等等。

这就是WebGL提供的功能。跟3D或者2D无关。

你只要提供一些点,这些点的坐标 xyz 数值都在 [-1,1]范围内,WebGL就可以将他们画出来。

这很简单不是吗?

接下来,我们要做的事情,就是尽量让我们画出来的这个图像,立体化,比如说,能有远近的效果,视角的变换,透视等等这些。

那么这些东西,是一种业务需求,本身是跟WebGL无关的。这是非常要重视的一点,也就是说,后面用到的东西,就是将前面的课程里学到的知识点,攒一个业务出来,这个业务就是:3D呈现。

从人眼讲起

都知道,我们所看见的世界是3D的,这句话怎么理解呢?

应该这么说:

世界是3D的,看见的画面是2D的。

不信?

你能透过墙看墙后的东西吗,显然不能。

我们一张开眼睛,从左到右,从下到上,看到的世界很明显就是一个2D的图像。

而我们之所以能感受到3D的效果,是因为我们的眼睛在动,或者说视野内的物体在动,然后由于视网膜成像中造成的透视效果。

透视效果啥意思,简单来说,就是近大远小,远的东西被近的东西遮住。

画画

画画其实也是在一个2D平面上,来描述世界。如果你的画讲究的话,应该也要注意到透视效果。

其实用计算机来模拟透视效果,和你画画时讲究透视效果是一个过程。

绘制的过程

眼睛的位置和朝向

首先要考虑到人眼睛的位置,这是最终要的一环。这很符合直觉。

因为你如果前后左右走动的话,你看到的世界就会变动很大,这就说明,你眼睛的位置在这其中起到了很重要的作用。

同时我们发现,如果你扭头或者转动身体,你看见的画面也不一样,这就说明,眼睛的朝向也是一个重要的因素。

也许你认为这很废话啰嗦,但是一定要记住,这就是一步一步的过程,不能忽略。

视野中的物体

你看见什么物体,当然跟这个物体本身有关系。他动一动,你看见的画面就会动一动。他要是走远了,你看见的这个物体就会变小。

这个物体变动之后,我们看的画面会变动,这个就是后面要讲的 Model 变化矩阵。

视角和物体

也就是说,我们要得出眼睛的位置,眼睛的朝向,然后根据这两部分数据,去得到一个相对关系,什么相对关系?

就是一个物体相对于这个眼睛的相对关系。

假如现在物体不动,眼睛动,那么这个相对关系就会改变,这就是为什么看见的画面变了。

同理,眼睛不动,物体动了,这个相对关系也会改变。

这一层关系就是后面要讲的 View 变换矩阵。

投射到眼睛

上面的相对关系厘清了之后,还有最终一个环节。

就是说,我们的眼睛的特色就是透视效果。近大远小。这个是眼睛决定的。既然计算机要模拟人看见的世界,那么也要将这个效果模拟出来。这个就是后面要讲的 Projection 投射矩阵。

大名鼎鼎的 MVP

MVP 变换矩阵就是上面基于事实基础的三个很浅显的道理而已。

至于具体的怎么用数学来表达,后面继续搞。




  正文结束,下面是答疑

小能能说:感觉山雨欲来

  • 然也。