




已閱讀5頁,還剩9頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
計(jì)算機(jī)系統(tǒng)綜合課程設(shè)計(jì)簡單的OpenGL動(dòng)畫 設(shè)計(jì)報(bào)告學(xué)生 陳 魯 蔡 濱 班級(jí) 成教02計(jì)算機(jī)本科 指導(dǎo) 陸 衛(wèi) 忠 時(shí)間 2005年12月23日 蘇州科技學(xué)院成教02計(jì)算機(jī)科學(xué)與技術(shù)總?cè)蝿?wù)1 課題名稱使用OpenGL技術(shù),制作一個(gè)彩色旋轉(zhuǎn)立方體。2 制作單位蘇州科技學(xué)院成教02計(jì)算機(jī)科學(xué)與技術(shù)3 完成地點(diǎn)電子系學(xué)生機(jī)房4 完成時(shí)間2006年1月6日用戶需求分析1.背景a .使用OpenGL制作彩色旋轉(zhuǎn)立方體b05年第一學(xué)期末實(shí)驗(yàn)周課程設(shè)計(jì)c電子系學(xué)生機(jī)房完成該課程設(shè)計(jì) 1.1參考資料Visual C+ CAD 應(yīng)用程序開發(fā)技術(shù)王清輝 王彪 編著 機(jī)械工業(yè)出版社 Visual C+ 實(shí)踐與提高 圖形圖像編程篇 李于劍 編著中國鐵道出版社2.任務(wù)概述2.1目標(biāo)利用OpenGL的動(dòng)畫功能,實(shí)現(xiàn)運(yùn)動(dòng)彩色立方體的旋轉(zhuǎn)。效果如圖所示。2.2使用特點(diǎn) 程序編譯成功后生成EXE文件,可以觀看到利用OpenGL的函數(shù)實(shí)現(xiàn)動(dòng)畫功能,使彩色立方體旋轉(zhuǎn)。3需求規(guī)定 3.1對(duì)技術(shù)的需求OpenGL技術(shù):OpenGL(Open Graphics Library)是一個(gè)優(yōu)秀的三維圖形硬件接口,實(shí)際上是一個(gè)維圖形和模型庫。使用OpenGL可以繪制出真實(shí)感很強(qiáng)的三維圖形,且由于越來越多的高檔加速卡支持OpenGL,所以使用OpenGL繪圖可以獲得很快的執(zhí)行速度。OpenGL是一個(gè)與硬件無關(guān)的圖形編程接口,可以在不同的硬件平臺(tái)上實(shí)現(xiàn)。OpenGL最初目的是將用戶從具體的硬件環(huán)境的操作系統(tǒng)中解放出來,而可以完全不到理解這些系統(tǒng)的結(jié)構(gòu)和指令系統(tǒng)。OpenGL本身不提供高級(jí)的造型命令,而是通過基本的幾何圖元-點(diǎn),線和多邊形來建 立幾何模型。用戶則是通過這些基本圖元來建立高級(jí)的幾何模型。OpenGL可以提供的功能主要包括:(1) 圖形繪制。(2) 充換操作(3) 顏色模式(4) 光照(5) 圖像效果增強(qiáng)(6) 位圖和圖像(7) 紋理映射(8) 交互與動(dòng)畫4運(yùn)行環(huán)境規(guī)定4.1設(shè)備硬件:CPU P3 533 內(nèi)存 128M 顯示卡:支持OpenGL 硬盤空間:20G軟件:Win 98/Win me/Win NT/Win 2000/Win XP/Win 2003 Visual C+ 編程工具詳細(xì)設(shè)計(jì)說明書1引言1.1編寫目的本系統(tǒng)可以提供一個(gè)彩色旋轉(zhuǎn)立方體,使用戶直接就可以看到一個(gè)使用OpenGL技術(shù)而旋轉(zhuǎn)的彩色立方體。1.2背景a .使用OpenGL制作彩色旋轉(zhuǎn)立方體b05年第一學(xué)期末實(shí)驗(yàn)周課程設(shè)計(jì)c電子系學(xué)生機(jī)房完成該課程設(shè)計(jì) 1.3定義OpenGL(Open Graphics Library)是一個(gè)三維圖形硬件接口,實(shí)際上是一個(gè)三維圖形和模型庫。1.4參考資料Visual C+ CAD 應(yīng)用程序開發(fā)技術(shù) 王清輝 王彪 編著機(jī)械工業(yè)出版社 Visual C+ 實(shí)踐與提高 圖形圖像編程篇李于劍 編著 中國鐵道出版社2總體設(shè)計(jì)2.1需求規(guī)定 為用戶提供一個(gè)可以旋轉(zhuǎn)的彩色立方體。2.2運(yùn)行環(huán)境 硬件:CPU P3 533 內(nèi)存 128M 顯示卡:支持OpenGL 硬盤空間:20G軟件:Win 98/Win me/Win NT/Win 2000/Win XP/Win 2003 Visual C+ 編程工具2.3設(shè)計(jì)概念 OpenGL支持雙緩存技術(shù)。使用雙緩存可以實(shí)現(xiàn)平滑的圖形動(dòng)畫效果。在雙緩存模式下,幀存被分為兩個(gè)視頻緩存:前臺(tái)視頻和后臺(tái)視頻。當(dāng)繪制函數(shù)調(diào)用結(jié)束,并完成了后臺(tái)視頻緩的內(nèi)容時(shí),OpenGL便將它拷貝到前臺(tái)視頻緩存。由于這個(gè)視頻交換的時(shí)間極短,肉眼感覺不出來,因此可以實(shí)現(xiàn) 平滑的圖形動(dòng)畫效果。Gcameraobject2.4結(jié)構(gòu)CViewCOpenGLDC Object m_CameraCGLViewm_pDC CGLView的結(jié)構(gòu) OnDraw() M_pGLDC-Ready()RenderScene()M_pGLDC-Finish()OnDestroy()Delete m_pGLDC OnCreate()Create COpenGLDC CGLViewWindows Message LoopOnSize()M_pGLDC-GLResize() CGLView的消息處理2.5尚未問決的問題在本系統(tǒng)中,該立方體的繞XYZ軸旋轉(zhuǎn)的時(shí)間還沒有具體的程序來確定。3接口設(shè)計(jì)3.1用戶接口向用戶提供一個(gè).exe文件,用戶直接運(yùn)行該文件就可以得到一個(gè)彩色旋轉(zhuǎn)立方體。4運(yùn)行設(shè)計(jì)4.1運(yùn)行控制 直接運(yùn)行4.2運(yùn)行時(shí)間由于程序占用資源很少,運(yùn)行時(shí)間快,點(diǎn)擊后即可看見圖形效果。5系統(tǒng)出錯(cuò)處理設(shè)計(jì)由于該系統(tǒng)簡單可靠,出錯(cuò)后關(guān)閉再重新運(yùn)行就可以再次得到該立方體。主要源代碼DialogGLDlg.hclass CDialogGLDlg : public CDialog/ Constructionpublic:void Onabout();void BuildList();CDialogGLDlg(CWnd* pParent = NULL);/ standard constructorBOOL SetWindowPixelFormat(HDC hDC);BOOL CreateViewGLContext(HDC hDC);void RenderScene();void Rotate();BOOL m_Rotate;HGLRC m_hGLContext;int m_GLPixelIndex;double m_transY;double m_transX;double m_angle1;double m_angle2;floatm_ScaleX;float m_ScaleY;float m_ScaleZ;GLdouble m_xRotate;GLdouble m_yRotate;int m_width;int m_height;int m_exp;float m_size;CPoint m_RightDownPos;CPoint m_LeftDownPos;BOOL m_RightButtonDown;BOOL m_LeftButtonDown;/ Dialog Data/AFX_DATA(CDialogGLDlg)enum IDD = IDD_DIALOGGL_DIALOG ;/ NOTE: the ClassWizard will add data members here/AFX_DATA/ ClassWizard generated virtual function overrides/AFX_VIRTUAL(CDialogGLDlg)protected:virtual void DoDataExchange(CDataExchange* pDX);/ DDX/DDV support/AFX_VIRTUAL/ Implementationprotected:afx_msg void OnContextMenu(CWnd*, CPoint point);HICON m_hIcon;/ Generated message map functions/AFX_MSG(CDialogGLDlg)virtual BOOL OnInitDialog();afx_msg void OnSysCommand(UINT nID, LPARAM lParam);afx_msg void OnPaint();afx_msg HCURSOR OnQueryDragIcon();afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);afx_msg void OnDestroy();afx_msg void OnSize(UINT nType, int cx, int cy);afx_msg void OnLButtonDown(UINT nFlags, CPoint point);afx_msg void OnLButtonUp(UINT nFlags, CPoint point);afx_msg void OnMouseMove(UINT nFlags, CPoint point);afx_msg void OnTimer(UINT nIDEvent);afx_msg void OnPopupRotate();afx_msg void OnPopupSizeDecrease();afx_msg void OnPopupSizeIncrease();afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);/AFX_MSGDECLARE_MESSAGE_MAP();/AFX_INSERT_LOCATION/ Microsoft Developer Studio will insert additional declarations immediately before the previous line.DialogGLDlg.cppBOOL CDialogGLDlg:SetWindowPixelFormat(HDC hDC) PIXELFORMATDESCRIPTOR pixelDesc; /結(jié)構(gòu)體,用于構(gòu)造畫圖面pixelDesc.nSize = sizeof(PIXELFORMATDESCRIPTOR); /大小pixelDesc.nVersion = 1;/Specifies the version of this data structure. This value should be set to 1. pixelDesc.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL |PFD_DOUBLEBUFFER |PFD_STEREO_DONTCARE;pixelDesc.iPixelType = PFD_TYPE_RGBA;pixelDesc.cColorBits = 32;pixelDesc.cRedBits = 8;pixelDesc.cRedShift = 16;pixelDesc.cGreenBits = 8;pixelDesc.cGreenShift = 8;pixelDesc.cBlueBits = 8;pixelDesc.cBlueShift = 0;pixelDesc.cAlphaBits = 0;pixelDesc.cAlphaShift = 0;pixelDesc.cAccumBits = 64;pixelDesc.cAccumRedBits = 16;pixelDesc.cAccumGreenBits = 16;pixelDesc.cAccumBlueBits = 16;pixelDesc.cAccumAlphaBits = 0;pixelDesc.cDepthBits = 32;pixelDesc.cStencilBits = 8;pixelDesc.cAuxBuffers = 0;pixelDesc.iLayerType = PFD_MAIN_PLANE;pixelDesc.bReserved = 0;pixelDesc.dwLayerMask = 0;pixelDesc.dwVisibleMask = 0;pixelDesc.dwDamageMask = 0;m_GLPixelIndex = ChoosePixelFormat(hDC,&pixelDesc);if(m_GLPixelIndex=0) / Choose default m_GLPixelIndex = 1;if(DescribePixelFormat(hDC,m_GLPixelIndex,sizeof(PIXELFORMATDESCRIPTOR),&pixelDesc)=0)return FALSE;if(SetPixelFormat(hDC,m_GLPixelIndex,&pixelDesc)=FALSE)return FALSE;return TRUE;BOOL CDialogGLDlg:CreateViewGLContext(HDC hDC)m_hGLContext = wglCreateContext(hDC);if(m_hGLContext=NULL)return FALSE;if(wglMakeCurrent(hDC,m_hGLContext)=FALSE)return FALSE; return TRUE;/窗體顏色int CDialogGLDlg:OnCreate(LPCREATESTRUCT lpCreateStruct) if (CDialog:OnCreate(lpCreateStruct) = -1)return -1;HWND hWnd = GetSafeHwnd();HDC hDC = :GetDC(hWnd);if(SetWindowPixelFormat(hDC)=FALSE)return 0;if(CreateViewGLContext(hDC)=FALSE)return 0;COLORREF color = :GetSysColor(COLOR_3DFACE);glClearColor(float)GetRValue(color)/255.0f, (float)GetGValue(color)/255.0f, (float)GetBValue(color)/255.0f, 1.0);glPolygonMode(GL_FRONT,GL_FILL);glPolygonMode(GL_BACK,GL_FILL);/ Gouraud glShadeModel(GL_SMOOTH);BuildList();SetTimer(0,5,NULL);return 0;void CDialogGLDlg:OnDestroy() CDialog:OnDestroy();if(wglGetCurrentContext() != NULL)wglMakeCurrent(NULL,NULL);if(m_hGLContext != NULL) wglDeleteContext(m_hGLContext);m_hGLContext = NULL;void CDialogGLDlg:OnSize(UINT nType, int cx, int cy) CDialog:OnSize(nType, cx, cy);GLsizei width,height;GLdouble aspect;width = cx;height = cy;if(cy=0)aspect = (GLdouble)width; elseaspect = (GLdouble)width/(GLdouble)height;glViewport(0,0,width,height);glMatrixMode(GL_PROJECTION);glLoadIdentity();gluPerspective(45,aspect,1,10.0);glMatrixMode(GL_MODELVIEW);glLoadIdentity();glDrawBuffer(GL_BACK);glEnable(GL_DEPTH_TEST);void CDialogGLDlg:RenderScene() /著色glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); /刷新窗口背景glPushMatrix();/ Position / translationglTranslated(0.0,0.0,-8.0);glRotated(m_xRotate, 1.0, 0.0, 0.0);glRotated(m_yRotate, 0.0, 1.0, 0.0);glScalef(m_ScaleX,m_ScaleY,m_ScaleZ);:glCallList(1);glPopMatrix();void CDialogGLDlg:OnLButtonDown(UINT nFlags, CPoint point) m_LeftButtonDown = TRUE;m_LeftDownPos = point;KillTimer(0);CDialog:OnLButtonDown(nFlags, point);void CDialogGLDlg:OnLButtonUp(UINT nFlags, CPoint point) m_LeftButtonDown = FALSE;CDialog:OnLButtonUp(nFlags, point);void CDialogGLDlg:OnMouseMove(UINT nFlags, CPoint point) if(m_LeftButtonDown) CSize rotate = m_LeftDownPos - point;m_LeftDownPos = point;m_yRotate -= rotate.cx;m_xRotate -= rotate.cy;InvalidateRect(NULL,FALSE);CDialog:OnMouseMove(nFlags, point);void CDialogGLDlg:OnContextMenu(CWnd*, CPoint point) / CG: This block was added by the Pop-up Menu component if (point.x = -1 & point.y = -1)/keystroke invocationCRect rect;GetClientRect(rect);ClientToScreen(rect);point = rect.TopLeft();point.Offset(5, 5);CMenu menu;VERIFY(menu.LoadMenu(CG_IDR_POPUP_DIALOG_GLDLG);CMenu* pPopup = menu.GetSubMenu(0);ASSERT(pPopup != NULL);CWnd* pWndPopupOwner = this;while (pWndPopupOwner-GetStyle() & WS_CHILD)pWndPopupOwner = pWndPopupOwner-GetParent();pPopup-TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y,pWndPopupOwner);void CDialogGLDlg:Rotate() m_yRotate -= 2;InvalidateRect(NULL,FALSE);void CDialogGLDlg:OnTimer(UINT nIDEvent) m_yRotate -= 3;m_xRotate -= 2;InvalidateRect(NULL,FALSE);CDialog:OnTimer(nIDEvent);void CDialogGLDlg:OnPopupRotate() SetTimer(0,5,NULL);void CDialogGLDlg:OnPopupSizeDecrease() m_ScaleX /= 1.1f;m_ScaleY /= 1.1f;m_ScaleZ /= 1.1f;InvalidateRect(NULL,FALSE);void CDialogGLDlg:OnPopupSizeIncrease() m_ScaleX *= 1.1f;m_ScaleY *= 1.1f;m_ScaleZ *= 1.1f;InvalidateRect(NULL,FALSE);void CDialogGLDlg:BuildList() :glNewList(1,GL_COMPILE_AND_EXECUTE); glShadeModel(GL_SMOOTH);float x = m_size;float xt = 5.0f;glBegin(GL_POLYGON); /分別繞x y z軸旋轉(zhuǎn)glNormal3d(0.0,0.0,1.0);glColor3ub(255,0,0);glVertex3d( x, x, x);glColor3ub(0,255,0);glVertex3d( x, -x, x);glColor3ub(0,0,255);glVertex3d(-x, -x, x);glColor3ub(255,255,0);glVertex3d(-x, x, x);glEnd();glBegin(GL_POLYGON);glNormal3d(0.0,0.0,-1.0);glColor3ub(255,0,0);glVertex3d( -x, x, -x);glColor3ub(0,255,0);glVertex3d( -x, -x, -x);glColor3ub(0,0,255);glVertex3d( x, -x, -x);glColor3ub(255,255,0);glVertex3d( x, x, -x);glEnd();glBegin(GL_POLYGON);glNormal3d(1.0,0.0,0.0);glColor3ub(255,0,0);glVertex3d( x, x, x);glColor3ub(0,255,0);glVertex3d( x, x, -x);glColor3ub(0,0,255);glVertex3d( x, -x, -x);glColor3ub(255,255,0);glVertex3d( x, -x, x);glEnd();glBegin(GL_POLYGON);glNormal3d(-1.0,0.0,0.
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 航空航天零部件高精度加工技術(shù)2025年市場(chǎng)前景與挑戰(zhàn)報(bào)告
- 葡萄酒行業(yè)產(chǎn)區(qū)特色品牌國際化:2025年全球市場(chǎng)機(jī)遇分析報(bào)告
- 2025屆滁州鳳陽縣聯(lián)考七下英語期末檢測(cè)試題含答案
- 2025年電商平臺(tái)內(nèi)容營銷與種草經(jīng)濟(jì)在電商區(qū)塊鏈技術(shù)應(yīng)用報(bào)告
- 2025年醫(yī)藥行業(yè)合規(guī)運(yùn)營策略與信息化建設(shè)深度分析報(bào)告
- 2025年BIM技術(shù)在建筑行業(yè)工程項(xiàng)目施工進(jìn)度調(diào)整與優(yōu)化報(bào)告
- 2025年醫(yī)藥企業(yè)研發(fā)外包(CRO)模式下的臨床試驗(yàn)數(shù)據(jù)安全報(bào)告
- 2025年醫(yī)藥流通行業(yè)供應(yīng)鏈優(yōu)化與成本控制策略分析報(bào)告
- 繼教培訓(xùn)課件模板
- 廣東省東莞市五校2025屆七年級(jí)英語第二學(xué)期期中學(xué)業(yè)水平測(cè)試模擬試題含答案
- 新疆阿克蘇地區(qū)(2024年-2025年小學(xué)六年級(jí)語文)統(tǒng)編版小升初真題(下學(xué)期)試卷及答案
- 2025年初級(jí)社會(huì)工作者綜合能力全國考試題庫(含答案)
- 課程思政示范課程申報(bào)書
- 河南天一大聯(lián)考2024屆高一數(shù)學(xué)第二學(xué)期期末考試試題含解析
- 北京101中學(xué)2023-2024學(xué)年七下英語期末檢測(cè)試題含答案
- 國家開放大學(xué)本科《管理英語4》一平臺(tái)機(jī)考真題及答案(第六套)
- 2024年廣東省中考生物試卷附答案
- 合肥市瑤海區(qū)2022-2023學(xué)年七年級(jí)下學(xué)期期中歷史試題【帶答案】
- 一年級(jí)下冊(cè)口算題卡大全(口算練習(xí)題50套直接打印版)
- 2022-2023學(xué)年涼山彝族自治州數(shù)學(xué)三年級(jí)下冊(cè)期末考試試題含答案
- (高清版)JTG 5421-2018 公路瀝青路面養(yǎng)護(hù)設(shè)計(jì)規(guī)范
評(píng)論
0/150
提交評(píng)論