收藏 分销(赏)

计算机图形学专业课程设计方案报告.doc

上传人:精*** 文档编号:2684888 上传时间:2024-06-04 格式:DOC 页数:20 大小:404.04KB 下载积分:10 金币
下载 相关 举报
计算机图形学专业课程设计方案报告.doc_第1页
第1页 / 共20页
计算机图形学专业课程设计方案报告.doc_第2页
第2页 / 共20页


点击查看更多>>
资源描述
计算机图形学 课程设计报告 设计课题: 专业班级: 学 号: 学生姓名: 指引教师: 设计时间: .12.06 中南林业科技大学涉外学院理工系 计算机图形学 课程设计任务书 姓 名: 尹志刚 专 业: 计算机科学与技术 班 级: 16级 3班 指引教师: 廖宁 职 称: 课程设计题目:细脚怪 已知技术参数和设计规定: 所需仪器设备: 成果验收形式:课程设计报告(纸质) 程序运营效果图 参照文献: 时间 安排 指引教师: 廖宁 教研室主任: 12月06 日 注:本表下发学生一份,指引教师一份,栏目不够时请另附页。 课程设计任务书装订于设计计算阐明书(或论文)封面之后,目录页之前。 目 录 一. 设计目…………………………………………………………… 二. 设计规定…………………………………………………………… 1. 构建基本类 …………………………………………………… 2. 构建直线类 …………………………………………………… 3. 构建变换类 …………………………………………………… 4. 构建填充类 …………………………………………………… 5. 构建光照类 …………………………………………………… 三. 开发环境………………………………………………………… 四. 详细设计 五. 源程序 六. 程序运营效果图 七. 总结 设计目 § 培养对图形建模、变换、投影、消隐、光照原理理解和应用。 § 培养图形类编程能力。 § 培养计算机图形学应用软件开发能力。 设计规定 进一步研究计算机图形学生成原理,设计算法实现详细类。 1.构建基本类 实现CP2类绘制二维点;实现CP3类绘制三维点;实现CRGB类解决RGB颜色;实现CVector类解决矢量。 2.构建直线类 实现CLine类绘制任意斜率直线、实现CALine类绘制任意斜率反走样直线、实现CCLine类绘制任意斜率颜色渐变直线、实现CACLine类绘制任意斜率反走样颜色渐变直线。 3.构建变换类 实现CTransForm完毕二维和三维图形变换。 4.构建填充类 实现CFill类使用有效边表算法填充多边形、实现CZBuffer类进行深度缓冲消隐,并使用Gouraud和Phong明暗解决填充图形面片。 5.构建光照类 实现CLight类设立点光源、实现CMaterial类设立物体材质、实现CLighting类对物体实行光照。 开发环境 Viusal C++ 6.0MFC框架。 详细设计 1. 运用函数Ellipse画出人物脸,并用给脸填充颜色。再运用Ara画出人物嘴巴。CRect拟定人物眼睛,给眼睛填充颜色。运用画笔画出人物鼻子。 2. 添加ddaline()成员函数,编写自定义成员函数ddaline()程序,编写OnDraw()函数,画出人物脚和脚趾。 3. 添加星星star()成员函数,编写自定义成员函数star()程序,拟定五角星位置、大小和颜色。 4. 添加五环circle()成员函数,并运用colorcircle()函数给五环上色。 5. 添加旗子flayA()、flayB()成员函数,拟定旗杆位置,用四点坐标设立旗子范畴,将星星和五环置于旗子中。 源程序 // Yzg6989View.cpp :implementation of the CYzg6989View class // #include "stdafx.h" #include "Yzg6989.h" #include "math.h" #include "Yzg6989Doc.h" #include "Yzg6989View.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CYzg6989View IMPLEMENT_DYNCREATE(CYzg6989View,CView) BEGIN_MESSAGE_MAP(CYzg6989View,CView) //{{AFX_MSG_MAP(CYzg6989View) // NOTE - the ClassWizard will add and remove mapping macros here. // DO NOT EDIT what you see in these blocks of generated code! //}}AFX_MSG_MAP // Standard printing commands ON_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() ///////////////////////////////////////////////////////////////////////////// // CYzg6989View construction/destruction CYzg6989View::CYzg6989View() { // TODO:add construction code here } CYzg6989View::~CYzg6989View() { } BOOL CYzg6989View::PreCreateWindow(CREATESTRUCT& cs) { // TODO:Modify the Window class or styles here by modifying // the CREATESTRUCT cs return CView::PreCreateWindow(cs); } ///////////////////////////////////////////////////////////////////////////// // CYzg6989View drawing void 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)),*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(RGB(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->SelectObject(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,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 printing BOOL CYzg6989View::OnPreparePrinting(CPrintInfo* pInfo) { // default preparation return DoPreparePrinting(pInfo); } void CYzg6989View::OnBeginPrinting(CDC* /*pDC*/,CPrintInfo* /*pInfo*/) { // TODO:add extra initialization before printing } void CYzg6989View::OnEndPrinting(CDC* /*pDC*/,CPrintInfo* /*pInfo*/) { // TODO:add cleanup after printing } ///////////////////////////////////////////////////////////////////////////// // CYzg6989View diagnostics #ifdef _DEBUG void CYzg6989View::AssertValid() const { CView::AssertValid(); } void CYzg6989View::Dump(CDumpContext& dc) const { CView::Dump(dc); } CYzg6989Doc* CYzg6989View::GetDocument() // non-debug version is inline { ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CYzg6989Doc))); return (CYzg6989Doc*)m_pDocument; } #endif //_DEBUG ///////////////////////////////////////////////////////////////////////////// // CYzg6989View message handlers void CYzg6989View::ddaline(CDC *pDC,int x0,int y0,int x1,int y1,COLORREF color) { int length,i; double x,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;i<=length;i++) { pDC->SetPixel((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)), *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); star(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); CPen p1(PS_SOLID,2,RGB(0x09,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); colorCircle(pDC,&p5,x+92+65,y+46,10); } void CYzg6989View::star(CDC *pDC,int x,int y,int r) { CPoint stars[5]; const double PI=3.1415926; double alpha=PI/10; double beta=2*PI/5; for(int i=0;i<5;i++) { stars[i].x=ceil(r*cos(i*beta+alpha))+x; stars[i].y=ceil(r*sin(i*beta+alpha))+y; } CPoint starx[5]={ stars[0], stars[2], stars[4], stars[1], stars[3], }; pDC->Polygon(starx,5); } void CYzg6989View::colorCircle(CDC *pDC,CPen *pen,int x,int y,int r) { CPen *old; old=pDC->SelectObject(pen); circle(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); }else{ pDC->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); } 程序运营效果图 总结 通过课程设计项目设计、开发、测试、总结和验收各阶段,进一步理解计算机图形学课程中理论和算法,学习计算机图形学有关类编程技巧,初步掌握游戏开发前期技能。
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 学术论文 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服