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

正文內(nèi)容

基于opengl的虛擬運動場漫游畢業(yè)設(shè)計word格式-資料下載頁

2024-11-29 04:19本頁面

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

  

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