Lesson 5——观察空间小总结

好的,我们现在来总结《Lesson 5 Moving the camera》的内容


我们先总结最重要的,坐标变换链——

坐标变换链

我来解释一下。我们一开始拿到的就是顶点v,这个顶点v是在局部空间中的。
经过Model矩阵的变换,顶点v从局部空间转换到了世界空间
经过View矩阵的变换,顶点v从世界空间转换到了观察空间
经过Projection矩阵的变换,顶点v从观察空间转换到了裁剪空间
经过Viewport矩阵的变换,顶点v从裁剪空间转换到了屏幕空间

这节课我们主要讲的就是ModelView矩阵和Viewport矩阵。


首先看看ModelView矩阵,我们直接看ModelView实现的代码——


ModelView
图解
图解2

具体的解释大家可以看我翻译的Lesson 5, 这里不再赘述。

大家可以通过上图看到,ModelView矩阵是通过lookat()函数生成的。lookat()函数是可以把所有“世界坐标”变换到“刚刚定义的观察空间”。符合上面讨论的,Model矩阵和View矩阵的含义。


接下来,说说Viewport矩阵。
Viewport矩阵的意义在于——确定渲染窗口的尺寸大小。使用Viewport中定义的位置和宽高进行2D坐标的转换,将位置坐标(裁剪空间)转换为屏幕坐标。

来看看Viewport实现的代码——


Viewport

图解3

意义——将双单元立方体[-1,1][-1,1][-1,1][-1,1]映射到屏幕[x,x+w][y,y+h][0,d]上。

注意:在将3D变换到4D的时候,对于向量顶点的改变是不一样的!比如顶点P(x, y, z)是增加1来变成4D空间,向量(A, B, C)则是增加0来变换到4D空间。

所以我们可以知道,如果第4个分量w是1,说明是空间中的顶点。如果是0,说明是空间中的一个方向。区别在于,如果对于旋转操作,物体本身不会有任何变化,只是观察角度的不同。
但是从一个空间到另一个空间的变换操作,比如将这个点移动到那里,换一个方向,那么物体本身的呈现就不一样了。


使用矩阵的好处——

如果你使用3个相互垂直(或非线性)的轴定义了一个坐标空间,你可以用这3个轴外加一个平移向量来创建一个矩阵,并且你可以用这个矩阵乘以任何向量来将其变换到那个坐标空间。


剩下的内容翻译的就可以理解,大家直接去看翻译的部分即可。最后关于法线的转换很重要,在后面的切线空间中会用到。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容