西北工业大学c++大作业.doc
《西北工业大学c++大作业.doc》由会员分享,可在线阅读,更多相关《西北工业大学c++大作业.doc(25页珍藏版)》请在咨信网上搜索。
1、作业名称:利用OpenGL实现有色立体茶壶旋转图形学 院:航海学院班 级:03021301学 号:2013300749姓 名:刘德柱团队组成:刘德柱主要负责茶壶形态构建函数模块、潘峰主要负责旋转实现函数,调试、完善、报告等共同完成。西北工业大学2024年7月23日请填写以下十项内容,将表格按页对齐(插入空行),勿删除任何部分。1、问题与背景(描述程序所要解决的问题或应用背景)图片,指的就是平面图片,二维图片。它所记录的,就是当前平面的内容。至于其它面有什么它是不会记录的,也是无法记录的。如你在拍一个人的正面图像,它的侧面或背后有什么,你知道?还是相机知道?是红的?黑的?没人知道!现在你让这张图
2、片进行立体旋转,旋转到人的背后之后,能看到什么?如果你要旋转,则就不能普通的平面图片,而应该是三维图像! 这就是c+中opengl的用处了。它可以实现立体旋转,旋转360地看这个物体,并且还能给三维物体添加颜色,更具真实感和视觉效果。2、开发工具(列出所使用的开发工具和第3方开发库)VC+6. 0,MFC,Windows API3、主要功能(详细说明程序的功能)本c+程序利用OpenGL实现旋转图形,可以使示例中有色立体茶壶实现360旋转,使观众全方位立体感知茶壶形态。4、设计内容(详细描述解决问题的原理和方法、算法、数据结构等)OpenGL: 的工作顺序就是一个从定义几何要素到把象素段写入帧
3、缓冲 区的过程。在屏幕上显示图象的主要步骤是以下3 步: 1)构造几何要素(点、线、多边形、图像、位图),创建对象的数学描 述。在三维空间放置对象,选择有利的观察点。 2)计算对象的颜色,这些颜色可能直接定义,或由光照条件及纹理间 接给出。 3)光栅化,把对象的数学描述和颜色信息转换到屏幕的象素。在本程序中。首先使用相关的WINDOWS API创建窗口,其次实现程序的相应功能: 1使用OPENGL相应库函数画出正方体。 2使之旋转起来。 3在窗体中响应鼠标事件,控制正方体的旋转。程序流程如图所示:至此,程序的大体内容以及机构已经构造成型OPENGL的主体绘制工作:首先使用glClear(GL_
4、COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 清除屏幕和深度缓存,然后使用glLoadIdentity();重置当前的模型观察矩阵,确定绘制好图形的位置glTranslatef(0.0f,0.0f,z); 移入屏幕 z 个单位。函数glTranslatef(x, y, z)作用为沿着 X, Y 和 Z 轴移动; 现在是本程序中最重要的语句:glRotatef(angle,0.0f,0.0f,0.0f),其中angle为每次旋转的角度,之后分别是XYZ三个轴的旋转分量,这三个旋转分量构成了三维坐标轴中的旋转法向量。绘制:void COPENGLActView:
5、OnDraw(CDC* pDC)COPENGLActDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);static GLfloat xangle = 10.0f;glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);glPushMatrix ();glTranslatef(0.0f, 0.0f, -8.5);glRotatef(xangle, 1.0f, 0.0f, 0.0f);xangle+= 10.0f;auxSolidTeapot(1.5);glPopMatrix ();glFlush();if(FA
6、LSE=:SwapBuffers(m_pContextDC-GetSafeHdc()AfxMessageBox();重置模型观察矩阵 :glMatrixMode(GL_PROJECTION); / 选择投影矩阵 glLoadIdentity(); / 重置投影矩阵 / 设置视口的大小 gluPerspective(45.0f,(GLfloat)width/(GLfloat)height,0.1f,100.0f); glMatrixMode(GL_MODELVIEW); / 选择模型观察矩阵 glLoadIdentity(); / 重置模型观察矩阵视图框的输出:BOOL COPENGLActVi
7、ew:OnPreparePrinting(CPrintInfo* pInfo) / 默认的准备return DoPreparePrinting(pInfo);void COPENGLActView:OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)/ TODO: 添加额外的初始化之前打印void COPENGLActView:OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)/ TODO: 添加打印后进行清理void COPENGLActView:OnTimer(UINT nIDEvent)
8、/ TODO: 在这里添加消息处理程序代码和/或调用默认旋转的定时操作和动画效果处理:this-OnDraw(this-GetDC();CView:OnTimer(nIDEvent);void COPENGLActView:OnAct()SetTimer(1,15,NULL);显示场景的设置:Void RenderSene(void) static float angle = 0.0;glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);glPushMatrix ();glTranslatef(0.0f, 0.0f, -8.5);glRotate
9、f(xangle, 1.0f, 0.0f, 0.0f);xangle+= 10.0f;auxSolidTeapot(1.5);glPopMatrix ();glFlush();通过以上步骤,实现图形呈现,再通过旋转函数实现立体模型茶壶的旋转。5、程序文件与工程名称(标出程序中所有文件名、工程名称及其说明)OPENGLAct.dsw VC6工作区文件OPENGLAct.dsp VC6工程文件OPENGLAct.cpp 主程序OPENGLAct.h 主程序头文件MainFrm.cpp 框架类的实现文件OPENGLActDoc.cpp 文档OPENGLActView.cpp 视图框应用程序OPENG
10、LActView.h 视图框应用程序头文件StdAfx.cpp VC6预处理文件StdAfx.h VC6预处理头文件OPENGLAct.rc 资源文件resource.h 资源定义头文件res 图标存放文件夹OPENGLAct.ico 应用程序图标6、函数模块(程序中各个函数的原型声明及其说明)class COPENGLActApp : public CWinApp 应用程序类class COPENGLActDlg : public CDialog 应用程序对话框void COPENGLActView:OnDraw(CDC* pDC);立体模型绘制函数BOOL COPENGLActView:P
11、reCreateWindow(CREATESTRUCT& cs) ;窗口类或者样式的修改BOOL COPENGLActView:OnPreparePrinting(CPrintInfo* pInfo) ;函数的输出,实现立体茶壶的呈现void COPENGLActView:OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/) ;打印之前的初始化void COPENGLActView:OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)打印之后的清理操作void COPENGLActView:On
12、Size(UINT nType, int cx, int cy) 尺寸控制void COPENGLActView:OnTimer(UINT nIDEvent)定时器void COPENGLActView:OnAct() 动画7、使用说明(运行程序的小型说明书)运行程序OPENGLAct.cpp后,进行调试,茶壶界面自动打开。此时有色茶壶呈静态。点击“查看”-“开始动画”后,茶壶自动翻转旋转,可全方位感知茶壶形态。8、程序开发总结(简要叙述编写本作业的收获与思考)收获:通过此次程序设计实验,我对OpenGL图形函数有了初步的了解,并且能够根据书本上的现有函数整合、编写出简单的图形处理函数。总结:
13、C+语言作用范围广,如果能够熟练掌握并且能够灵活运用,将会在工程运用方面起到很大的作用。例如本题中,通过VC+6.0实现了立体茶壶模型的旋转,这个可以用于茶壶生产制造前的产品预览。的功能十分强大,需要我们学习的地方还有很多。9、运行截图(附上程序运行的截图画面,至少有1幅,截图越翔实得分越高)Windows中抓取当前活动窗口:Alt + Print Screen,抓取全屏:Print Screen。或者使用HyperSnap等软件(百度搜索)。10、源程序(附上程序源代码,若是多个文件,标出文件名)/ 1.应用程序主窗框的源代码/ MainFrm.cpp : CMainFrame框架类的实现#
14、include stdafx.h#include OPENGLAct.h#include MainFrm.h#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endif/ CMainFrameIMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)/AFX_MSG_MAP(CMainFrame)/ 注意,ClassWizard将添加和删除映射宏。/ 不编辑你所看到的这些生成的
15、代码块!ON_WM_CREATE()/AFX_MSG_MAPEND_MESSAGE_MAP()static UINT indicators =ID_SEPARATOR, / 状态行指标ID_INDICATOR_CAPS,ID_INDICATOR_NUM,ID_INDICATOR_SCRL,;/ CMainFrame建设/破坏CMainFrame:CMainFrame()/ 待办事项:添加成员初始化代码CMainFrame:CMainFrame()int CMainFrame:OnCreate(LPCREATESTRUCT lpCreateStruct)if (CFrameWnd:OnCreat
16、e(lpCreateStruct) = -1)return -1;if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) |!m_wndToolBar.LoadToolBar(IDR_MAINFRAME)TRACE0(Failed to create toolbarn);return -1; / 无法创建if (!m_wndStatusBar.Create(this
17、) |!m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT)TRACE0(Failed to create status barn);return -1; / 无法创建/ 待办事项:删除这三行如果你不想工具栏/ be dockablem_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);EnableDocking(CBRS_ALIGN_ANY);DockControlBar(&m_wndToolBar);return 0;BOOL CMainFrame:PreCreate
18、Window(CREATESTRUCT& cs)if( !CFrameWnd:PreCreateWindow(cs) )return FALSE;/ 待办事项:修改窗口类或样式来修改/ the CREATESTRUCT csreturn TRUE;/ CMainFrame诊断#ifdef _DEBUGvoid CMainFrame:AssertValid() constCFrameWnd:AssertValid();void CMainFrame:Dump(CDumpContext& dc) constCFrameWnd:Dump(dc);#endif /_DEBUG/ CMainFrame消
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 西北工业大学 c+ 作业
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【精***】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【精***】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。