1.梳理从MVP变换到光栅化的过程

相关博客:
1.MVP变换
2.Rasterization(光栅化)

1.1 View/Camera transformation


此例中相机初始位置为(0,0,5)【备注:详见主函数中输入的值】经过 M view M_{\text{view}} Mview将相机移动到原点且相机方向朝向z轴负向,zNear与zFar均为负数
下图仅为示意图

1.2 Model Transformation



此例中将空间中三角形绕z轴旋转,每一次按键A则左旋10度,每一次按键D则右旋10度

1.3 Projection Transformation

Projection Transformation包含两种:
1.Orthographic projection(正交投影)

2.Perspective projection(透视投影)

MVP变换中的投影变换



我们这里用透视投影(Perspective Projection)
透视投影的过程需要将视锥(Frustum)的远处面zFar挤压到与zNear同大小,随后进行正交投影


下图仅为示意图


为什么要挤压?因为要进行透视投影,只有挤压后才能体现出近大远小(小就是因为被挤压了)
挤压过程中zNear平面不变,即近处画面不变,zFar中心点位置不变,zNear与zFar之间的所有物体均被挤压
如果是进行正交投影,则无需挤压,直接进行投影即可

1.4 Viewport Transformation

空间中的物体透视投影后,经过视口变换,将其投影缩放到与屏幕相适应的大小



左侧为透视投影结果,右侧为空间的俯视图


经过视口变换后的效果如下

1.5 Rasterization

如何用像素描述这个图像的投影?就是光栅化的意思,光栅化的本意是drawing onto the screen
三角形可以构成复杂图形,3D物体经过MVP变换到2D平面,随后通过光栅化进行渲染

将模型投射到像素,投射过程从左到右,从上到下,一行行如窗户栅栏,这种渲染方式叫光栅化渲染
下图来自:【老奇】阴差阳错 撼动世界的游戏引擎

利用三角形三边的三个向量叉积来判断像素中心点是否在三角形内,如果在三角形内,则对该像素进行采样(也就是所有屏幕中的像素中,属于图形内部的像素被选中),被采样的像素将进行上色


如果直接采样进行光栅化容易产生锯齿等走样问题


为了减轻锯齿问题,我们需要进行抗锯齿
需要的操作是光栅化之前进行模糊处理(滤波或者卷积操作),随后进行光栅化

Logo

这里是“一人公司”的成长家园。我们提供从产品曝光、技术变现到法律财税的全栈内容,并连接云服务、办公空间等稀缺资源,助你专注创造,无忧运营。

更多推荐