大纲:
将坐标变化为标准化设备坐标,接着再转化为屏幕坐标的过程通常是分布进行的,如下图。
过程中需要用到最重要的几个矩阵:Model matrix,View matrix,Projection matrix
投影矩阵:包含正射投影矩阵和透视投影矩阵
正射投影矩阵:(glm::ortho)定义了一个类似立方体的平截头箱,定义一个裁剪空间,空间之外的顶点会被裁剪掉。 通过width,height,近(near),远(far)平面框定了一个立方体,出现在这个立方体之外的坐标都会被裁剪掉。
查看unity里camera的属性,也有投影这项,参数也是对应的上
透视投影矩阵:正射投影矩阵直接将坐标映射到2D平面中,如果碰到现实生活中近大远小的情况,就不真实了。这个时候需要用到透视。
glm::mat4 proj = glm::perspective(glm::radians(45.0f), (float)width/(float)height, 0.1f, 100.0f);
图:透视平截头体
图:Unity中摄像机选择透视投影时的参数
透视投影下,w齐次坐标不为1,透视除法后,近大远小
图:正射与透视投影下的效果对比
公式:
Vclip=Mprojection⋅Mview⋅Mmodel⋅Vlocal