




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、2,第10章 文字處理,本章將討論如何使用Direct3D生成和輸出文本。在Direct3D中,文本的輸出主要有三種方法,對于每一種方法都可以在本書相關的網(wǎng)站上找到對應的實例。 主要目標: 如何用ID3DXFont接口輸出文字。 如何用CD3DFont類來進行文字輸出。 怎樣計算并輸出幀速。 如何使用D3DXCreateText方法創(chuàng)建3D文字效果。,3,10.1 ID3DXFont、ID3DXFont接口,D3DX庫是使用ID3DXFont接口來在Direct3D應用程序中輸出文字的。這個接口通過GDI(圖形設備接口)來輸出文字,因此用這個接口完成任務的時候會有些效率上的損失。 但是,運用了
2、GDI,ID3DXFont可以處理復雜的文字和文字格式。,4,10.1.1 創(chuàng)建一個ID3DXFont接口,在DirectX中通過D3DXCreateFontIndirect方法來創(chuàng)建一個ID3DXFont接口: HRESULTWINAPID3DXCreateFontIndirect( LPDIRECT3DDEVICE9pDevice,/ 當前所使用的設備 CONST D3DXFONT_DESC*pDesc, / 字體描述結構 LPD3DXFONT*ppFont/ 返回的字體接口 ); 下面的代碼展示了這個方法的具體應用: 參見教材P150,5,10.1.2 文字輸出,當獲得了一個ID3DXF
3、ont接口以后,可以方便地利用ID3DXFont接口的DrawText方法來輸出文字: INT ID3DXFont:DrawText( LPCSTR pString, INT Count, LPRECT pRect, DWORD Format, D3DCOLOR Color );,6,10.1.2 文字輸出,范例代碼如下: Font-DrawText( Hello World, / 待輸出字符串 -1, / NULL結尾(Null terminating)的字符串 ,7,10.1.3 計算幀速(FPS),在程序開始的時候,聲明3個全局變量: DWORD FrameCnt;/ 已經(jīng)渲染的幀數(shù) f
4、loat TimeElapsed; / 已經(jīng)經(jīng)過的時間 float FPS; / FPS 程序中每秒鐘計算一次幀速,即每秒鐘內(nèi)的平均幀數(shù),從而保證幀速在一秒的時間間隔內(nèi)得到的幀速不會改變,以便擁有充足的時間在它改變之前讀出數(shù)據(jù)。,8,10.1.3 計算幀速(FPS),每一幀渲染結束后都會將幀數(shù)計數(shù)器FrameCnt加1,然后將時間計數(shù)器TimeElapsed加上渲染的每兩幀之間經(jīng)過的時間差timeDelta: FrameCnt+; TimeElapsed += timeDelta; 每一秒時間間隔后,通過下面的公式計算幀速: FPS = (float)FrameCnt / TimeElapse
5、d; 每一次計算完畢幀速后,需要重設FrameCnt和TimeElapsed變量的值來開始下一秒鐘幀速的計算。,9,10.1.3 計算幀速(FPS),下面是計算幀速的完整代碼: void CalcFPS(float timeDelta) FrameCnt+; TimeElapsed += timeDelta; if(TimeElapsed = 1.0f) FPS = (float)FrameCnt / TimeElapsed; TimeElapsed = 0.0f; FrameCnt = 0; ,10,10.2 CD3DFont、CD3DFont類,由于CD3DFont使用了Direct3D代
6、替GDI來渲染文本,因此它比ID3DXFont更快。但是,CD3DFont不能像ID3DXFont那樣支持復雜的文字和格式。 如果你想要提高程序的效率并且簡單的文字格式就能滿足需求,那么CD3DFont類可以方便地解決問題。 使用CD3DFont類之前需要把如下的文件加入到你的工程中去:d3dfont.h、d3dfont.cpp、d3dutil.h、d3dutil.cpp、dxutil.h和dxutil.cpp,這些文件可以在DirectX SDK根目錄下的SamplesC+Common文件夾下面的Include和Src文件夾內(nèi)找到。,11,10.2.1 構造CD3DFont對象,下面是CD3
7、DFont類的構造函數(shù): CD3DFont(const TCHAR *strFontName, DWORD dwHeight, DWORD dwFlags=0L); 實例化一個CD3DFont對象后,必須調(diào)用下面的方法將CD3DFont對象創(chuàng)建到Direct3D設備中去,或者從Direct3D設備中卸載(之所以這樣做,是為了滿足D3D框架程序的需要,因為當Direct3D應用程序中出現(xiàn)設備丟失時,需要重建與設備相關的對象,包括CD3DFont對象,設備丟失的情況在Windows 2000中打開任務管理器時可能發(fā)生): Font = new CD3DFont(Times New Roman, 1
8、6, 0); / 創(chuàng)建CD3DFont對象 Font-InitDeviceObjects(Device); Font-RestoreDeviceObjects();,12,10.2.2 DrawText輸出文字,函數(shù)DrawText用于將文字輸出到屏幕: HRESULT CD3DFont:DrawText(FLOAT x, FLOAT y, DWORD dwColor, const TCHAR *strText, DWORD dwFlags=0L); 例如: Font-DrawText(20, 20, 0 xff000000, Hello, World);,13,10.2.3 銷毀CD3DFo
9、nt對象,在從堆中刪除CD3DFont對象之前,必須首先調(diào)用CD3DFont類的一些方法,以便安全地釋放CD3DFont對象,如下所示: Font-InvalidateDeviceObjects(); Font-DeleteDeviceObjects(); delete Font;,14,10.3 三維網(wǎng)格(3D Mesh)在文字顯示中的應用,10.3.1 D3DXCreateText方法 D3DXCreateText方法被用來創(chuàng)建文本的三維網(wǎng)格圖像。 圖10.1顯示了本章例子FontMesh3D渲染的三維網(wǎng)格圖像。,15,10.3 三維網(wǎng)格(3D Mesh)在文字顯示中的應用,函數(shù)的原型如下
10、: HRESULT D3DXCreateText( LPDIRECT3DDEVICE9 pDevice,/ Mesh關聯(lián)的Device HDC hDC,/將要用來創(chuàng)建mesh的文本的設備上下文句柄 LPCTSTR pText,/指向需要顯示的以NULL結尾的字符串的指針 FLOAT Deviation, FLOAT Extrusion,/按照負Z方向指定的Font的深度 LPD3DXMESH *ppMesh,/返回被創(chuàng)建的Mesh LPD3DXBUFFER *ppAdjacency, LPGLYPHMETRICSFLOAT pGlyphMetrics );,16,10.3 三維網(wǎng)格(3D Mesh)在文字顯示中的應用,下面的實例代碼展示了如何用這個函數(shù)來創(chuàng)建一個三維網(wǎng)格: 參見教材P155 然后可以用Mesh的DrawSubset方法渲染這個3D文字網(wǎng)格信息: Text-DrawSubset(0);,17,10.4 小 結,如果你需要復雜的字體格式
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 統(tǒng)計學公式應用技巧試題及答案
- 食品質(zhì)檢員日常工作技能要求試題及答案
- 商業(yè)分析師選拔試題及答案
- 2025個體餐館雇傭合同范本
- 2025《管道鋪設合同》
- 2025企業(yè)員工宿舍租賃合同
- 殘疾人服務知識與技巧
- 2025企業(yè)員工競業(yè)禁止合同
- 2025 與護工簽訂的合同范本
- 體育產(chǎn)業(yè)未來趨勢與市場潛力深度解析
- 華北電力大學丁肇豪:多主體數(shù)據(jù)中心算力-電力跨域協(xié)同優(yōu)化
- 科技公司費用報銷制度及流程比較
- 2024年紹興諸暨市水務集團有限公司招聘考試真題
- 2025年新版供電營業(yè)規(guī)則考試題庫
- 2025年長白山職業(yè)技術學院單招職業(yè)技能測試題庫帶答案
- 2025年公務員遴選考試公共基礎知識必考題庫170題及答案(四)
- 2024年內(nèi)蒙古呼和浩特市中考物理試題【含答案、解析】
- 辦公用品及設備采購產(chǎn)品手冊
- DL-T-1878-2018燃煤電廠儲煤場盤點導則
- 《扣件式鋼管腳手架安全技術規(guī)范》JGJ130-2023
- 超星爾雅學習通《時間管理》章節(jié)測試含答案
評論
0/150
提交評論