计算机图形学Word文档格式.docx

上传人:b****5 文档编号:20000915 上传时间:2023-01-14 格式:DOCX 页数:14 大小:515.92KB
下载 相关 举报
计算机图形学Word文档格式.docx_第1页
第1页 / 共14页
计算机图形学Word文档格式.docx_第2页
第2页 / 共14页
计算机图形学Word文档格式.docx_第3页
第3页 / 共14页
计算机图形学Word文档格式.docx_第4页
第4页 / 共14页
计算机图形学Word文档格式.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

计算机图形学Word文档格式.docx

《计算机图形学Word文档格式.docx》由会员分享,可在线阅读,更多相关《计算机图形学Word文档格式.docx(14页珍藏版)》请在冰豆网上搜索。

计算机图形学Word文档格式.docx

在使用完后,SelectObject(pOldObject)恢复原来的设置

8.OnDraw成员函数由AppWizard直接生成的:

voidCTestView:

OnDraw(CDC*pDC){CTestDoc*pDoc=GetDocument();

//获取当前文档指针ASSERT_VALID(pDoc);

//检查该指针是否为空//TODO:

adddrawcodefornativedatahere//以下部分可添加自己的程序代码}

9.在OnDraw等函数中绘图时步骤:

1选择好画笔和画刷等绘图工具2确定好绘图坐标及比例尺

3根据需要选用适当的绘图函数绘出图形

10、有底层画点函数:

SetPixel(x,y,color)

11.解析几何法(直线方程直接计算)

算法的复杂度:

乘法加法(浮点数!

准确度、存放)、取整

循环体内每次进行一次乘法和取整运算,还有浮点数,效率低下

12.数值微分(DDA)法复杂度:

加法+取整

SetPixel(int(x+0.5),int(y+0.5),color);

//在指定位置画点y=y+k

特点:

DDA算法与基本算法相比,减少了浮点乘法,提高了效率。

但是x与dx、y与dy用浮点数表示,每一步要进行四舍五入后取整,不利于硬件实现,因而效率仍有待提高。

13.Bresenham算法---应用最广泛的直线扫描转换算法!

只有加法和判断!

原理:

借助于一个误差量(直线与当前实际绘制像素点的距离),来确定下一个像素点的位置。

算法的巧妙之处在于采用增量计算,使得对于每一列,只要检查误差量的符号,就可以确定该下一列的像素位置。

在起始像素(x0,y0)的第一个参数d0=e为:

e=d0=2dy-dx

this->

GetDC()->

DDA(intx_Start,inty_Start,intx_End,inty_End,COLORREFcolor)

14.圆弧基本绘制方法:

开根,三角函数运算,计算量大,不实用。

15.圆弧中点算法:

考虑对象:

第一象限的八分之一圆弧

圆弧的隐函数:

F(X,Y)=X2+Y2-R2=0切线斜率min[-1,0]

中点:

M=(Xp+1,Yp-0.5),如何取P1orP2?

当F(M)=dp<0时,M在圆内,说明P1距离圆弧更近,取P1;

当F(M)>0时,M在圆外,说明P2距离圆弧更近,取P2;

当F(M)=0时,可在P1和P2中任选1个,这里约定P2

16中点算法构造判别式dp=F(M)=F(Xp+1,Yp-0.5)=(Xp+1)2+(Yp-0.5)2-R2

(1)若dp<0,取P1,再下一个像素的判别式为:

dp+1=F(Xp+2,Yp-0.5)=dp+2Xp+3,沿正右方向,d的增量为2Xp+3;

2)若d≥0,取P2,再下一个像素的判别式为:

dp+1=F(Xp+2,Yp-1.5)=dp+(2Xp+3)+(-2Yp+2)沿右下方向,d的增量为2(Xp-Yp)+5

●d的初始值(在第一个像素(0,R)处),d0=F(1,R-0.5)=1.25-R

●算法中有浮点数,故用e=d-0.25代替,即:

d=1.25-R对应e=d-0.25=1-R;

判别式d<

0对应于e<

-0.25;

●e的初值为整数,且运算中增量也为整数,故e始终为整数,所以e<

-0.25可以用e<

0来代替。

●结论:

–if(e<

0),e+=2*x+3;

x++;

–if(e>

=0),e+=2*(x-y)+5;

x++;

y--;

中点画法代码如下:

MidpointCircle(r,color)

intr,color;

{intx,y,e;

x=0;

y=r;

e=1-r;

circlepoints(x,y,color);

while(x<

y){if(e<

0){e+=2*x+3;

x++;

}else{e+=2*(x-y)+5;

x++;

y--;

}circlepoints(x,y,color);

}}

17、显示圆弧上的八个对称点的算法:

程序只有简单加法和整数运算

voidCirclePoints(intx,inty,intcx,intcy,COLORREFcolor)//cx,cy为圆心的位置

{CDC*pDC=this->

GetDC();

pDC->

SetPixel(x+cx,y+cy,color);

SetPixel(x+cx,-y+cy,color);

SetPixel(-x+cx,y+cy,color);

SetPixel(-x+cx,-y+cy,color);

SetPixel(y+cx,x+cy,color);

SetPixel(y+cx,-x+cy,color);

SetPixel(-y+cx,x+cy,color);

SetPixel(-y+cx,-x+cy,color);

ReleaseDC(pDC);

}

18椭圆中点算法的判别式:

19区域填充算法:

区域指已经表示成点阵形式的填充图形,它是像素的集合。

区域可采用内点表示和边界表示两种表示形式。

区域可分为4向连通区域和8向连通区域。

区域填充指先将区域的一点赋予指定的颜色,然后将该颜色扩展到整个区域的过程。

区域填充算法要求区域是连通的

20种子填充法:

4连通与8连通区域的区别:

对边界的要求

区域填充(种子)的递归算法:

(1)内点表示的4连通区域的递归

voidFloodFill4(intx,inty,intoldcolor,intnewcolor){if(getpixel(x,y)==oldcolor)//属于区域内点oldcolor{drawpixel(x,y,newcolor);

FloodFill4(x,y+1,oldcolor,newcolor);

//上FloodFill4(x,y-1,oldcolor,newcolor);

//下FloodFill4(x-1,y,oldcolor,newcolor);

//左FloodFill4(x+1,y,oldcolor,newcolor);

//右}}

(2)边界表示的4连通区域的递归填充算法:

voidBoundaryFill4(intx,inty,intboundarycolor,intnewcolor){if(color!

=newcolor&

&

color!

=boundarycolor){drawpixel(x,y,newcolor);

BoundaryFill4(x,y+1,boundarycolor,newcolor);

BoundaryFill4(x,y-1,boundarycolor,newcolor);

BoundaryFill4(x-1,y,boundarycolor,newcolor);

BoundaryFill4(x+1,y,boundarycolor,newcolor);

种子(区域填充)缺点:

(1)有些像素会入栈多次,降低算法效率;

栈结构占空间。

(2)递归执行,算法简单,但效率不高,区域内每一像素都引起一次递归,进/出栈,费时费内存。

改进算法,减少递归次数,提高效率。

方法之一使用扫描线种子填充算法;

21.区域填充的扫描线算法步骤:

1首先填充种子点所在扫描线上的位于给定区域的一个区段2然后确定与这一区段相连通的上、下两条扫描线上位于给定区域内的区段,并依次保存下来。

3反复这个过程,直到填充结束。

22.区域填充的扫描线算法实现步骤

(1)初始化:

堆栈置空。

将种子点(x,y)入栈。

(2)出栈:

若栈空则结束。

否则取栈顶元素(x,y),以y作为当前扫描线。

(3)填充并确定种子点所在区段:

从种子点(x,y)出发,沿当前扫描线向左、右两个方向填充,直到边界。

分别标记区段的左、右端点坐标为xl和xr。

(4)确定新的种子点:

在区间[xl,xr]中检查与当前扫描线y上、下相邻的两条扫描线上的像素。

若存在非边界、未填充的像素,则把每一区间的最右像素作为种子点压入堆栈,返回第

(2)步。

算法特点:

上述算法对于每一个待填充区段,只需压栈一次;

因此,扫描线填充算法提高了区域填充的效率。

区域图案填充算法(数值1用填充色写,否则用背景色写)

if(pattern(x%M,y%N))

SetPixel(x,y,color);

//color为填充前景色

23、OpenGL:

图形硬件的软件接口。

OpenGL是一种应用程序编程接口,而不是一种编程语言。

OpenGL的绘制流程和原理

OpenGL的主要功能:

绘制模型.各种变换.着色模式.光照处理.纹理映射.制作动画.深度暗示.运动模糊.雾化。

24.OpenGL生成基本图形-折线//绘制折线

glBegin(GL_LINE_STRIP);

glVertex2f(0.0f,0.6f);

glVertex2f(1.0f,0.6f);

glVertex2f(0.0f,0.4f);

glVertex2f(1.0f,0.4f);

glVertex2f(0.0f,0.2f);

glVertex2f(1.0f,0.2f);

glEnd();

//glBegin(GL_LINE_LOOP);

为闭合折线//glBegin(GL_POLYGON);

为画多边形glFrontFace(GL_CW);

为实心

25.voidglPolygonStipple(constGlubyte*mask);

该函数为填充多边形定义当前的点画模式

voidglEnable(GL_POLYGON_STIPPLE);

该函数使多边形点画模式激活

voidglDisable(GL_POLYGON_STIPPLE);

该函数使多边形点画模式失效

26.三种渲染字体的方法:

位图字体、轮廓字体、纹理映射字体

27.二维基本几何变换

平移变换P`=P+T(P点已知)

旋转变换

绕坐标原点旋转角度(逆时针为正,顺时针为负)

缩放变换:

以坐标原点为缩放参照点;

不仅改变了物体的大小和形状,也改变了它离原点的距离

28.标准齐次坐标(x,y,1)

二维基本变换的矩阵表示:

齐次平移变换

齐次旋转变换

齐次缩放变换

齐次坐标优点:

变换具有统一表示形式的优点:

便于变换合成;

便于硬件实现

组合变换:

关于任意参照点Pr(xr,yr)的旋转变换

关于任意参照点Pr(xr,yr)的缩放变换

29、三维几何变换

平移变换缩放变换

旋转变换:

绕x轴绕y轴绕z轴

30逆矩阵:

平移矩阵:

T(x,y,z)-1=T(-x,-y,-z)

缩放矩阵:

S(sx,sy,sz)-1=S(1/sx,1/sy,1/sz)

旋转矩阵:

R(α,β,γ)-1=R(-α,-β,-γ)

31、坐标变换特点:

1坐标变换是在两个坐标系之间进行;

2图形是静止的,坐标系是变动的;

3简单问题用几何变换,复杂问题用坐标变换.

32、两个坐标系之间的关系写成矩阵表示形式:

由坐标系v到坐标系u的变换矩阵为

 

33、齐次坐标下的坐标变换方法

三维空间中给定一个点P0和三个线性无关的矢量v1,v2,v3,则空间中任何一个点P的矩阵可以表示为:

则P的齐次坐标为:

34.两坐标系间的齐次坐标表示:

坐标系Ⅰ原点Q0坐标轴(即基)u1,u2,u3

坐标系Ⅱ:

原点P0,坐标轴(即基)v1,v2,v3

两坐标系间可以表示成如右的关系式:

矩阵表示形式为:

齐次坐标下的两坐标系的变换矩阵为:

两坐标系之间关系矩阵表示形式为

对于空间中的任一个点D,如果已知D点在坐标系II中的坐标为[d1,d2,d3,1]T

则:

D点在坐标系I中的坐标为:

M齐-1·

[d1,d2,d3,1]T

35、视区:

在屏幕上定义的一个矩形区域。

窗口:

在投影面上定义的一个矩形区域,只有在窗口内的图形才显示,而窗口外的部分则不显示。

36.窗口到视区的变换过程步骤:

(1)将窗口左下角点平移到窗口所在坐标系的原点,变换为T1(-WXL,-WYB)

(2)进行缩放变换,使窗口的大小与视区相等,变换为S(Sx,Sy)

(3)平移使窗口与视区重合,变换为T2(VXL,VYB)

37、投影分类

透视投影:

投影中心与投影平面之间的距离为有限

平行投影:

投影中心与投影平面之间的距离为无限

(根据投影方向与投影面的夹角分为两类:

正投影和斜投影)

透视投影矩阵变为平行投影矩阵变为

作用是将三维物体变换成其二维透视投影

采用视坐标系,目的是简化投影变换。

视变换---透视变换矩阵将三维图形显示在屏幕上,组合变换的矩阵为:

38、剪裁:

裁去窗口之外物体或物体部分的一种操作。

直线段裁剪目的:

判断图形元素是否落在裁剪窗口之内并找出其位于内部的部分.

39.三维裁剪:

投影之前裁剪

只对可见的物体进行投影变换

三维裁剪相对复杂

40.二维裁剪:

投影之后裁剪

二维裁剪相对容易

需要对所有的物体进行投影变换

41.在投影之前裁剪的理由:

1三维物体的表面通常被离散表示成多边形或折线,而对这类简单图元,三维裁剪同样比较简单。

2三维图形在显示过程中需要被消隐,做这个工作要有图形的深度信息,所以必须在投影之前完成。

消隐很费时,如果在此之前裁剪(或部分裁剪)掉不可见的图形,可使需要消隐的图形减至最小。

42.裁剪的目的:

判断图形元素是否落在裁剪窗口之内并找出其位于内部的部分。

裁剪的处理的基础:

1图元关于窗口内外关系的判别;

2图元与窗口的求交。

43.待裁剪线段和窗口的关系:

1线段完全可见2显然不可见3线段至少有一端点在窗口之外,但非显然不可见.

44.点剪裁:

点(x,y)在窗口内的充分必要条件是

45.Cohen_Sutherland算法步骤:

第一步判别线段两端点是否都落在窗口内,如果是,则线段完全可见;

否则进入第二步;

第二步判别线段是否为显然不可见,如果是,则裁剪结束;

否则进行第三步;

第三步求线段与窗口边延长线的交点,这个交点将线段分为两段,其中一段显然不可见,丢弃。

对余下的另一段重新进行第一步,第二步判断,直至结束。

对显然不可见线段的快速判别

C-S编码方法:

区域编码:

用窗口四边所在的直线将整个平面分成9个区域,每个区域赋于一个四位的编码CtCbCrCl

端点编码:

定义为它所在区域的编码

结论:

当线段的两个端点的编码的逻辑“与”非零时,线段为显然不可见的

46.在现有的整体光照明模型中,主要有光线跟踪和辐射度两种方法。

经过消隐得到的投影图称为物体的真实图形。

判别可见面算法的分类按照实现时所基于的坐标系分为:

物空间算法和像空间算法。

47.为什么判别可见面算法并非在物空间实现?

1判别可见面的算法离不开排序

2排序一般是基于体、面、边或点到视点的距离

3判别可见面的算法的效率很大程度上取决于排序的效率

4扫描线的方式实现像空间算法时容易利用连贯性质,使得像空间算法更具效率。

消隐:

消除二义性,必须在绘制时消除被遮挡的不可见的线或面,习惯说称为消除隐藏线和面,简称“消隐”。

48.深度测试:

在观察坐标系下判断线段与多边形的前后关系,分粗略测试和精确测试。

49.

Z缓冲器算法优点:

1算法简单、稳定。

2便于硬件加速。

3不需要整个场景的几何数据

缺点:

1需要Z缓冲器。

2计算复杂度大

需计算的像素深度值次数=多边形个数*多边形平均占据的像素个数。

50.阴影Z缓冲器算法步骤:

1.将所有景物变换到光源坐标系中,利用Z缓冲器算法按光线方向对景物进行消隐,把那些距光源最近的物体表面上点的深度值保存在阴影缓冲器中

2.利用Z缓冲器算法按视线方向对景物进行消隐,将得到的每一个可见点变换到光源坐标系中,若它在光源坐标系中的深度值比阴影缓冲器中相应单元的值小,则说明该可见点位于阴影中,否则不是。

优点:

算法简单

缺点:

每个光源需要一个阴影缓冲器

51.混淆现象:

不光滑(阶梯状)的图形边界;

图形细节失真;

狭小图形的遗失与动态图形的闪烁。

假设与现实的矛盾是导致混淆出现的原因之一

解决方法:

改变直线段模型。

实现步骤:

1、将直线段看作具有一定宽度的狭长矩形;

2、当直线段与某象素有交时,求出两者相交区域的面积;

3、根据相交区域的面积,确定该象素的亮度值

52.反混淆:

在图形显示过程中,用于减少或消除混淆现象的方法

非加权区域采样方法解决方法:

改变直线段模型

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 金融投资

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1