资源描述:
《第三章计算机图形学ppt课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、3.1如何在计算机上绘图3.1.1在计算机上绘图的一般方法用现有绘图软件系统画图Word中的图文编辑工具AutoCADPhotoshop等大型绘图软件用绘图软件包OpenGL就是一个典型的、已经被接受的国际工业标准的图形软件包。Java3D用操作系统的绘图功能如Windows中Win32API中就提供了基本的绘图功能。3.1.2用OpenGL绘图建立新项目。在VC中,选择File
2、New,在弹出的对话中选择Projects面板,再在列表框中选择MFCAppWizard(exe),建立一个MF
3、C单文档视图结构的应用程序。添加头文件。在项目的视图头文件中添加如下代码#include#include添加静态库。选择Project
4、Settings命令,在Link面板的Object/LibraryModules文本框输入opengl32.lib和glu32.lib,中间用空格隔开3.1.2用OpenGL绘图选择View
5、ClassWizard命令,在MessageMap面板中为视图类添加以下消息函数OnDestroy();OnSize();OnCreat
6、e();在视图类中添加的四个新函数为CExam1View::Draw();VoidCExam1View::gl_Init();VoidCExam1View::gl_Transform();VoidCExam1View::gl_point(GLintx,Glinty)程序代码3.1.2用OpenGL绘图在CExam1View的成员函数OnDraw()中加入对Draw()的调用。编译并执行程序三基本光栅图形生成算法3.2直线生成算法3.2.1生成直线的DDA算法设直线的起点坐标为(xs,ys),终点坐
7、标为(xe,ye),令Δx=xe-xs,Δy=ye-ys,则直线参数方程为(3.1)目标是能快速地求出能很好地表示直线的象素3.2.1生成直线的DDA算法提高速度的方法:乘法用加法实现,用等步长计算直线上的点,设(xi,yi)是第i步得的直线上的点,则直线上第个i+1点是(xi+1,yi+1),其中当Δx>Δy>0,即直线斜率小于1,应使x方向每次增加1,y方向最多增加1,此时区Δt=1/Δx;同理,当Δy>Δx>0,直线斜率大于1,取Δt=1/Δx,所以直线的DDA算法程序voiddda(int
8、x1,inty1,intx2,inty2)//直线DDA{intk,i;floatx,y,dx,dy;k=abs(x2-x1);if(abs(y2-y1)>k)k=abs(y2-y1);dx=float(x2-x1)/k;dy=float(y2-y1)/k;x=float(x1+0.5);y=float(y1+0.5);for(i=0;i9、基本原理:假设直线斜小于1。设P=(x,y)是直线上的一点(用Δ表示),点P正右方或右上方的点分别为(xi+1,yi)和(xi+1,yi+1),设M表示PB和PT的中点,设Q是直线与垂直线x=xi+1的交点,若M在Q的下方,则PT离直线近,应取为下一个像素;否则应取PB。正负法每步迭代涉及的像素和中点示意图MPTPBP=(x,y)Q正负法的具体实现设直线的起点和终点分别为(x0,y0)和(x1,y1),直线方程为:其中分别对应于点在直线上、上方和下方要判断点M在直线上,上方还是下方可将M代入下面的
10、判别式判断符号即可正负法算法的具体实现d<0,Q在M上方,取P2为下一像素MP=(x,y)QP2d>0,取P1为下一像素P1d=0,可在两个点中任取一个,约定取右下方的点在d>0,取右下方像素P1,下一个像素应取哪个,应计算若d<0,则取右上方像素P2,并计算最后讨论d的初始值,第一个像素应取(x0,y0)正负法算法由于(x0,y0)在直线上,故F(x0,y0)=0。因此,设第一个像素取(x0,y0),则当d>0时,当d<0时,为避免浮点运算,做如下处理当d>0时,当d<0时,正负法程序voidM
11、idpointLine(intx0,inty0,intx1,inty1){inta,b,delta1,delta2,d,x,y;a=y0-y1;b=x1-x0;d=2*a+b;delta1=2*a;delta2=2*(a+b);x=x0;y=y0;glBegin(GL_POINTS);glVertex2s(x,y);glEnd();while(x