05 光栅化(三角形的离散化)
三角形
三角形的性质和优点:
●最基础的多边形
●其他图形可以拆解为三角形
●三角形内一定是平面
●内外的定义很明确
●定义三个顶点后,三角形内可以插值
光栅化(Rasterization)
光栅化关键: 判断一个像素和三角形的位置关系(像素中心点与三角形的位置关系)
下面研究光栅化的步骤。
采样(Sampling)
采样——把连续函数离散化
for(int x = 0; x < xmax; ++x)
output[x] = f(x);
光栅化采样:利用像素中心对屏幕空间进行采样。
光栅化采样的目的:判断像素中心是否在三角形内。
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);
判断像素是否在三角形内
方法:叉乘
三角形ABC:
AB 叉乘 AQ BC 叉乘 BQ CA 叉乘 CQ 符号(方向)相同则在内部,否则在外部。(叉乘反映向量的左右位置关系)
特殊情况:边上的点
- 不做处理:本课程
- 特殊处理:OpenGL/DX
优化——Bounding Box
因此自然的,只需要遍历每一个点就可以得出三角形的光栅化结果了!
优化:因为显然并没有必要去测试屏幕中的每一个点,一个三角形面可能只占屏幕很小的部分,可以利用一个bouding box包围住想要测试的三角形,只对该bounding box内的点进行采样测试,如下图:
锯齿
在经过上述的光栅化过程后,会得到如下图片,称为锯齿或走样。
而反锯齿或反走样是图形学一大挑战。
判断像素是否在三角形内
方法:叉乘
[外链图片转存中…(img-WbHD8hBg-1710390408277)]
三角形ABC:
AB 叉乘 AQ BC 叉乘 BQ CA 叉乘 CQ 符号(方向)相同则在内部,否则在外部。(叉乘反映向量的左右位置关系)
特殊情况:边上的点
- 不做处理:本课程
- 特殊处理:OpenGL/DX
优化——Bounding Box
因此自然的,只需要遍历每一个点就可以得出三角形的光栅化结果了!
优化:因为显然并没有必要去测试屏幕中的每一个点,一个三角形面可能只占屏幕很小的部分,可以利用一个bouding box包围住想要测试的三角形,只对该bounding box内的点进行采样测试,如下图:
[外链图片转存中…(img-4zY8Nwxo-1710390408277)]
锯齿
在经过上述的光栅化过程后,会得到如下图片,称为锯齿或走样。
而反锯齿或反走样是图形学一大挑战。
[外链图片转存中…(img-ZUfzrs71-1710390408278)]
标签:采样,box,05,像素,三角形,games101,光栅,屏幕 From: https://blog.csdn.net/zgynbnbnb/article/details/136706790