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

正文內(nèi)容

基于opengl的虛擬運(yùn)動(dòng)場(chǎng)漫游畢業(yè)設(shè)計(jì)word格式-資料下載頁(yè)

2024-11-29 04:19本頁(yè)面

【導(dǎo)讀】機(jī)動(dòng)畫(huà)和虛擬現(xiàn)實(shí)成為近幾年在計(jì)算機(jī)圖形學(xué)領(lǐng)域內(nèi)三大活躍的發(fā)展方向。因此,基于OpenGL進(jìn)行三維場(chǎng)景的顯示和交互,成為當(dāng)前可視化仿真的熱點(diǎn)課。系統(tǒng)基于OpenGL三維圖形庫(kù),利用3DSMax建立模型,使用VC++開(kāi)發(fā)語(yǔ)言實(shí)?,F(xiàn)運(yùn)動(dòng)場(chǎng)的虛擬漫游。系統(tǒng)通過(guò)讀取3DS文件重構(gòu)場(chǎng)景模型,使用鍵盤(pán)和鼠標(biāo)實(shí)現(xiàn)場(chǎng)。景任意方向的瀏覽,同時(shí)可實(shí)現(xiàn)縮小、放大、旋轉(zhuǎn)等基本功能。此外,通過(guò)加入碰撞檢。測(cè)技術(shù),增強(qiáng)了系統(tǒng)的真實(shí)感和用戶(hù)的沉浸感。系統(tǒng)采用面向?qū)ο罄碚?,設(shè)計(jì)簡(jiǎn)單方。便,開(kāi)發(fā)成本低,場(chǎng)景具有良好的真實(shí)感和實(shí)時(shí)性,能滿(mǎn)足用戶(hù)基本需求。虛擬現(xiàn)實(shí)技術(shù)是利用電腦模擬產(chǎn)生一個(gè)三維空間的虛擬世界,為用戶(hù)提供關(guān)于視

  

【正文】 : void glMaterialfv(GLenum face,GLenum pname,const GLfloat *p)。 函數(shù)中第一個(gè)參數(shù) face 為狀態(tài)變量,可以 定義為 GL_FRONT, GL_BACK,GL_FRONT_AND_BACK。 第二個(gè)參數(shù) pname 為狀態(tài)變量。 GL_AMBIENT:用第 3 個(gè)參數(shù)數(shù)組 p 設(shè)置材質(zhì)反射環(huán)境光的色彩。缺省值為( , , )。 GL_DIFFUSE:用第 3 個(gè)參數(shù)數(shù)組 p 設(shè)置材質(zhì)反射漫反射光的色彩。缺省值為( , , , )。 GL_AMBIENT_AND_DIFFUSE: 用第 3 個(gè)參數(shù)數(shù)組 p 設(shè)置材質(zhì)反射環(huán)境光和漫反射光的色彩。 GL_SPECULAR:用第 3 個(gè)參數(shù)數(shù)組 p 設(shè)置 材質(zhì)反射 鏡面反射光的色彩。缺省值為( , , , )。 c)材質(zhì)改換 在 OpenGL中提供了兩種方式來(lái)改變場(chǎng)景中的材質(zhì)。一種方法是利用 glMaterial*()來(lái)改變材質(zhì),調(diào)用此函數(shù)時(shí)需要同時(shí)保存當(dāng)前矩陣,即調(diào)用 glPushMatrix()和glPopMatrix()。由于調(diào)用函數(shù) glMaterial*()本身的開(kāi)銷(xiāo)比較大,因此使用此函數(shù)來(lái)改變材質(zhì)時(shí)需要考慮其對(duì)性能的影響。另一種方法是使用函數(shù) glColorMaterial(),調(diào)用此函數(shù)使材質(zhì)的特性色 和當(dāng)前顏色一致。在使用 glColorMaterial()函數(shù)時(shí),還需要調(diào)用glEnble(GL_COLOR_MATERIAL)使之有效,當(dāng)不再使用 glColorMaterial()功能時(shí),調(diào)用 glDisable(GL_COLOR_MATERIAL)使之無(wú)效,以減少系統(tǒng)的消耗。 紋理映射 OpenGL 在改變屏幕像素的基礎(chǔ)上 支持物體表面的紋理貼圖。紋理貼圖分為兩種:一種作用在物體的顏色上,通常稱(chēng)為顏色紋理;另一種作用在物體表面的法線(xiàn)上,通常稱(chēng)為法線(xiàn)紋理。兩種紋理只是作用原理不同,但最終都將改變物體 的顯示顏色。 a)啟用與關(guān)閉紋理 同光照和材質(zhì)的啟用和關(guān)閉一樣, OpenGL 采用 glEnable()與 glDisable()兩個(gè)函數(shù)定義后續(xù)的狀態(tài)變量,完成紋理貼圖模式的啟用和關(guān)閉: glEnble(GL_TEXTURE_2D)。 //啟用紋理處理 glDisable(GL_TEXTURE_2D)。 //關(guān)閉紋理處理 b)定義紋理 紋理可以是一維的,也可以是二維的,二維紋理映射的函數(shù)定義如下: void glTexImage2D(GLenum target, GLint level, Glint ponents, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GL void *pixels) 參數(shù) target 對(duì)應(yīng) GL_TEXTURE_2D,表示定義二維紋理。 參數(shù) level 表示控制紋理分辨率的級(jí)別,若只有一種分辨率,則 level=0。 參數(shù) ponents 是一個(gè)從 1 到 4 的整數(shù),表示紋理的分量選擇。 1 表示選擇 R 分量, 2 表示選擇 R 和 Alpha 兩個(gè)分量, 3 表示選擇 R、 G、 B 三個(gè)分 量, 4 表示選擇 R、 G、 B 和 Alpha 四個(gè)分量。 參數(shù) width 和 height 給出了紋理的長(zhǎng)度和寬度。 參數(shù) border 定義了紋理的邊界寬度,通常為 0。 width 和 height 必須是一個(gè)偶數(shù)加上兩倍的 border。紋理映射的最大尺寸依賴(lài)于 OpenGL,但它必須至少使用 64*64。若 width 和 height 均設(shè)置為 0,則紋理映射有效地關(guān)閉。 參數(shù) format 描述了紋理映射的格式,可以是 GL_COLOR_INDEX、 GL_RGB、GL_RGBA 等。 參數(shù) type 描 述 了 紋 理 映 射 的 數(shù) 據(jù) 類(lèi) 型 , 可 以 是 GL_BYTE 、GL_UNSIGNED_BYTE、 GL_INT、 GL_GLOAT、 GL_BITMAP 等。 指針 pixels 存儲(chǔ)紋理圖像的數(shù)據(jù)地址,包含紋理圖像本身及其邊界的數(shù)據(jù)。 c)控制紋理 OpenGL 的巍峨美麗控制即定義紋理如何包裹物體的表面,因?yàn)榧y理的外觀不會(huì)與物體的萬(wàn)幸總保持一致??刂萍y理的函數(shù)定義如下: void glTexParameteri(GLenum target, GLenum pname, GLfloat p )。 參數(shù) target 與紋理的定義一樣。參數(shù) pname 和 p 的對(duì)應(yīng)形式如表 。 表 pname 與 p 的對(duì)應(yīng)表 參數(shù) pname 取值 參數(shù) p 取值 GL_TEXTURE_WRAP_S GL_TEXTURE_WRAP_T GL_TEXTURE_MAG_FILTER GL_TEXTURE_MIN_FILTER GL_CLMAP 或 GLREPEAT GL_CLMAP 或 GLREPEAT GL_NEAREST 或 GL_LINEAR GL_NEAREST GL_LINEAR GL_NEAREST_MIPMAP_NEAREST GL_NEAREST_MIPMAP_LINEAR GL_LINEAR_MIPMAP_NEAREST GL_LINEAR_MIPMAP_LINEAR 表中, GL_TEXTURE_WRAP_S 設(shè)置紋理在 S 方 向 上 的 控 制 ;GL_TEXTURE_WRAP_T 設(shè)置紋理在 T 方向上的控制; GL_TEXTURE_MAG_FILTER設(shè)置一個(gè)像素紋理點(diǎn)對(duì)應(yīng)多個(gè)物體頂點(diǎn)的紋理控制; GL_TEXTURE_MIN_FILTER 設(shè)置多個(gè)像素紋理點(diǎn)對(duì)應(yīng)一個(gè)物體頂點(diǎn)的紋理控制。 3DS 文件導(dǎo)入 系統(tǒng)采用場(chǎng)景建模及模型導(dǎo)入技術(shù)實(shí)現(xiàn)虛擬漫游,這種技術(shù)在開(kāi)發(fā)可視化系統(tǒng)中是十分便捷高效,在一定程度上縮短了復(fù)雜 物體建模的時(shí)間。 3DS 格式文件的導(dǎo)入大致可以分為兩大部分,首先將 3DS 格式文件中的內(nèi)容讀入 OpenGL 環(huán)境中,然后將讀入的模型數(shù)據(jù)重新整理,并生成處理對(duì)象列表,在 OpenGL 中重新繪制,并且顯示出來(lái)。 3DS 文件導(dǎo)入數(shù)據(jù)結(jié)構(gòu) 在 OpenGL 環(huán)境中導(dǎo)入外部 3DS 格式文件 ,首先 對(duì)程序中涉及的數(shù)據(jù)結(jié)構(gòu)進(jìn)行設(shè)計(jì), 定義各種結(jié)構(gòu)體和類(lèi), 如頂點(diǎn)坐標(biāo)、材質(zhì)信息、模型信息 、對(duì)象信息等 ,具體定義內(nèi)容見(jiàn)頭文件 。 除了數(shù)據(jù)類(lèi)型,還要定義一個(gè) 3DS 格式文件的讀入類(lèi) CLoad3DS,該類(lèi)的主要作用是將 3DS 格式文件中的各項(xiàng)內(nèi)容讀入上述各個(gè)結(jié)構(gòu)體和類(lèi)的對(duì)象中。程序中涉及3DS 文件讀入的函數(shù)很多,主要用于讀取不同的內(nèi)容,表 列出讀取 3DS 格式文件的主要函數(shù)及其注釋。 表 讀取 3DS 模型文件主要函數(shù) 函數(shù)名稱(chēng) 注釋 Import3DS(t3DModel *pModel, char *strFileName) CreateTexture(UINT textureArray[], LPSTR strFileName, int textureID) GetString(char *pChunk) ReadChunk(tChunk *pChunk) ReadNextChunk(t3DModel *pModel, tChunk *pPreChunk) ReadNextObjChunk(t3DModel *pModel, t3DObject *pObject, tChunk *pPreChunk) ReadNextMatChunk(t3DModel *pModel, tChunk *pPreChunk) ReadColor(tMatInfo *pMaterial, tChunk *pChunk) ReadVertices(t3DObject *pObject, tChunk *pPreChunk) ReadVertexIndices(t3DObject *pObject, tChunk *pPreChunk) ReadUVCoordinates(t3DObject *pObject, tChunk *pPreChunk) ReadObjMat(t3DModel *pModel, t3DObject *pObject, tChunk *pPreChunk) 3DS 文件導(dǎo)入模型結(jié)構(gòu) 創(chuàng)建紋理 讀取 字符串 讀取塊的 ID 和字節(jié)長(zhǎng)度 讀取下一塊結(jié)構(gòu) 讀取下一個(gè)對(duì)象塊 讀取下一個(gè)材質(zhì)塊 讀取對(duì)象顏色的 RGB 值 讀取對(duì)象的頂點(diǎn) 讀取對(duì)象頂點(diǎn)索引 讀取對(duì)象的 UV紋理坐標(biāo) 讀取對(duì)象的材質(zhì) 3DS 文件的 導(dǎo)入 OpenGL 環(huán)境設(shè)置完成之后,開(kāi)始 導(dǎo) 入 3DS 格式文件,在 OpenGL 中重新構(gòu)建并顯示運(yùn)動(dòng)場(chǎng)模型。 圖 43 3DS 文件導(dǎo)入流程圖 在讀入 3DS 格式文件時(shí),首先要判斷該文件是不是 3DS 格式,若不是則直接返回,不進(jìn)行任何操作,若是 3DS 文件則進(jìn)入下一步操作, 即讀取文件中的模型數(shù)據(jù)。在讀取數(shù)據(jù)時(shí),可以根據(jù)實(shí)際需要選擇性地讀入需要的塊,忽略一些未知的塊。在讀入塊結(jié)構(gòu)數(shù)據(jù)時(shí),可以用遞歸的方法實(shí)現(xiàn),返回上一級(jí)的條件是當(dāng)前已經(jīng)讀入的塊的字節(jié)數(shù)是否等于塊的長(zhǎng)度;從父塊轉(zhuǎn)向讀入其子塊,用 switch 語(yǔ)句實(shí)現(xiàn),通過(guò)子塊的ID 號(hào)來(lái)判斷進(jìn)入哪個(gè)分支。程序流程圖如圖 43 所示。 3DS 文件讀入后,將模型數(shù)據(jù)重新整理生成顯示列表,在 OpenGL 環(huán)境中重新繪制的實(shí)現(xiàn)函數(shù)為 glBegin(g_ViewMode)。由于 OpenGL 中的所有幾何圖元都是用頂點(diǎn)描述的,因此此函數(shù)的實(shí)現(xiàn)過(guò)程就是對(duì) 頂點(diǎn)法向量的計(jì)算。 開(kāi)始 結(jié)束 OpenGL 環(huán)境設(shè)置 圖形顯示 從 3DS 文件讀取數(shù)據(jù) 整理讀取的數(shù)據(jù) 生成顯示列表 OpenGL 圖形 控制功能 判斷是否為 3DS 文件? 報(bào)銷(xiāo) N Y 漫游控制 作為一個(gè)虛擬場(chǎng)景的漫游系統(tǒng),最主要的是實(shí)現(xiàn)漫游動(dòng)作的控制。對(duì)于普通配置的微機(jī),系統(tǒng)主要響應(yīng)的交互工具主要是鍵盤(pán)和鼠標(biāo)。實(shí)現(xiàn)漫游時(shí),觀察者可以通過(guò)鼠標(biāo)或鍵盤(pán)來(lái)控制視點(diǎn)的位置、方向和參考點(diǎn)。當(dāng)視點(diǎn)的位置、方向和參考點(diǎn)發(fā)生改變時(shí),場(chǎng)景中的物體相對(duì)于觀察者的方位也發(fā)生了改變,從而產(chǎn)生了 ―動(dòng)感 ‖。系統(tǒng)中,視點(diǎn)即為人的眼睛,其功能與現(xiàn)實(shí)世界的照相機(jī)類(lèi)似,視線(xiàn)方向可由參考點(diǎn)位置確定。漫游過(guò)程的實(shí)質(zhì)就是通過(guò)不斷移動(dòng)視點(diǎn)或改變視線(xiàn)方向而產(chǎn)生三維動(dòng)畫(huà)的過(guò)程。 對(duì)場(chǎng)景顯示的漫游控制在 OpenGL 中可以利用 gluLookat()函數(shù),通過(guò)設(shè)置相應(yīng)的參數(shù)來(lái)達(dá)到漫游的效果。值得一提的是, OpenGL 的坐標(biāo)系和 3DS Max 的坐標(biāo)系是不同的, 3DS Max 中的模型的 Z 軸是指向上的,而 OpenGL 中模型的 Z 軸是垂直屏幕指向用戶(hù)的,因此需要將頂點(diǎn)的坐標(biāo)的 Y 軸和 Z 軸翻轉(zhuǎn)過(guò)來(lái)。 鍵盤(pán)操作 系統(tǒng)中由鍵盤(pán)執(zhí)行的漫游命令包括場(chǎng)景左右旋轉(zhuǎn)、場(chǎng)景縮放、視點(diǎn)改變等。響應(yīng)左、右旋轉(zhuǎn)命令時(shí),視點(diǎn)保持不變,分別繞 Z 軸沿逆、順時(shí)針旋轉(zhuǎn)一定角度;響應(yīng)場(chǎng)景縮放命令時(shí),視點(diǎn)分別沿視線(xiàn)方向移動(dòng)一定距離。按照這種響應(yīng)方法, 通過(guò)空間向量分解運(yùn)算,即可計(jì)算出新的視點(diǎn)和參考點(diǎn)坐標(biāo)。例如當(dāng)響應(yīng)場(chǎng)景旋轉(zhuǎn)命令時(shí)視點(diǎn)與參考點(diǎn)坐標(biāo)的計(jì)算公式為: +=Ratotespeed。 //順時(shí)針旋轉(zhuǎn) =Ratotespeed。 //逆時(shí)針旋轉(zhuǎn) =float (* )。 //旋轉(zhuǎn)角度 式中, 表示場(chǎng)景中視點(diǎn)的角度位置; 表示旋轉(zhuǎn)的角度; Ratotespeed 表示旋轉(zhuǎn)的速度。 鼠標(biāo)操作 為了方便用戶(hù)使用,系統(tǒng)還提供了鼠標(biāo)的控制,通過(guò)單擊鼠標(biāo)左鍵和右鍵可以進(jìn)行場(chǎng)景的推進(jìn)和后退。關(guān)鍵代碼如下: void CS3DManageView::OnLButtonDown(UINT nFlags, CPoint point) { int xPos = 。 //光標(biāo)水平位置 int yPos = 。 //光標(biāo)垂直位置 +=(float)*sin()*flyspeed。 +=(float)*cos()*flyspeed。 CView::OnLButtonDown(nFlags, point)。 } void CS3DManageView::OnRButtonDown(UINT nFlags, CPoint point) { =(float)*sin()*flyspeed。 =(float)*cos()*flyspeed。 CView::OnRButtonDown(nFlags, point)。 } 自動(dòng)播放 系統(tǒng)除了利用鍵盤(pán)和鼠標(biāo)實(shí)現(xiàn)運(yùn) 動(dòng)場(chǎng)的交互式漫游控制,還設(shè)計(jì)了場(chǎng)景的自動(dòng)播放功能。通過(guò)自動(dòng)播放功能,初次使用系統(tǒng)的用戶(hù)可以方便快捷地對(duì)學(xué)校運(yùn)動(dòng)場(chǎng)的各個(gè)場(chǎng)地及各項(xiàng)設(shè)施有個(gè)概要的了解。實(shí)現(xiàn)自動(dòng)播放功能的關(guān)鍵代碼如下: if(IsAutoRotateScene) { +=1。 //場(chǎng)景方位角變化 +=1。
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1