代码改变世界

随笔分类 -  图形学(CG)

深入剖析MSAA

2018-01-08 21:37 by 风恋残雪, 18486 阅读, 收藏, 编辑
摘要: 本文打算对MSAA(Multisample anti aliasing)做一个深入的讲解,包括基本的原理、以及不同平台上的实现对比(主要是PC与Mobile)。为了对MSAA有个更好的理解,所以写下了这篇文章。当然文章中难免有错误之处,如有发现,还请指证,以免误导其他人。好了,废话不多说,下面我们开 阅读全文

边标志法填充多边形

2010-12-04 22:11 by 风恋残雪, 851 阅读, 收藏, 编辑
摘要: 这里不仔细讲原理,只是把我写的算法发出来,跟大家分享下,如果有错误的话,还请大家告诉我,如果写的不好,也请指出来,一起讨论进步。基本思想: 先用一种特殊的颜色在帧缓冲器中将多边形的边界(水平边界除外)勾画出来,然后将着色的像素点依x坐标递增的顺序两两配对,再将每一对像素所构成的扫描线区间内的所有像素置为填充色。具体分为两个步骤;(1) 打标记。对多边形的每条边进行直线扫描转换。(2) 填充。 对每条与多边形相交的扫描线,依从左到右顺序,按“左闭右开”的原则对扫描线上的像素点进行填充。使用一个布尔量inside来指示当前点的状态,若点在多边形内,则inside为真,否则为假。inside初值为假 阅读全文

改进的有效边表算法,多边形的扫描转换

2010-12-04 21:51 by 风恋残雪, 3537 阅读, 收藏, 编辑
摘要: 这里不仔细讲原理,只是把我写的算法发出来,跟大家分享下,如果有错误的话,还请大家告诉我,如果写的不好,也请指出来,一起讨论进步。边表构造的算法:(1) 首先构造一个纵向链表,链表的长度为多边形所占有的最大扫描线数,链表的每个结点,称为一个桶,则对应多边形覆盖的每一条扫描线。(2) 将每条边的信息链入与该边最小y坐标相对的桶处。也就是说,若某条边的较低点为ymin,则该边就放在相应的扫描线中。(3) 每条边的数据形成一个结点,内容包括:该扫描线与该的初始交点x(即较低端点的x值),1/k,以及该边的最大y值ymax如下:x|ymin  ymax  1/k  next(4) 同一桶中若干条边按x| 阅读全文

Bresenham画椭圆算法

2010-12-04 21:17 by 风恋残雪, 3394 阅读, 收藏, 编辑
摘要: 这里不仔细讲原理,只是把我写的算法发出来,跟大家分享下,如果有错误的话,还请大家告诉我,如果写的不好,也请指出来,一起讨论进步。算法步骤:(1) 输入椭圆的长半轴a和短半轴b。(2) 计算初始值d = b*b + a * a * (-b + 0.25), x = 0, y = b。(3) 绘制点 (x, y)及其在四分象限上的另外3个对称点。(4) 判断d的符号。若d = 0,则先将d更新为d + b * b * (2 * x + 3),再将 (x, y)更新为(x+1, y);否则先将d更新为d + b * b * (2 * x + 3) + a * a (-2 * y + 2),再将(x 阅读全文

中点Bresenham画圆

2010-12-04 20:53 by 风恋残雪, 794 阅读, 收藏, 编辑
摘要: 这里不仔细讲原理,只是把我写的算法发出来,跟大家分享下,如果有错误的话,还请大家告诉我,如果写的不好,也请指出来,一起讨论进步。算法步骤:(1) 输入圆的半径R。(2) 计算初始值d = 1 - R, x = 0; y = R。(3) 绘制点(x, y), 及其在八分圆中的另外7个对称点。(4) 判断d的符号,若d 0, 则先将d更新为d+2*x+3,再将(x,y)更新为(x+1, y),否则将d更新为d+2*(x - y) + 5,再将(x, y)更新为(x+1, y-1)。(5) 当x = y时,重复步骤(3)和(4),否则结束。下面是画圆算法: 阅读全文

改进的Bresenham算法

2010-12-04 20:29 by 风恋残雪, 1158 阅读, 收藏, 编辑
摘要: 这里不仔细讲原理,只是把我写的算法发出来,跟大家分享下,如果有错误的话,还请大家告诉我,如果写的不好,也请指出来,一起讨论进步。算法步骤:(1) 输入直线的两端点P0 (x0, y0)和P1 (x1, y1)。(2) 计算初始值dx, dy, e = -dx, x = x0, y = y0。(3) 绘制点 (x, y)。(4) e更新为e+2 * dy。判断e的符号,若e 0, 则(x, y)更新为(x+1, y+1), 同时将e更新为e-2*dx;否则(x, y)更新为(x+1, y)。(5) 当直线没有画完时,重复步骤(3)和(4)否则结束。水平、垂直和|k| = 1的直线可以直接装入 阅读全文

中点Bresenham 算法及实现

2010-12-04 20:08 by 风恋残雪, 1291 阅读, 收藏, 编辑
摘要: 这里不仔细讲原理,只是把我写的算法发出来,跟大家分享下,如果有错误的话,还请大家告诉我,如果写的不好,也请指出来,一起讨论进步。 只写出0<=k<=1时的Bresenham算法绘图过程 (1) 输入直线的两端点,P0(x0, y0)和P1(x1, y1). (2) 计算初始值dx, dy, d = 阅读全文