-
Notifications
You must be signed in to change notification settings - Fork 50
rasterisation in Chinese
Zhou edited this page Apr 14, 2016
·
3 revisions
###栅格化
假设我们有一个如下面左图所示的“坐”三角形(“坐”的意思是平顶或平底),那么栅格化可以通过下面五步实现:
- 输入三个顶点a,b,和c。
- 将它们的[-1,1]区间的所谓NDC空间坐标映射到[0, image-width/height)区间的设备坐标。
- 在三个Y坐标里找到Y_min和Y_max。
- 为ab边(见上图)和ac边建立两个直线方程。
我用的是两点式方程 - 利用上面两个方程,为Y_min和Y_max之间的每一个Y,算出一对X_min和X_max。
用这种方法,一个输入三角形就转换成了一把扫描线。或者反过来看,把这一把扫描线的X_min和X_max之间的部分涂黑,就得到了栅格化的三角形图形。特别的,如果输入的三角形是“站立”的,如下图所示,则可以利用Y_min和Y_max顶点之外的第三个顶点将“站立”三角形裁成两个“坐”三角形,而后用相同方法处理。
我还有最后一个没想太清楚的问题,就是如何处理“亚三角形”,即当一个三角形的三个顶点共线,或者它们挤在一起成为一个点,这条线或者这个点要不要画呢?在目前的程序里,这样的“亚三角形”被直接忽略。但我发现场景里那些非常纤细的物体会被画的特别难看,如下图所示(注意那个笔筒里的笔)。目前我不太清楚如果能更好的处理“亚三角形”效果会不会好一些?