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

正文內(nèi)容

基于opengl的屏幕對象拾取_本科畢業(yè)論文(文件)

2025-07-31 14:24 上一頁面

下一頁面
 

【正文】 的接口把具體應用程序特有的東西填入這個輪廓。 Borland 幾乎同時發(fā)布了面向 Turbo C 編譯器的 OWL,并且在一開始比 MFC 更具有市場占有率,但是在 Borland 發(fā)布了一個不向下兼容的應用程序框架之后,它喪失了很多市場份額;在 Borland從微軟獲得發(fā)布 MFC 的授權(quán)之后它的市 場份額進一步減少。微軟在 Windows Vista 和 Windows 7 發(fā)布之后在 MFC 中增加了對 新的 Windows API 支持。這些類或者封裝了 Win32 應用程序編程接口,或者封裝了應用程序的概念,或者封裝了 OLE 特 性,或者封裝了 ODBC和 DAO 數(shù)據(jù)訪問的功能,等等, 8 分述如下 : ( 1)對 Win32 應用程序編程接口的封裝 ; ( 2)對應用程序概念的封裝 ; ( 3)對 COM/OLE 特性的封裝 ; ( 4)對 ODBC 功能的封裝 。 CObject 實現(xiàn)了一些重要的特性,包括動態(tài)類信息、動態(tài)創(chuàng)建、對象序列化、 對程序調(diào)試的支持,等等。 針對每種不同的對象, MFC 都設計了一組類對這些對象進行封裝,每一組類都有一個基類,從基類派生出眾多更具體的類。例如, CWnd 封裝 Windows 窗口對象時,每一條 Windows 消息對應一個成員函數(shù),這些成員函數(shù)為派生類所繼承。 圖 2 應用程序的結(jié)構(gòu) 從 CWinApp、 CDocument、 CView、 CMDIFrameWnd、 CMDIChildWnd 類對應地派生出 CTApp、 CTDoc、CTView、 CMainFrame、 CChildFrame 五個類,這五個類的實例分別是應用程序?qū)ο?、文檔對象、視對象、主框架窗口對象和文檔邊框窗口對象。 ( 2)邊框窗口 (CMDIFrameWnd) 如果是 SDI 應用程序,從 CFrameWnd 類派生邊框窗口類,邊框窗口的客戶子窗口 (MDIClient)直接包含視窗口;如果是 MDI 應用程序,從 CMDIFrameWnd 類派生邊框窗口類,邊框窗口的客戶子窗口 (MDIClient)直接包含文檔邊框窗口。 ( 4)文檔 (CDocument) 文檔類從 CDocument 類派生,用來管理數(shù)據(jù),數(shù)據(jù)的變化、存取都是通過文檔實現(xiàn)的。 用圖的形式可直觀地表示所涉及的 MFC 類的繼承或者派生關系 ,如下: 圖 3 MFC 的層次 基于 OpenGL+MFC 的三維模擬的編程環(huán)境配置 用 MFC 調(diào)用 OpenGL 函數(shù)來進行三維模擬的編程環(huán)境配置: (一)創(chuàng)建 MFC 項目 (1) 創(chuàng)建項目文件:選擇 File/New 菜單選項,建立一個名為 MyTest 的單文檔 (SDI) 應用程序; (二)配置 OpenGL 開發(fā)環(huán)境 ( 1) 將 91. h, glu. h, glaux. h 和 glut. h 拷貝到 ???(即盤符 +路徑 )\ Microsoft Visual Studio\ VC98\ Include\ GL 目錄中; ( 2) 將 opengl32. 1ib, glu32. 1ib, glaux. 1ib 和 glut32. 1ib 拷貝到 ???(即盤符 +路徑 )\ Microsoft 10 Visual Studio\ Vc98\ Lib 目錄中; ( 3) 將 , , , , 文件拷貝到操作系統(tǒng)安裝目錄 C:\ WINDOWS\ system32 目錄下 ; ( 4)選擇 Project/Setting 菜單選項。 需要在函數(shù) CGLView:: PreCreateWindow 中增加對 Windows 窗口風格的設置,以防止在窗口重疊時把圖形繪制到子窗口和兄弟窗口。 b. 調(diào)用函數(shù) ChoosePixelFormat() ,將 填 寫 好的 像 素 格 式結(jié) 構(gòu) 傳 遞給 該 函 數(shù) ,函 數(shù)ChoosePixelFormat()返回一個整型的序號。 用 wglreatecontext()函數(shù)來創(chuàng)建 OpenGL 的一個渲染場境;用 wglMakeCurrent()函數(shù)使給定的渲染場境設置成為當前調(diào)用線程的渲染場境,而線程中隨后調(diào)用的 OpenGL 命令都將通過與該渲染場境相關聯(lián)的設備場境來實現(xiàn)窗口的場景繪制。 (四 )清理工作 CGLView:: OnDestroy()函數(shù) 該函數(shù)完成的功能是:在視圖窗口被釋放時,用于清除當前的渲染場境,并釋放設備場境。 算法的具體實現(xiàn)步驟如下 : (1)初始化 , 獲取鼠標點的屏幕坐標 ( x, y), 并將相機焦點坐標轉(zhuǎn)換為屏幕坐標 ; (2)相機焦點深度值 (z 值 )作為鼠標點的深度值 (z 值 ),并 將鼠標點坐標轉(zhuǎn)化為世界坐標 ( XW , YW ,ZW); (3)過相機位置點向點 ( XW, YW, ZW) 作一射線 m, 并分別求射線 m 和投影空間近截面和遠截面的交點 A, B, 得到線段 AB。 在上述算法中,判斷線段 AB 和實體包圍盒的相對位置及線段 AB 和實體的求交是算法實現(xiàn)的關鍵。 判斷線段與包圍盒相對位置的具體步驟如下: (1)判斷起點 A 是否在包圍盒內(nèi),如果在盒內(nèi),則線段 AB 和包圍盒相交,判斷結(jié)束;如果不在盒內(nèi),則記下該包圍盒離起點 A 最近的三個側(cè)面,這三個側(cè)面必 定共點且相互垂直; (2)過起點 A 向各側(cè)面做垂線,得到三個垂足,連接點 A 和各垂足,得到三個向量 a a a3(如 圖4 所示 ),并求 a a a3 和向量 AB 各相應分量的比值 ti=ai/AB(i=1, 2, 3)。)如果交點在盒上,則 AB 和包圍盒相交 ,否則, AB 和包圍盒相離。 (1)拾取對象為點 當拾取對象為點時 , 求交的實質(zhì)就是以 AB 為軸線 , 以一個很小的浮點數(shù) tolerance(tolerance一般小于 )為半徑做一個圓柱 , 在這個圓柱內(nèi)離視點最近的點就是所求的交點。當所有的點處理完畢 ,當前的最近點就是該實體和線段 AB 的交點。為此提出一種新的改進算法 , 其具體操作步驟如下 : ① 以拾取點為中心、兩倍拾取精度 (在本文中拾取精度一般為象素寬度的 2~ 5 倍 )為邊長 , 繪制一 個以背景色為填充色的正方形作為“測試窗口”。當發(fā)現(xiàn)象素點顏色有別于背景色時 ,終止讀點 ,標識拾取成功。這些輔助圖形對于系統(tǒng)使用者是不 可見的,因此在確定所選物體之后要將輔助圖形從幀緩存中清除掉才能進行第 2 次繪圖。 該方法的核心是把圖元的幾何信息、指針等相關信息作為它的顏色渲染到后臺的一張 Render Target 型表面上對應幀緩沖做一次特殊的“渲染”。具體實現(xiàn)時考慮到紋理有 pow of two 和 non— pow of two 之別,屏幕分辨率一般不為 pow of two,因此可以考慮采用渲染到表面 (RRS),用 Direct3D9 中的 CreateRenderTarget()創(chuàng)建一個 Render Target 型表面, CPU上的主要流程如下: 鼠標點擊拾取事件觸發(fā)下面流程: (1)建立一張新 的臨時紋 理; 15 (2)將當前設 備屏幕的內(nèi)容存入緩沖中,將設備的渲染對象設為該臨時紋理; (3)做好渲染前的準備,包括從 fx 文件中讀入 effect; (4)對于每個幾何對象在 GPU 通過 Shader 進行特殊渲染; (5)還原設備信息,設備的渲染對象指向幀緩沖; (6)獲取臨時紋理上拾取區(qū)域的像素; (7)將獲得的像素按定義的格式解碼。 Struct VSResult { Float4 pos:POSITION。 在單個幾何圖元中,不同頂點有不同的坐標,在 Vertex Shader 中,根據(jù)坐標信息進行頂點轉(zhuǎn)換,同時將坐標信息作為顏色值存入 VSResult 中。 16 =mul(worldpos,ViewProjection)。當退出選擇模式時, OpenGL 返回一個圖元 (premitives)清單,圖元可能被視見體 (viewing volume)分割。當名字清單被返回后, 可以用它來確定屏幕上的哪個圖元可能被用戶選中了。 ( 1)因它假設所有的圖形變換矩陣必須可逆,經(jīng)過一系列的逆運算可得到圖像空間某點的三維坐標,但實際上這些矩陣并非總是可逆; ( 2)對于復雜的選擇體,判斷物體是否在選擇體內(nèi)部的算法極其復雜。第 1次繪圖為虛擬繪圖,通過在OpenGL 幀緩存中繪制一些輔助圖形來幫助選取物體。同時,避免了在繪圖模式與選擇模式之間的切 換;( 2)靈活的拾取范圍,可以定義各種形態(tài)的框選,如圓形,方形;( 3)算法簡單,容易實現(xiàn),且容易遷移到 GPU 上,利用硬件加速拾取算法。為了 解決這個問題 , OpenGL 提供了一個選 擇 機制可惟自動告訴你哪個物體被繪制在窗口的提定區(qū)域里。當退出選擇時, OpenGL返回一個圖元 (premitives)清單,圖元可能被視見體 (viewing volume)分割。這樣,當名字清單被返回后,就可以用它來確定屏幕上的哪個圖元可能被用戶選中了。 進入選擇模式之前 用 glSelectBuffer()指定用于返回命中記錄的數(shù)組; 下面描述 glSelectBuffer()和 glRenderMode()。mode 參數(shù)可以是 GL_RENDER(默認)、 GL_SELECT 或 GL_FEEDBACK 之一。如果當前模式是 GL_SELECT 或 GL_FEEDBACK 之一,那么 glRenderMode()的返回值有意義。 定義用于選擇的視見體 通常它與原來用于繪制場景的視見體不同,也可以用 glPushMatrix()和 glPopMatrix()來保存 19 和 恢復當前的變換矩陣;在選擇模式下,被視見體裁剪的每個圖元引起一個選擇命中。 除圖元之外, glRasterPos()產(chǎn)生的有效坐標也可以引起選擇命中。每寫入一個命中記錄,指針相應更新。 用 glInitName()和 glPushName()初始化名字棧 名字棧是返回給你的選擇信息的基礎,要建立名字棧,首先用 glInitNames()初始化它,這將簡單地清空棧。 glPushName(1)。 glLoadName(2)。 drawJustOneMoreObject()。如果處理命中記錄時不想?yún)^(qū)分各個物體的話,可以讓多個物體共享一個名字。 將 name 壓入名字棧 壓入名字超過棧容量時將生成一個 GL_STACK_OVERFLOW 錯誤。彈出名字棧棧頂?shù)哪且粋€名字 20 從空棧中彈出名字引發(fā) GL_STACK_UNDERFLOW 錯誤。為避免這種情況,如果棧初始時是空的,那么在調(diào)用 glLoadName()之前至少調(diào)用一次 glPushName()以在名字棧中放上點東西。建立起選擇模式并使用特定的拾取矩陣,繪制在光標附近的物體引發(fā)選擇命中。 用例程 gluPickMatrix()將一個特殊的投影矩陣乘到當前矩陣上。拾取區(qū)域的中心是窗口坐標 (x,y)處,通常是光標位置。1e。(wx,wy,wz)amp。因為變換是任意的, 所以 可以讓拾取為 不同類型的領域工作-如,用于旋轉(zhuǎn)窗口的矩形區(qū)域。 展望 現(xiàn)今越來越多的 3D 網(wǎng)游游戲出爐,對電腦的配置要求也越來越高,對最基本的對 象拾取也越來越嚴格, 而拾取的關鍵是用什么拾取算法。 1998. [31]Heran D, Baker M P. 計算機圖形學 . 北京:清華大學出版社, 1998. [32]蔡士杰,等譯. Computer Graphics with OpenGL(ThirdEdition)[M]. 北京:電子工業(yè)出版社,20xx. [33]吳斌 .OpenGL 編程權(quán)威指南 [M]. 北京:中國電力出版社, 20xx. [34]彭群生,等.計算機真實感圖形的算法基礎 [M]. 北京:北京科學出版社, 20xx. 27 [35]江早. OpenGL 圖形編程 [M]. 科學出版社, 20xx. [36]喬林,費廣正等.程序設計 0peoGL[Ⅵ ]. 清華大學出版杜, 20xx. [37]曾建超,俞志和.虛擬現(xiàn)實的技術(shù)及其應用Ⅶ. 北京:清華大學出版社, 20xx. [38]圈石教英.虛擬現(xiàn)實基礎及實用算法嗍 . 北京:科學出版社, 20xx. [39]倪明田.計算機圖形學 [M]. 北京:北京大學出版社, 1999. [40]李自力.虛擬現(xiàn)實中基于圖形與圖像的混合建模技術(shù). 中國圖象圖形學報. 20xx. 1. 96100. [41]Wright R S, Sweet J M. OpenGL 超級寶典 . 北京:人民郵電 出版社, 20xx. [42]喬林,費廣正等. OpenGL 程序設計. 北京:清華大學出版社, 20xx。今后也將繼續(xù)考慮如何可以使重繪式拾取技 術(shù) 脫離GPU 也可以實現(xiàn)拾取,甚至實現(xiàn)更快、更簡單地拾取,讓程序員操作起來更快,更方便,讓游戲玩家玩游戲起來更流暢,拾取各種物品或人物更快。 21 圖 9 拾取流程圖 拾取 結(jié)果 截圖 本系統(tǒng)中,未啟用拾取狀態(tài)的物體渲染如圖 10 與圖 11 所示,系統(tǒng)中使用物體空間的旋轉(zhuǎn)矩陣變換各個物體,因此每個物體在其局部坐標系
點擊復制文檔內(nèi)容
研究報告相關推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1