【GAMES101】05 Rasterization(Triangles)

光栅化是计算机图形学中的关键步骤,它涉及将三角形等多边形转换为像素的过程。通过对每个像素中心点进行判断,确定其是否位于三角形内,从而实现二维采样。文章提到了一种优化方法,即先确定三角形的包围盒以减少不必要的计算,但这种方法仍可能导致锯齿效应。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

光栅化过程:将一系列变换后的三角形转换为像素的过程。

三角形在图形学中得到很多的应用。

  • 最基础的多边形(边数最少)。
  • 任何多边形都可以拆成三角形。
  • 性质:三角形内部一定是平面的。三角形内外部定义非常清楚。
  • 定义三个顶点后,三角形内可以插值。

光栅化中最重要的一步:判断三角形与一个像素(中心点)的位置关系

采样:

  • 一个函数离散化的过程。
  • 采样可以是一维,二维,三维的。光栅化属于二维采样。

光栅化的方法:

给一个三角形,来判断像素中心是否在三角形内。

 三角形转换为像素的过程,实际上就是判断像素跟三角形的关系。更确切地说,像素的中心点是否在三角形内。而一个点是否在三角形内,就可以使用向量的叉积方式判断。

for(int x = 0; x < xMax; ++x)
    for(int y = 0; y < yMax; ++y)
         image[x][y] = inside(tri, x + 0.5, y + 0.5);

通过上面的函数,我们就知道了坐标点(x, y)是否在在三角形内。这个求解的过程,我们一般将它称为采样(像素中心对屏幕的采样)。所以,采样通俗的理解就是给定一个线性函数,通过输入一些值,最后获得输出值的过程。

从上面的for循环,我们知道基本上是遍历了屏幕上的每个像素。在这里就可以做一个简单的优化。先判断是否在三角形所组成的长方形内(既取三角形的三个顶点横坐标和纵坐标的最小最大值)。我们就可以只判断长方形内的像素。

蓝色区域表示三角形的包围盒,只有在这个区域内的像素,才去做上面的for循环;即不需要每一个像素都从(0-width/height)走一遍)。

 经过光栅化的过程,可以获得以下的结果。但是,以上的结果,明显比原本的三角形差的比较远,而且斜边不规则(这就是我们说的锯齿)。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值