freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于opengl的飛機(jī)飛行動畫模擬設(shè)計(jì)電子信息工程畢業(yè)論文-在線瀏覽

2025-08-09 01:11本頁面
  

【正文】 penGL核心庫115gl主要用于常規(guī)的、核心的圖形處理OpenGL實(shí)用庫43glu主要用于實(shí)現(xiàn)一些較為復(fù)雜的操作,如:坐標(biāo)變換、紋理、繪制二次圖形等OpenGL輔助庫31aux主要用于窗口管理、輸入輸出處理以及繪制一些簡單三維物體OpenGL工具庫30glut主要用于基于窗口的控制,如:多窗口繪制、空消息、定時(shí)器及繪制一些較復(fù)雜物體Windows專用庫16wgl要用于連接OpenGL和Windows 95/NT,以彌補(bǔ)OpenGL在文本方面的不足Win32 API函數(shù)庫6無主要用于處理像素存儲格式和雙幀緩存OpenGL基本數(shù)據(jù)類型如表23所示,OpenGL中定義的數(shù)據(jù)類型均以GL開頭。例如:GL_POINTS(繪制單個(gè)頂點(diǎn)集)、GL_LINES(繪制多級獨(dú)立的雙頂點(diǎn)線段)等。同其他的可視化集成開發(fā)環(huán)境一樣,Visual C++集程序的代碼編輯、編譯、連接和調(diào)度等功能于一體,再加上Microsoft公司為Visual C++開發(fā)的功能強(qiáng)大的MFC(Microsoft Foundation Class,微軟基礎(chǔ)類庫),使Visual C++成為開發(fā)Windows應(yīng)用程序的最佳選擇[2]。利用Visual C++建立一個(gè)應(yīng)用程序的基本流程如下圖所示:開始執(zhí)行終止程序初始化應(yīng)用程序初始化并創(chuàng)建應(yīng)用程序窗口消息是否為WM_QUIT應(yīng)用程序中是否處理了此信息處理消息轉(zhuǎn)送消息給窗口進(jìn)行默認(rèn)處理是是否否圖23 Windows應(yīng)用程序的基本流程 MFC環(huán)境下OpenGL單文檔應(yīng)用程序框架 構(gòu)建OpenGL程序框架實(shí)現(xiàn)OpenGL編程同編寫其他應(yīng)用程序的基本流程是一致的,都必須先為想要實(shí)現(xiàn)的功能的代碼構(gòu)建一個(gè)基于窗口設(shè)計(jì)的框架,而實(shí)現(xiàn)OpenGL繪制的重點(diǎn)在于采用渲染上下文RC繪圖,所以框架的重心在于渲染上下文RC的設(shè)置、RC與設(shè)備上下文DC的聯(lián)系等,因此構(gòu)建OpenGL程序框架的基本流程如圖所示:開始定義窗口類設(shè)置窗口類型獲得窗口客戶區(qū)設(shè)備上下文句柄m_pDC;將RC與DC聯(lián)系起來將RC設(shè)置為現(xiàn)行RC注冊窗口類設(shè)置定時(shí)器設(shè)置RC;設(shè)置邏輯調(diào)色板初始化OpenGL設(shè)置繪制三維圖形消息是否為WM_QUIT結(jié)束程序注銷窗口釋放DC和RC刪除RC刪除DC是否刪除定時(shí)器圖24 構(gòu)建OpenGL程序框架的基本流程圖 MFC簡述隨著計(jì)算機(jī)高級語言的發(fā)展,誕生了許多高級語言,不同語言之間各有特色,解決問題的思想方法各有差異,而C++則是通過構(gòu)造能夠映射問題的對象模型,獲取對象的狀態(tài)信息,從而得到輸出實(shí)現(xiàn)問題的解決。通過類與對象的設(shè)計(jì),可以將許多基本控制函數(shù)封裝起來,通過集成平臺形成多種多樣的程序框架,或是形成便于記憶使用的工具庫。MFC(Microsoft Foundation Class)是微軟基礎(chǔ)類庫的簡稱,是微軟公司設(shè)計(jì)提供的一個(gè)C++類庫,封裝了大部分的windows API函數(shù)。我們可以通過Visual C++應(yīng)用程序生成向?qū)?AppWizard)自動生成MFC環(huán)境下的單文檔應(yīng)用程序框架,省去窗口設(shè)計(jì)等過程,只要在相應(yīng)的位置添加相應(yīng)的代碼就能夠很好地進(jìn)行OpenGL編程,更好地將重心放在課題的研究上。其具體過程如下:(1) 啟動VC,在【File】菜單中,選擇New,在Project選項(xiàng)中選擇“MFC AppWizard(exe)”,新建一個(gè)單文檔工程,名稱為MYPLANE。從【Project】菜單中選擇【Settings…】,在彈出的“Project Setting”對話框中選擇Link標(biāo)簽,在“Object/library Module”編輯框內(nèi)加入“ ”,單擊OK完成庫的添加。利用MFC ClassWizard為CMYPLANEView類添加消息WM_CRETE、WM_DESTROY、WM_SIZE和WM_TIMER的響應(yīng)函數(shù)。代碼修改如下://包含有關(guān)OpenGL函數(shù)的頭文件includegl/includegl/includegl/includegl/(5) ,為其增加如下成員變量與函數(shù)。 //繪制場景BOOL SetupPixelFormat(void)。 //設(shè)置邏輯調(diào)色板BOOL InitializeOpenGL(CDC* pDC)。 //OpenGL繪制描述表HPALETTE m_hPalette。 //OpenGL設(shè)備描述表(6) ,修改該文件中的CMYPLANEView::PreCreateWindow()函數(shù),此函數(shù)即在預(yù)備創(chuàng)建窗口前設(shè)置好窗口類型與風(fēng)格。 cs){ …//設(shè)置窗口類型 |=WS_CLIPCHILDREN | WS_CLIPSIBLINGS。*/…}(7) 繼續(xù)修改該文件中的CMYPLANEView::OnDraw()函數(shù):void CMYPLANEView::OnDraw(CDC* pDC){ … RenderScene()。代碼修改如下:int CMYPLANEView::OnCreate(LPCREATESTRUCT lpCreateStruct) { …//初始化OpenGL和設(shè)置定時(shí)器 m_pDC = new CClientDC(this)。 InitializeOpenGL(m_pDC)。代碼修改如下:void CMYPLANEView::OnDestroy() { …//刪除調(diào)色板和渲染上下文、定時(shí)器 ::wglMakeCurrent(0,0)。 if (m_hPalette) DeleteObject(m_hPalette)。 } KillTimer(1)。代碼修改如下:void CMYPLANEView::OnSize(UINT nType, int cx, int cy) { … glViewport(0,0,cx,cy)。例如:如果一個(gè)窗口被另外一個(gè)窗口遮住,那么被遮住的部分是無效的,此時(shí)客戶區(qū)被判定為無效,需要重繪。 //添加定時(shí)器響應(yīng)函數(shù)和場景更新函數(shù)…}(12) 在文件中添加邏輯調(diào)色板函數(shù)CMYPLANEView::SetLogicalPalette()(具體代碼見附錄)與像素格式設(shè)置函數(shù)CMYPLANEView::SetupPixelFormat(),CMYPLANEView::SetupPixelFormat()的具體代碼如下:BOOL CMYPLANEView::SetupPixelFormat(){ PIXELFORMATDESCRIPTOR pfd = { sizeof(PIXELFORMATDESCRIPTOR), // pfd結(jié)構(gòu)的大小 1, // 版本號 PFD_DRAW_TO_WINDOW | // 支持在窗口中繪圖 PFD_SUPPORT_OPENGL | // 支持 OpenGL PFD_DOUBLEBUFFER, // 雙緩存模式 PFD_TYPE_RGBA, // RGBA 顏色模式 24, // 24 位顏色深度 0, 0, 0, 0, 0, 0, // 忽略顏色位 0, // 沒有非透明度緩存 0, // 忽略移位位 0, // 無累加緩存 0, 0, 0, 0, // 忽略累加位 32, // 32 位深度緩存 0, // 無模板緩存 0, // 無輔助緩存 PFD_MAIN_PLANE, // 主層 0, // 保留 0, 0, 0 // 忽略層,可見性和損毀掩模 }。 pixelformat = ::ChoosePixelFormat(m_pDCGetSafeHdc(), amp。//選擇像素格式 ::SetPixelFormat(m_pDCGetSafeHdc(), pixelformat, amp。 //設(shè)置像素格式 if( amp。 //設(shè)置邏輯調(diào)色板 …}(13) 在文件中添加初始化OpenGL場景函數(shù)MYPLANEView::InitializeOpenGL(),其具體代碼如下:BOOL CMYPLANEView::InitializeOpenGL(CDC* pDC){ m_pDC = pDC。 //生成繪制描述表 m_hRC = ::wglCreateContext(m_pDCGetSafeHdc())。 …}(14) 最后在文件中添加場景繪制與渲染函數(shù)CMYPLANEView::RenderScene(),并在該函數(shù)中寫入想要實(shí)現(xiàn)的繪制場景代碼,經(jīng)過編譯就可以實(shí)現(xiàn)在窗口客戶區(qū)的繪制。 第三章 課題實(shí)現(xiàn)的關(guān)鍵技術(shù) 坐標(biāo)變換如同我們所知道的所有物質(zhì)都是由原子組成的,而所有的原子又是由質(zhì)子、中子及電子組成的。在OpenGL中這樣最小形狀的存在我們稱為圖元,如:點(diǎn)、線、多邊形等,而最小的圖元即是點(diǎn)。那么我們?nèi)绾螌θS圖形進(jìn)行正確的數(shù)據(jù)描述并進(jìn)行轉(zhuǎn)換,最終使其映射到屏幕上呢?于是我們發(fā)現(xiàn)了坐標(biāo)系是聯(lián)系數(shù)據(jù)與三維圖形的唯一紐帶。接下來我們就可以將三維圖形映射到二維平面上了,我們通過投影來完成上述映射。我們把投影平面所在的三維空間稱為三維視景體,在透視投影中,視景體是一個(gè)棱臺狀,因此形成的效果是遠(yuǎn)大近?。辉谙麓瓮队爸?,視景體的形狀則是一個(gè)長方形,投影的結(jié)果無論遠(yuǎn)近都是一樣的大小,而只有在視景體內(nèi)的三維物體才能投影到二維平面上[2]。因?yàn)镺penGL是基于窗口設(shè)計(jì)的,所以最終我們是在一個(gè)窗口內(nèi)看到我們設(shè)計(jì)的三維場景,所以我們還需要對坐標(biāo)進(jìn)行最后的變換,將坐標(biāo)轉(zhuǎn)換成為適應(yīng)窗口的窗口坐標(biāo),而這個(gè)過程我們稱之為視口映射,在這個(gè)過程當(dāng)中,我們可以決定窗口對三維場景的取景范圍,映射比例等等,完成這個(gè)過程是以視口變換矩陣來實(shí)現(xiàn)的。幾何變換矩陣投影變換矩陣視圖處理矩陣視口變換矩陣[x,y,z,w]人眼坐標(biāo)裁剪坐標(biāo)設(shè)備坐標(biāo)窗口坐標(biāo)圖31 坐標(biāo)變換基本流程當(dāng)我得到了三維圖形的坐標(biāo)信息之后,我們就可以通過矩陣變換的形式對頂點(diǎn)坐標(biāo)進(jìn)行操作實(shí)現(xiàn)三維圖形的移動、旋轉(zhuǎn)、縮放等,還可以通過三維圖形的坐標(biāo)信息對其進(jìn)行紋理貼圖、材質(zhì)設(shè)置等,以此來實(shí)現(xiàn)更好的3D描述,使設(shè)計(jì)的三維圖形更加立體。通過設(shè)置動態(tài)變量對矩陣進(jìn)行變換,再利用雙緩存就可以實(shí)現(xiàn)三維圖形的動態(tài)效果。 光照三維圖形建立之后,要令其產(chǎn)生3D效果還需要一系列的透視和藝術(shù)技巧,而光照是不可或缺的。沒有光照,我們甚至都看不到圖形。這些反射的光進(jìn)入了人眼,從而使得人們能夠感知到物體的各種特性,如形狀、顏色或其他細(xì)節(jié)等。OpenGL用一種近似的光照模型模擬現(xiàn)實(shí)世界的光照效果。不同的材質(zhì)有不同的屬性,有的會自己發(fā)光,有的在各個(gè)方向上發(fā)散部分入射光,有的則像鏡子一樣在特定的方向高強(qiáng)度地反射入射光。當(dāng)它照射在一個(gè)物體的表面時(shí),它將在所有的方向上等量反射;(3)漫反射光:漫反射光來自一個(gè)特定的方向,它指的是那些被照射物體表面的反射光中均勻地向各個(gè)方向反射出的光;(4)鏡面反射光:鏡面反射光具有很強(qiáng)的方向性,當(dāng)它照射物體表面時(shí),以等于入射角的反射角進(jìn)行反射,并且當(dāng)視點(diǎn)與物體上某點(diǎn)的夾角與光線的入射角相近時(shí),我們將會看到該表面形成了一個(gè)高亮區(qū)域,我們稱其為亮點(diǎn)。在OpenGL中,由函數(shù)glLight(GLenum light, GLenum pname, TYPE param)來定義一個(gè)光源。表31 pname的值及其功能和缺省值pname功能缺省值GL_AMBIENT環(huán)境光分量的強(qiáng)度(,)GL_DIFFUSE漫反射光分量的強(qiáng)度(,)GL_SPECULAR鏡面反射光分量的強(qiáng)度(,)GL_POSITION光源位置(,)GL_SPOT_DIRECTION光源聚光方向(,)GL_SPOT_EXPONENT光源的聚光指數(shù)GL_SPOT_CUTOFF聚光的截至角GL_CONSTANT_ATTENUATION光的常數(shù)衰減因子GL_LINEAR_STTENUATION光的線性衰減因子GL_QUADRATIC_ATTENUATION光的二次衰減因子在本設(shè)計(jì)中,對于光照做如下設(shè)置:GLfloat LightAmbient[]= { , , , }。GLfloat LightSpecular[]= { , , , }。glLightfv(GL_LIGHT1, GL_AMBIENT, LightAmbient)。 //設(shè)置光源的漫反射光glLightfv(GL_LIGHT1, GL_S
點(diǎn)擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1