1、 计算机图形学课程设计报告 设计课题: 专业班级: 学 号: 学生姓名: 指引教师: 设计时间: .12.06 中南林业科技大学涉外学院理工系 计算机图形学 课程设计任务书姓 名:尹志刚专 业:计算机科学与技术班 级:16级 3班指引教师:廖宁职 称:课程设计题目:细脚怪已知技术参数和设计规定:所需仪器设备:成果验收形式:课程设计报告(纸质) 程序运营效果图参照文献:时间安排指引教师: 廖宁 教研室主任: 12月06 日注:本表下发学生一份,指引教师一份,栏目不够时请另附页。课程设计任务书装订于设计计算阐明书(或论文)封面之后,目录页之前。目 录一 设计目二 设计规定1. 构建基本类 2. 构
2、建直线类 3. 构建变换类 4. 构建填充类 5. 构建光照类 三 开发环境四 详细设计五 源程序六 程序运营效果图七 总结 设计目 培养对图形建模、变换、投影、消隐、光照原理理解和应用。 培养图形类编程能力。 培养计算机图形学应用软件开发能力。设计规定 进一步研究计算机图形学生成原理,设计算法实现详细类。1.构建基本类 实现CP2类绘制二维点;实现CP3类绘制三维点;实现CRGB类解决RGB颜色;实现CVector类解决矢量。2.构建直线类 实现CLine类绘制任意斜率直线、实现CALine类绘制任意斜率反走样直线、实现CCLine类绘制任意斜率颜色渐变直线、实现CACLine类绘制任意斜率
3、反走样颜色渐变直线。3.构建变换类 实现CTransForm完毕二维和三维图形变换。4.构建填充类 实现CFill类使用有效边表算法填充多边形、实现CZBuffer类进行深度缓冲消隐,并使用Gouraud和Phong明暗解决填充图形面片。5.构建光照类 实现CLight类设立点光源、实现CMaterial类设立物体材质、实现CLighting类对物体实行光照。开发环境 Viusal C+ 6.0MFC框架。详细设计1. 运用函数Ellipse画出人物脸,并用给脸填充颜色。再运用Ara画出人物嘴巴。CRect拟定人物眼睛,给眼睛填充颜色。运用画笔画出人物鼻子。2. 添加ddaline()成员函数
4、,编写自定义成员函数ddaline()程序,编写OnDraw()函数,画出人物脚和脚趾。3. 添加星星star()成员函数,编写自定义成员函数star()程序,拟定五角星位置、大小和颜色。4. 添加五环circle()成员函数,并运用colorcircle()函数给五环上色。5. 添加旗子flayA()、flayB()成员函数,拟定旗杆位置,用四点坐标设立旗子范畴,将星星和五环置于旗子中。源程序 / Yzg6989View.cpp :implementation of the CYzg6989View class/#include stdafx.h#include Yzg6989.h#incl
5、ude math.h#include Yzg6989Doc.h#include Yzg6989View.h#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endif/ CYzg6989ViewIMPLEMENT_DYNCREATE(CYzg6989View,CView)BEGIN_MESSAGE_MAP(CYzg6989View,CView)/AFX_MSG_MAP(CYzg6989View)/ NOTE - the ClassWizard will add and remove
6、 mapping macros here./ DO NOT EDIT what you see in these blocks of generated code!/AFX_MSG_MAP/ Standard printing commandsON_COMMAND(ID_FILE_PRINT,CView:OnFilePrint)ON_COMMAND(ID_FILE_PRINT_DIRECT,CView:OnFilePrint)ON_COMMAND(ID_FILE_PRINT_PREVIEW,CView:OnFilePrintPreview)END_MESSAGE_MAP()/ CYzg6989
7、View construction/destructionCYzg6989View:CYzg6989View()/ TODO:add construction code hereCYzg6989View:CYzg6989View()BOOL CYzg6989View:PreCreateWindow(CREATESTRUCT& cs)/ TODO:Modify the Window class or styles here by modifying/ the CREATESTRUCT csreturn CView:PreCreateWindow(cs);/ CYzg6989View drawin
8、gvoid CYzg6989View:OnDraw(CDC* pDC)CYzg6989Doc* pDoc = GetDocument();ASSERT_VALID(pDoc);/ TODO:add draw code for native data here AfxGetMainWnd()-SetWindowText(6989 尹志刚);graph(pDC,0,0);CRect rect(200,120,430,350); CRect rect1(250,195,275,220); CRect rect2(355,195,380,220);CBrush nBrush(RGB(0,255,255
9、),*pOldnBrush;pOldnBrush=pDC-SelectObject(&nBrush); pDC-Ellipse(200,120,430,350);pDC-SelectObject(pOldnBrush); CBrush Brush(RGB(0,0,0),*pOldBrush; pOldBrush=pDC-SelectObject(&Brush); pDC-RoundRect(rect1,CPoint(200,200); pDC-RoundRect(rect2,CPoint(200,200); pDC-SelectObject(pOldBrush);CBrush mBrush(R
10、GB(255,255,0),*pOldmBrush;pOldmBrush=pDC-SelectObject(&mBrush); pDC-Arc(250,275,380,355,295,285,335,285);pDC-SelectObject(pOldmBrush); CPoint p1(305,295),p2(325,295); CPen Pen,*pOldPen; Pen.CreatePen(PS_SOLID,3,RGB(0,0,0); pOldPen=pDC-SelectObject(&Pen); pDC-MoveTo(p1); pDC-LineTo(p2); pDC-SelectObj
11、ect(pOldPen); pDC-SetTextColor(RGB(0,0,255); pDC-TextOut(225,20,同一种世界,同一种梦想);ddaline(pDC,225,305,225,450,RGB(255,0,0);ddaline(pDC,405,305,405,450,RGB(255,0,0);ddaline(pDC,225,450,225,460,RGB(0,0,0); ddaline(pDC,225,450,215,460,RGB(0,0,0);ddaline(pDC,225,450,235,460,RGB(0,0,0);ddaline(pDC,405,450,405
12、,460,RGB(0,0,0);ddaline(pDC,405,450,395,460,RGB(0,0,0);ddaline(pDC,405,450,415,460,RGB(0,0,0); / CYzg6989View printingBOOL CYzg6989View:OnPreparePrinting(CPrintInfo* pInfo)/ default preparationreturn DoPreparePrinting(pInfo);void CYzg6989View:OnBeginPrinting(CDC* /*pDC*/,CPrintInfo* /*pInfo*/)/ TODO
13、:add extra initialization before printingvoid CYzg6989View:OnEndPrinting(CDC* /*pDC*/,CPrintInfo* /*pInfo*/)/ TODO:add cleanup after printing/ CYzg6989View diagnostics#ifdef _DEBUGvoid CYzg6989View:AssertValid() constCView:AssertValid();void CYzg6989View:Dump(CDumpContext& dc) constCView:Dump(dc);CY
14、zg6989Doc* CYzg6989View:GetDocument() / non-debug version is inlineASSERT(m_pDocument-IsKindOf(RUNTIME_CLASS(CYzg6989Doc);return (CYzg6989Doc*)m_pDocument;#endif /_DEBUG/ CYzg6989View message handlersvoid CYzg6989View:ddaline(CDC *pDC,int x0,int y0,int x1,int y1,COLORREF color)int length,i;double x,
15、y,dx,dy;length=abs(x1-x0);if(abs(y1-y0)length)length=abs(y1-y0);dx=(x1-x0)/length;dy=(y1-y0)/length;x=x0+0.5;y=y0+0.5;for(i=1;iSetPixel(int)x,(int)y,color);x=x+dx;y=y+dy;void CYzg6989View:flagA(CDC *pDC,int x,int y)CBrush redBrush(RGB(0xFF,0,0),yellowBransh(RGB(0xFF,0xff,0),woodBrash(RGB(180,180,180
16、),*oldBrush;oldBrush=pDC-SelectObject(&redBrush);pDC-Rectangle(x+20,y+0,x+140,y+70);pDC-SelectObject(&woodBrash);pDC-Rectangle(x+15,y+0,x+20,y+100);pDC-SelectObject(&yellowBransh);pDC-SetPolyFillMode(WINDING);star(pDC,x+40,y+20,10);star(pDC,x+60,y+13,6);star(pDC,x+62,y+30,6);star(pDC,x+55,y+43,6);st
17、ar(pDC,x+40,y+48,6);pDC-SelectObject(oldBrush);void CYzg6989View:flagB(CDC *pDC,int x,int y)CBrush woodBrash(RGB(180,180,180),*oldBrush;pDC-Rectangle(x+85,y+0,x+205,y+70);oldBrush=pDC-SelectObject(&woodBrash);pDC-Rectangle(x+205,y+0,x+210,y+100);pDC-SelectObject(oldBrush);CPenp1(PS_SOLID,2,RGB(0x09,
18、0x51,0xA0),p2(PS_SOLID,2,RGB(0x05,0x05,0x05),p3(PS_SOLID,2,RGB(0xFE,0x01,0x00),p4(PS_SOLID,2,RGB(0xFC,0xFD,0x04),p5(PS_SOLID,2,RGB(0x30,0xA0,0x2D);colorCircle(pDC,&p1,x+60+65,y+30,10);colorCircle(pDC,&p2,x+82+65,y+30,10);colorCircle(pDC,&p3,x+104+65,y+30,10);colorCircle(pDC,&p4,x+70+65,y+46,10);colo
19、rCircle(pDC,&p5,x+92+65,y+46,10);void CYzg6989View:star(CDC *pDC,int x,int y,int r)CPoint stars5;const double PI=3.1415926;double alpha=PI/10;double beta=2*PI/5;for(int i=0;iPolygon(starx,5);void CYzg6989View:colorCircle(CDC *pDC,CPen *pen,int x,int y,int r)CPen *old;old=pDC-SelectObject(pen);circle
20、(pDC,x,y,r,FALSE);pDC-SelectObject(old);void CYzg6989View:circle(CDC *pDC,int x,int y,int r,BOOL fill)if (fill=TRUE) CBrush newBrush,*oldBrush;newBrush.CreateSolidBrush(RGB(0X33,0X33,0X33);oldBrush=pDC-SelectObject(&newBrush);pDC-Ellipse(CRect(x-r,y-r,x+r,y+r);pDC-SelectObject(oldBrush);elsepDC-Ellipse(CRect(x-r,y-r,x+r,y+r);void CYzg6989View:graph(CDC *pDC,int x,int y)flagA(pDC,x+360,y+42);flagB(pDC,x+40,y+44);程序运营效果图 总结通过课程设计项目设计、开发、测试、总结和验收各阶段,进一步理解计算机图形学课程中理论和算法,学习计算机图形学有关类编程技巧,初步掌握游戏开发前期技能。