文档详情

[互联网]计算机图形学-基本图形的生成与显示.ppt

发布:2018-03-06约7.44千字共79页下载文档
文本预览下载声明
* * * * * * * P(xi,yi) Pu(xi+1,yi) Pl(xi,yi-1) MⅠ(xi+1,yi-0.5) Pd(xi+1,yi-1)= Pr(xi+1,yi-1) 图 下半部分的中点 3.下部分算法推导 3.下部分算法推导 假定图中P(xi,yi)点是椭圆上半部分Ⅰ的最后一个像素,MⅠ(xi+1,yi-0.5)是用于判断点亮Pu和Pd像素的中点。 由于下一像素转入了下半部分Ⅱ,所以其中点改为判断 Pl 和 Pr 的中点 MⅡ(xi+0.5,yi-1) 椭圆弧下半部分的绘制公式 原理 3.下部分算法推导 判别方法: 若di≥0,取Pl(xi,yi-1) 若di0,取Pr(xi+1,yi-1) 3.下部分算法推导 判别公式: 误差项的递推 di≥0: 增量: 3.下部分算法推导 di0: 增量: 3.下部分算法推导 4.中点椭圆算法小结 第Ⅰ象限内椭圆弧的中点算法可以概括为:  算法实现 void CTestView::OnMidpointellispe() { CDC *pDC=GetDC(); int a=100,b=300,x,y,color=50; float d1,d2; x=0;y=b; d1=b*b+a*a*(-b+0.25); pDC-SetPixel(x,y,color); pDC-SetPixel(-x,-y,color); pDC-SetPixel(-x,y,color); pDC-SetPixel(x,-y,color); while(b*b*(x+1)a*a*(y-0.5)) { if(d1=0) { d1+=b*b*(2*x+3); x++; } else { d1+=b*b*(2*x+3)+a*a*(-2*y+2); x++; y--; } pDC-SetPixel(x,y,color); pDC-SetPixel(-x,-y,color); pDC-SetPixel(-x,y,color); pDC-SetPixel(x,-y,color); }/*while上半部分*/ d2=b*b*(x+0.5)*(x+0.5)+a*a*(y-1)*(y-1)-a*a*b*b; while(y0) { if(d2=0) { d2+=b*b*(2*x+2)+a*a*(-2*y+3); x++; y--; } else { d2+=a*a*(-2*y+3);y--; } pDC-SetPixel(x,y,color); pDC-SetPixel(-x,-y,color); pDC-SetPixel(-x,y,color); pDC-SetPixel(x,-y,color); } } * 用离散量表示连续量引起的失真,就叫做走样(Aliasing)。 反走样 图 绘制直线时的走样现象 反走样 产生原因: 数学意义上的图形是由无线多个连续的、面积为零的点构成;但在光栅显示器上,用有限多个离散的,具有一定面积的象素来近似地表示他们。 * * 走样现象: 一是光栅图形产生的阶梯形。 一是图形中包含相对微小的物体时,这些物体在静态图形中容易被丢弃或忽略,在动画序列中时隐时现,产生闪烁。 反走样 例子 图。 丢失细节与运动图形的闪烁 用于减少或消除这种效果的技术,称为反走样(antialiasing,图形保真)。 一种简单方法:硬件分辨率 图 分辨率提高一倍,阶梯程度减小一倍 软件反走样方法 空间混色原理 人眼对某一区域颜色的识别是取这个区域颜色的平均值。 过取样(supersampling),或后滤波 区域取样(area sampling),或前滤波 * * 过取样:在高于显示分辨率的较高分辨率下用点取样方法计算,然后对几个象素的属性进行平均得到较低分辨率下的象素属性。 反走样——过取样(super sampling) 简单过取样 在x,y方向把分辨率都提高一倍,使每个象素对应4个子象素,然后扫描转换求得各子象素的颜色亮度,再对4个象素的颜色亮度进行平均,得到较低分辨率下的象素颜色亮度。 图 简单的过取样方式 重叠过取样:为了得到更好的效果,在对一个像素点进行着色处理时,不仅仅只对其本身的子像素进行采样,同时对其周围的多个像素的子像素进行采样,来计算该点的颜色属性。 图 重叠过取样 基于加权模板的过取样: 前面在确定像素的亮度时,仅仅是对所有子像素的亮度进行简单的平均。 更常见的做法是给
显示全部
相似文档