Lecture 05 : Rasterization 1 (Triangles)
光栅化1:三角形的离散化
视口变化
像素的表现形式:
前面我们说到,对于正交变换时,我们将物体映射到[-1,1]³ 的立方体中,那么现在我们的问题就是,我们如何把这个图像映射到屏幕([0 , width] [0 , height])上?
先不考虑z轴,我们看x y:
- 进行缩放
- 把原点移动到像素点的位置
这一步也叫做视口变换
光栅化
定义
定义:什么是光栅化
三角形光栅化的核心思想就是:判断 像素的中心点和三角形的位置关系!
三角形有很多好的性质:
具体方法(采样法)
记住我们现在要干什么:判断一个像素(中心点)和三角形之间的关系;
采样法
采样就是将一个函数离散化的过程;
通俗的讲就是,有一个函数,然后我们通过不同的点去经过这个函数得到不同的结果,从而来判断关系。
这里采样的方式针对的是像素的中心。
具体例子:
其中 inside 函数就是判断点是否在三角形内
这里定义像素位置为(x,y),则像素中心的位置为(x+0.5 , y+0.5),下面是代码:
那么下面具体的问题就是:这个 inside 函数怎么写?
这个很简单嘛,之前学过了,用叉乘可以判断;
规定三角形方向:p2p1 , p1p0 , p0p2
然后用这三个向量分别叉乘:p2Q , p1Q,p0Q就行;
- 如果 都<0 或 都>0 则在三角形里面;
- 否则不在
边缘情况(中心点点在三角形的边上)我们不做处理
简化:
- 用包围盒来确定包围这个三角形的最小矩形
- 对于每一行都搞一个包围盒(较难实现)