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

正文內(nèi)容

基于opengl的飛機飛行動畫模擬設(shè)計電子信息工程畢業(yè)論文(編輯修改稿)

2025-07-19 01:11 本頁面
 

【文章內(nèi)容簡介】 RC)。 if (m_hPalette) DeleteObject(m_hPalette)。 if ( m_pDC ) { delete m_pDC。 } KillTimer(1)。 … }(10) 修改該文件中的CMYPLANEView::OnSize()函數(shù),此函數(shù)的作用是當(dāng)窗口改變時,會對應(yīng)地改變投影方式與視口大小,使得場景不受窗口影響正確地顯示在屏幕上。代碼修改如下:void CMYPLANEView::OnSize(UINT nType, int cx, int cy) { … glViewport(0,0,cx,cy)。 //窗口縮放時的視口變換函數(shù) … }(11) 修改該文件中的CMYPLANEView::OnSize()函數(shù),此函數(shù)的作用是當(dāng)窗口的客戶區(qū)無效時重新繪制客戶區(qū)。例如:如果一個窗口被另外一個窗口遮住,那么被遮住的部分是無效的,此時客戶區(qū)被判定為無效,需要重繪。void CMYPLANEView::OnTimer(UINT nIDEvent) { … Invalidate(FALSE)。 //添加定時器響應(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 // 忽略層,可見性和損毀掩模 }。 int pixelformat。 pixelformat = ::ChoosePixelFormat(m_pDCGetSafeHdc(), amp。pfd)。//選擇像素格式 ::SetPixelFormat(m_pDCGetSafeHdc(), pixelformat, amp。pfd)。 //設(shè)置像素格式 if( amp。 PFD_NEED_PALETTE) SetLogicalPalette()。 //設(shè)置邏輯調(diào)色板 …}(13) 在文件中添加初始化OpenGL場景函數(shù)MYPLANEView::InitializeOpenGL(),其具體代碼如下:BOOL CMYPLANEView::InitializeOpenGL(CDC* pDC){ m_pDC = pDC。 SetupPixelFormat()。 //生成繪制描述表 m_hRC = ::wglCreateContext(m_pDCGetSafeHdc())。 //置當(dāng)前繪制描述表 ::wglMakeCurrent(m_pDCGetSafeHdc(), m_hRC)。 …}(14) 最后在文件中添加場景繪制與渲染函數(shù)CMYPLANEView::RenderScene(),并在該函數(shù)中寫入想要實現(xiàn)的繪制場景代碼,經(jīng)過編譯就可以實現(xiàn)在窗口客戶區(qū)的繪制。以上代碼是基于Win32的OpenGL應(yīng)用程序構(gòu)臺框架,這些都是一些固定的用法,如果沒有特殊要求的話,我們可以直接使用,并不需要對其進行修改。 第三章 課題實現(xiàn)的關(guān)鍵技術(shù) 坐標(biāo)變換如同我們所知道的所有物質(zhì)都是由原子組成的,而所有的原子又是由質(zhì)子、中子及電子組成的。同理,在OpenGL中建立的復(fù)雜模型也是由更小、更簡單的形狀組成的,然后根據(jù)模型的要求按照特定的方式進行排列組合,最終形成了復(fù)雜的模型。在OpenGL中這樣最小形狀的存在我們稱為圖元,如:點、線、多邊形等,而最小的圖元即是點。了解了這些概念后,我們就可以開始著手對現(xiàn)實的物體進行建模并將其搬移到計算機屏幕上了,但是我們知道計算機屏幕上只能表現(xiàn)二維圖像,并且計算機只能處理數(shù)據(jù),所以我們要將三維圖形數(shù)據(jù)化,才能通過計算機對三維圖形進行操作,以此實現(xiàn)我們想要的結(jié)果。那么我們?nèi)绾螌θS圖形進行正確的數(shù)據(jù)描述并進行轉(zhuǎn)換,最終使其映射到屏幕上呢?于是我們發(fā)現(xiàn)了坐標(biāo)系是聯(lián)系數(shù)據(jù)與三維圖形的唯一紐帶。首先,我們確定一個參考點,這個參考點可以虛擬假設(shè)成人眼坐標(biāo),之后便可以在三維空間中建立虛擬的三維坐標(biāo),以此對模型的頂點進行坐標(biāo)描述,當(dāng)完成對三維圖形的坐標(biāo)描述之后,我們也就完成了對三維圖形的數(shù)據(jù)化。接下來我們就可以將三維圖形映射到二維平面上了,我們通過投影來完成上述映射。投影分為透視投影與正交投影兩種。我們把投影平面所在的三維空間稱為三維視景體,在透視投影中,視景體是一個棱臺狀,因此形成的效果是遠大近??;在下次投影中,視景體的形狀則是一個長方形,投影的結(jié)果無論遠近都是一樣的大小,而只有在視景體內(nèi)的三維物體才能投影到二維平面上[2]。并且我們知道計算機設(shè)備多種多樣,我們要將投影后的三維圖形映射到計算機屏幕上還需要令其坐標(biāo)適應(yīng)計算機屏幕的坐標(biāo),所以我們還要進一步對三維圖形的坐標(biāo)進行變換,這個過程由視圖處理矩陣來完成。因為OpenGL是基于窗口設(shè)計的,所以最終我們是在一個窗口內(nèi)看到我們設(shè)計的三維場景,所以我們還需要對坐標(biāo)進行最后的變換,將坐標(biāo)轉(zhuǎn)換成為適應(yīng)窗口的窗口坐標(biāo),而這個過程我們稱之為視口映射,在這個過程當(dāng)中,我們可以決定窗口對三維場景的取景范圍,映射比例等等,完成這個過程是以視口變換矩陣來實現(xiàn)的。下圖給出了坐標(biāo)變換的基本流程。幾何變換矩陣投影變換矩陣視圖處理矩陣視口變換矩陣[x,y,z,w]人眼坐標(biāo)裁剪坐標(biāo)設(shè)備坐標(biāo)窗口坐標(biāo)圖31 坐標(biāo)變換基本流程當(dāng)我得到了三維圖形的坐標(biāo)信息之后,我們就可以通過矩陣變換的形式對頂點坐標(biāo)進行操作實現(xiàn)三維圖形的移動、旋轉(zhuǎn)、縮放等,還可以通過三維圖形的坐標(biāo)信息對其進行紋理貼圖、材質(zhì)設(shè)置等,以此來實現(xiàn)更好的3D描述,使設(shè)計的三維圖形更加立體。在OpenGL中,我們使用其提供的glMatrixMode()函數(shù),通過傳遞不同的設(shè)置參數(shù),可以分別對視圖模型矩陣、投影矩陣、紋理矩陣等進行操作,并且可以利用glPushMatrix()函數(shù)與glPopMatrix()這兩個函數(shù)將矩陣保存到堆棧中或從堆棧中讀取,這樣大大提高了設(shè)計與排版的靈活性。通過設(shè)置動態(tài)變量對矩陣進行變換,再利用雙緩存就可以實現(xiàn)三維圖形的動態(tài)效果。所以說坐標(biāo)變換是所有后續(xù)關(guān)鍵技術(shù)的基礎(chǔ),是重中之重。 光照三維圖形建立之后,要令其產(chǎn)生3D效果還需要一系列的透視和藝術(shù)技巧,而光照是不可或缺的。如果沒有光照,所制作的三維圖形就沒有立體感,和二維圖形基本沒有區(qū)別。沒有光照,我們甚至都看不到圖形。當(dāng)現(xiàn)實中的物體被光照射時,該物體吸收光中的部分光線,剩下的光線則被反射。這些反射的光進入了人眼,從而使得人們能夠感知到物體的各種特性,如形狀、顏色或其他細節(jié)等。我們稱從光源射向物體的光為入射光,從物體表面反射回的光為反射光。OpenGL用一種近似的光照模型模擬現(xiàn)實世界的光照效果。在模型中,光源當(dāng)物體吸收和反射光時起作用。不同的材質(zhì)有不同的屬性,有的會自己發(fā)光,有的在各個方向上發(fā)散部分入射光,有的則像鏡子一樣在特定的方向高強度地反射入射光。在OpenGL的簡化光照模型中,設(shè)定光照由4個成分組成,分別為:(1)輻射光:輻射光是指發(fā)光體直接發(fā)出的光,所以輻射光不受其他光源影響;(2)環(huán)境光:環(huán)境光是一種被環(huán)境多次反射從而失去方向的光,所以環(huán)境光看起來就像來自于所有的方向。當(dāng)它照射在一個物體的表面時,它將在所有的方向上等量反射;(3)漫反射光:漫反射光來自一個特定的方向,它指的是那些被照射物體表面的反射光中均勻地向各個方向反射出的光;(4)鏡面反射光:鏡面反射光具有很強的方向性,當(dāng)它照射物體表面時,以等于入射角的反射角進行反射,并且當(dāng)視點與物體上某點的夾角與光線的入射角相近時,我們將會看到該表面形成了一個高亮區(qū)域,我們稱其為亮點。在實際的應(yīng)用中,4部分獨立計算并最后回到一起。在OpenGL中,由函數(shù)glLight(GLenum light, GLenum pname, TYPE param)來定義一個光源。表31給出了pname的值及其功能和缺省值。表31 pname的值及其功能和缺省值pname功能缺省值GL_AMBIENT環(huán)境光分量的強度(,)GL_DIFFUSE漫反射光分量的強度(,)GL_SPECULAR鏡面反射光分量的強度(,)GL_POSITION光源位置(,)GL_SPOT_DIRECTION光源聚光方向(,)GL_SPOT_EXPONENT光源的聚光指數(shù)GL_SPOT_CUTOFF聚光的截至角GL_CONSTANT_ATTENUATION光的常數(shù)衰減因子GL_LINEAR_STTENUATION光的線性衰減因子GL_QUADRATIC_ATTENUATION光的二次衰減因子在本設(shè)計中,對于光照做如下設(shè)置:GLfloat LightAmbient[]= { , , , }。GLfloat LightDiffuse[]= { , , , }。GLfloat LightSpecular[]= { , , , }。GLfloat LightPosition[]= { , , , }。glLightfv(GL_LIGHT1, GL_AMBIENT, LightAmbient)。 //設(shè)置光源的環(huán)境光glLightfv(GL_LIGHT1, GL_DIFFUSE, LightDiffuse)。 //設(shè)置光源的漫反射光glLightfv(GL_LIGHT1, GL_SPECULAR,LightSpecular)。 //設(shè)置光源的鏡面反射光glLightfv(GL_LIGHT1, GL_POSITION,LightPosition)。 //設(shè)置光源的位置glEnable(GL_LIGHT1)。 //開啟光源 紋理映射 Mip貼圖紋理映射是增強三維圖形真實感的重要技術(shù)之一。我們通過運用紋理映射,可以使制作真實感的二維或三維圖形變得更加容易、簡單,省去大量花在設(shè)計圖形表面紋理上的時間。好比我們畫了一個長方體,只有在六個面上貼上石頭紋理,它看上去就跟現(xiàn)實中切割好的石頭一樣了。紋理映射在本課題的作用主要在于模擬地形、天空及太陽。OpenGL中提供了一系列相關(guān)的紋理操作函數(shù),我們通過調(diào)用它們來實現(xiàn)對紋理的操作,最終實現(xiàn)其映射。紋理映射只能工作在RGB模式下,進行紋理映射的基本步驟如下:(1) 定義紋理(2) 控制紋理(3) 映射方式(4) 紋理坐標(biāo)為了提高整個場景的渲染性能,并改善場景的顯示質(zhì)量,在本課題的設(shè)計中采用了Mip貼圖的多重紋理技術(shù),所以說Mip貼圖是一種功能強大的紋理技巧。Mip貼圖紋理由一系列紋理圖像組成,其中每個圖像的大小都是前面圖像大小的一半,圖32給出了這樣的例子。圖32 一系列mip貼圖圖像在OpenGL中通過gluBuild2DMipmaps(GLenum target, GLint internalForrnat, Glint width, GLenum height, GLenum type, Glint level, Glint base, Glint max, const void *data)函數(shù)來建立Mip貼圖,其中,target指定目標(biāo)紋理,這里必須是GL_TEXTURE_2D,internalFornat指定顏色成分,width指定圖像的寬度,height指定圖像的高度,type指定告訴OpenGL圖像數(shù)據(jù)由什么類型的顏色數(shù)據(jù)組成,level指定data參數(shù)所指定的mip層,base指定mip的最小層,max指定mip的最大層,data指定用于生成mip
點擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1