字体
ID3DXFont 接口
创建一个ID3DXFont接口对象
HRESULT D3DXCreateFontIndirect(
LPDIRECT3DDEVICE9 pDevice, //device to associanted with the font
CONST LOGFONT *pLogFont, //D3DXFONT_DESC structrure, describing //the font
LPD3DXFONT *ppFont //return the created font
);
对要创建的字体进行描述, 必须先填充D3DXFONT_DESC结构。
函数使用演示
ZeroMemory (&dfm sizeof(D3DFONT_DESC));
df.Height = 25; //in logical unite
df.Width = 12; //in logical units
df.Weight = 500; //boldness, range 0(light)-1000(bold)
df.MipLevels = D3DX_DEFAULT;
df.Italic = false;
df.CharSet = 0;
df. OutputPrecision = 0;
df.Quality = 0;
df.PitchAndFamily = 0;
strcpy (df.FaceName, “Times New Roman”); //font style
ID3DXFont *font = 0;
D3DXCreateFontIndirect(Device,&df, &font);
绘制文
一旦获取了ID3DXFont接口的指针, 只需调用方法ID3DXFONT::DrawText即可轻而易用举的完成文本的绘制。
INT ID3DXFont::DwawText(
LPCSTR pSprite,
INT Count,
LPRECT pRect,
DWDRD Format,
D3DCLOR Color
);
·pSprite 指定字符串所属的ID3DXSprite对象接口, 可设为默认值0或NULL,表示在当前窗口中绘制字符串。
·pString 指向将要绘制的字符串的指针。
· Count字符串的字符个数据。若该值为-1, 则认为参数pString指向一个以NULL结尾的字符串。 ID3DXFont::DrawTect方法将自动对字符个数进行统计。
· pRect 指定字符串在这Rect抒写的矩形区或中的格式化方法, 该是一系列可选标记的某一个或某种组合。
· Color文本颜色。
CD3DFont
创建CD3DFont 类
要想创建CD3DFont 类的实例,像普通C++对象那样进行实例化即可。
CD3DFont (const TCHAR *strFontName, DWORD dwHeight,
DWORD dwFlags = 0L)
·StrFontName 一个以NULL结尾的字符串, 它指定了字体的名称。
·dwHeiht 字体的高度。
·dwFlags 创建标记, 可选 。 该参数可高 为0或以下标记的组合:
D3DFONT_BOLD D3DFONT_ITALIC D3DFONT_ZENABLE.
当我们实例化一个CD3DFont类的对象后, 必须调用如下方法来对字体进行初始化:
Font -> InitDeViceObject (Device);
Font->RestoreDeviceObjects();
绘制文本
我们已经创建了一个CD3DFont对象并对其进行了初始化, 现在可以绘制一些文本。可用如下函数实现文本的绘制:
HRESULT CD3DFont::DrawText(FLOAT x, FLOAT y, DWORD dwColor,
Const TCHAR * strText, DWORD dwFlags = 0)
·x y 屏幕坐标第中文本绘制起点的x y坐标。
·dwColor 文本的颜色。
·strText 指向所要绘制文本的指针。
·dwFlags 绘制标记, 可选。 可设为0或标记的组合:D3DFONT_CENTERD
D3DFONT_TWOSIDED D3DFONT_FILTDRED
如:Font->DrawText(20, 20. 0xff000000, “Hello Woreld”);
清理
Font->DeleteDeviceObjects();
Delete Font;
D3DXCreateText函数
该函数用创建文本的3D网格。
D3DXCreateText函数的原型为:
HRESULT D3DXCreateText(
LPDIRECT3DDEVICE9 pDevice,
HDC hDC,
LPCTSTR pText,
FLOAT Deviation,
FLOAT Extrusion,
LPD3DXMESH *ppMesh,
LPD3DXBUFFER *ppAdjacency,
LPGLYPHMETRICSFLOAT pGlyphMetrics
);
说明:
·pDevice 指向与网格相关的设备。
·hDC 一个设备环境句柄, 它包含了我们将用来创建网格的字体的相关信息
·pText 确定所要用于生成文本的字符串的指针。
·Deviation TrurType字体轮廓是最大弦偏差(chordal deviation).该值必须为非负,弦偏差差等于原始字体的一个设计单位。
·Extrusion 沿z軕负方向度量的字体深度。
·ppMesh 返回所创建的网格。
·ppAdjacency 返回所创建的网格的邻接信息(adjacency info)如果不需要为NULL
pGlyphMetrics 指向LPGLYPHMETRICSFLOAT类型结构数组的指针,该结构包含了字形(glyph)的度量数据。可设为0 忽略。
《DirectX9.0 3D 游戏开发基础》笔记
江西理工大学 FangSHi