0%

【Games 101】Lec 05:光栅化1(三角形)

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 则在三角形里面;
  • 否则不在

边缘情况(中心点点在三角形的边上)我们不做处理

简化

  • 用包围盒来确定包围这个三角形的最小矩形

  • 对于每一行都搞一个包围盒(较难实现)

欢迎关注我的其它发布渠道