為了在乙個基本層次上顯示文字,要用到兩個不同的物件,即lpd3dxfont和rect這兩個結構。lpd3dxfont用於建立和顯示文字,而rect用於確定要顯示的文字位置。為了建立lpd3dxfont物件,就要用到乙個名為d3dxcreatefont()的函式。該函式原型如程式清單5.1所示。其成員變數如下:
■ height:字型字元的高度
■ width:字型字元的寬度
■ weight:列印字型的權重(即:粗體)
■ miplevels:文字的mipmap級別
■ italic:字型是否為斜體
■ charset:用到的字符集
■ outputprecision:指定windows與期望字型大小的匹配方法
■ quality:指定windows將字型和真實字型的匹配方法
■ pitchandfamily:斜度和family索引
■ pfacename:要用的字型型別名稱(例如:times new roman)
■ ppfont:要填充的lpd3dxfont物件
hresult d3dxcreatefont(lpdirect3ddevice9 pdevice,
int height,
//字型字元的高度
uint width,
//字型字元的寬度
uint weight,
//列印字型的權重(即:粗體)
uint miplevels,
//文字的mipmap級別
bool italic,
//字型是否為斜體
dword charset,
//用到的字符集
dword outputprecision,
//指定windows與期望字型大小的匹配方法
dword quality,
//指定windows將字型和真實字型的匹配方法
dword pitchandfamily,
//斜度和family索引
lpctstr pfacename,
//要用的字型型別名稱
lpd3dxfont
*ppfont
//要填充的lpd3dxfont物件
);
在要建立真實的d3d字型物件時,簡單地呼叫d3dxcreatefont()函式即可。最後乙個引數在函式返回後儲存字型物件。同direct3d中的大多數物件一樣,讀者在使用完字型物件後,一定要確保釋放該物件以避免記憶體洩漏。
當使用d3dxcreatefont()函式建立字型時,大多數引數都用不到。height引數可被認為是字型的大小。width是字型附加的寬度,通常取值為0。基本上,weight是乙個控制字型是否加粗的引數。italic則控制字型是否為斜體。miplevels可以為文字字元建立mipmap級別,由於文字不像紋理影象那樣可以從螢幕更深入地顯示出來,所以該值不能設為1。charset為文字設定字符集,但它一般儲存預設值。outputprecision指定windows將期望字型與實際字型匹配的方法。同樣,該值設為預設值,但如果想要確保正在使用的是truetype字型,就要將該值設為out_tt_only_precis。quality控制文字特性,它會影響到raster(光柵)字型,而不會影響到truetype字型。pitchandfamily在directx文件中不好解釋,它控制文字使用的pitch和family索引,通常該值設為預設值,如default_pitch | ff_dontcare。pfacename是字型的真實名稱(例如,arial、times new roman)。最後乙個但也很重要的引數是ppfont,它是指正在建立的lpd3dxfont物件。
渲染文字物件就要用到lpd3dxfont物件的drawtext()函式。
int drawtext(lpd3dxsprite psprite,
//指向包含字串的lpd3dxsprite物件的指標
lpctstr pstring,
//螢幕上要顯示的文字
int count,
//字串字元的數目
lprect prect,
//乙個rect物件,定義了要顯示在螢幕上的第乙個字元的起始位置
dword format,
//指定字串的顯示方式
d3dcolor color
//螢幕上顯示的文字顏色
);
psprite:它是指向包含字串的lpd3dxsprite物件的指標,如果需要direct3d內部構建每個角色的小圖形,該值可以設為null。
■ pstring:螢幕上要顯示的文字。
■ count:字串字元的數目。
■ prect:它是乙個rect物件,定義了要顯示在螢幕上的第乙個字元的起始位置。
■ format:指定字串的顯示方式。表5.1給出了對該值完整的介紹,這些值可以通過xor一起使用。
■ color:螢幕上顯示的文字顏色。
表5.1 顯示文字時可以使用的format(格式)值值
含義
dt_bottom
將文字調整到定義文字的rect區域的底部
dt_calcrect
計算rect的高度和寬度。使用prect引數指定的區域根據需要來調整矩形
dt_center
將文字水平地調整到矩形的中間
dt_expandtabs
拓展字串中的tab字元。預設情況下tab是8個字元
dt_left
將文字調整到矩形的左側
dt_noclip
無剪下地繪製文字,這樣渲染速度更快
dt_right
將文字調整到矩形的右側
dt_rtlreading
按照從右向左的順序渲染文字。通常在hebrew或arabic字型中使用該值
dt_singleline
只在一行上顯示文字。忽律所有的換行字元
dt_top
將文字顯示在矩形的頂部
dt_vcenter
將文字垂直地調整到矩形的中間。只使用單獨的一行
dt_wordbreak
單詞通過定義好的矩形時,將被換行
演示程式:
boolinitializeobjects()
如同讀者見到的d3dxcreatefont()函式一樣,可以將大多數引數設為預設值。唯一關心的幾個引數是文字名稱和字型高度。程式清單5.4中的最後4行**將字型設定到預設的位置。注意:獲取視窗的高度和寬度是為了可以在螢幕上的任何位置顯示文字。建立完字型之後,必須要能將它顯示出來,或是用完後將其銷毀。這可以使用renderscene()和shutdown()函式來實現。程式清單5.5提供了這兩個函式的**。
voidrenderscene()
void
shutdown()
renderscene()函式。這裡唯一的幾行新**出現在beginscene()和endscene()函式之間。設定想要渲染的每行文字y座標。為每行文字設定不同值,這樣可以避免將每行文字繪製到另一行文字上。因為要將文字設定在定義好的矩形框中間,所以就不要使用同一x座標值。如果要將文字向左或向右調整,可以簡單地將x座標(g_fontposition.left)設為想要顯示的位置。將initializeobjects()函式中的預設值設為0,則文字顯示在螢幕的最左邊。記住:如果是(0,0)的話,就顯示在螢幕的左上角。
26 D3D顯示文字
為了在乙個基本層次上顯示文字,要用到兩個不同的物件,即lpd3dxfont和rect這兩個結構。lpd3dxfont用於建立和顯示文字,而rect用於確定要顯示的文字位置。為了建立lpd3dxfont物件,就要用到乙個名為d3dxcreatefont 的函式。該函式原型如程式清單5.1所示。其成員變...
VC下實現3D文字顯示
計算機螢幕是平面二維的,我們之所以能欣賞到真如實物般的三維影象,是因為顯示在計算機螢幕上時色彩灰度的不同而使人眼產生視覺上的錯覺,而將二維的計算機螢幕感知為三維影象。基於色彩學的有關知識,三維物體邊緣的凸出部分一般顯高亮度色,而凹下去的部分由於受光線的遮擋而顯暗色。這一認識被廣泛應用於網頁或其他應用...
VC下實現3D文字顯示
計算機螢幕是平面二維的,我們之所以能欣賞到真如實物般的三維影象,是因為顯示在計算機螢幕上時色彩灰度的不同而使人眼產生視覺上的錯覺,而將二維的計算機螢幕感知為三維影象。基於色彩學的有關知識,三維物體邊緣的凸出部分一般顯高亮度色,而凹下去的部分由於受光線的遮擋而顯暗色。這一認識被廣泛應用於網頁或其他應用...