DirectX90 3D 字体

字体 

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结构。

函数使用演示

D3DXFONT_SESC df;

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 = new CD3DFont (“Times New Roman” , 16, 0);

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->InvalideateDeviceObjects();

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 2010-4-15 

原文地址:https://www.cnblogs.com/fangshenghui/p/1713844.html