电脑在哪里制作网站,网站建设新际,分销商城解决方案,正规小说录入打字兼职平台D3DX库提供接口ID3DXFont用于在Direct3D应用程序中绘制文本#xff0c;该接口内部使用GDI(图形设备接口)来绘制文本#xff0c;因此该接口在性能上略有损失#xff0c;由于使用GDI所以才能够处理一些复杂的字体和格式。可以用D3DXCreateFontIndirect函数来创建一个ID3DXFont…D3DX库提供接口ID3DXFont用于在Direct3D应用程序中绘制文本该接口内部使用GDI(图形设备接口)来绘制文本因此该接口在性能上略有损失由于使用GDI所以才能够处理一些复杂的字体和格式。可以用D3DXCreateFontIndirect函数来创建一个ID3DXFont的接口对象。
HRESULT D3DXCreateFontIndirect(LPDIRECT3DDEVICE9 pDevice,CONST D3DXFONT_DESC* pDesc,LPD3DXFONT* ppFont
);
一旦获取了ID3DXFont接口的指针只需要调用方法ID3DXFont::DrawText即可轻而易举地完成文本的绘制。
INT ID3DXFont::DrawText(LPD3DXSPRITE pSprite,LPCSTR pString,INT Count,LPRECT pRect,DWORD Format,D3DCOLOR Color
);Font-DrawText(NULL,Hello,World,-1,rect,DT_TOP | DT_LEFT,0xff000000);
pSprite指定字符串所属的ID3DXSprite对象接口可设为默认值0或NULL表示在当前窗口中绘制字符串pString指向将要绘制的字符串的指针Count字符串中的字符个数若该值为-1则认为参数pString指向一个以NULL结尾的字符串DrawText方法将自动对字符个数进行统计pRect指定字符串绘制的矩形区域的位置Format指定了字符串在pRect指定的矩形区域中的格式化方法该参数是一系列可选博阿基的某一个或某种组合Color文本颜色
CD3DFont的使用
CD3DFont类绘制文本时使用的是Direct3D而非GDI所以其绘制的速度比ID3DXFont要快很多但该类也有缺陷它不支持ID3DXFont所支持的那些复杂的字体和格式如果很在意速度而且简单字体能满足要求CD3DFont类是一个很好的选择。
CD3DFont(const TCHAR* strFontName, DWORD deHeight, DWORD dwFlags 0L)//实例化一个CD3DFont类的对象后必须调用如下方法来对字体进行初始化
Fontnew CD3DFont(Times New Roman,16,0);
Font-InitDeviceObject(Device);
Font-RestoreDeviceObjects();
StrFontName一个以NULL结尾的字符串它指定了字体的名称dwHeigh字体的高度dwFlags创建标记该参数可设为0或以下标记的组合D3DFONT_BOLD、D3DFONT_ITALIC、D3DFONT_ZENABLE
使用DrawText绘制文本
HRESULT CD3DFont::DrawText(FLOAT x,FLOAT y,DWORD dwColor,const TCHAR* strText,DWORD dwFlags 0)Font-DrawText(20,20,0xff000000,Hello World);
x屏幕坐标系中文本绘制的起点的x坐标 y屏幕坐标系中文本绘制的起点的y坐标 dwColor文本的颜色 strText指向所要绘制文本的指针
清理
在删除一个CD3DFont类的对象之前我们必须首先调用一些清理函数
Font-InvalidateDeviceObjects();
Font-DeleteDeviceObjects();
delete Font;
D3DXCreateText函数
该函数用于创建文本的3D网格如果调用成功则返回D3D_OK
HRESULT D3DXCreateText(LPDIRECT3DDEVICE9 pDevice,HDC hDC,LPCWSTR pText,FLOAT Deviation,FLOAT Extrusion,LPD3DXMESH* ppMesh,LPD3DXBUFFER* ppAdjacency,LPGLYPHMETRICSFLOAT pGlyphMetrics
);
pDevice指向与网格相关的设备hDC一个设备环境句柄它包含了我们将用来创建网格的字体的相关信息pText指向确定所要用于生成文本的字符串的指针DeviationTrueType字体轮廓的最大弦偏差该值必须为非负弦偏差等于原始字体的一个设计单位Extrusion沿z轴负方向度量的字体深度ppMesh返回所创建的网格ppAdjacency返回所创建的网格的邻接信息如果不需要该值请指定为NULLpGlyghMetrics指向LPGLYPHMETRICSFLOAT类型结构数组的指针该结构包含了字形和度量数据如果不关心字形的度量数据可将该值设为0
HDC hdc CreateCompatibleDC(0);
HFONT hFont;
HFONT hFontOld;LOGFONT lf;
ZeroMemory(lf, sizeof(LOGFONT));
lf.lfHeight 25;
lf.lfWidth 12;
lf.lfEscapement 0;
lf.lfOrientation 0;
lf.lfWeight 500;
lf.lfItalic false;
lf.lfUnderline false;
lf.lfStrikeOut false;
lf.lfCharSet DEFAULT_CHARSET;
lf.lfOutPrecision 0;
lf.lfClipPrecision 0;
lf.lfQuality 0;
lf.lfPitchAndFamily 0;
wcscpy(lf.lfFaceName, LTime New Roman);hFont CreateFontIndirect(lf);
hFontOld (HFONT)SelectObject(hdc, hFont);D3DXCreateText(Device, hdc, LDirect3D, 0.001f, 0.4f, Text, 0, 0);SelectObject(hdc, hFontOld);
DeleteObject(hFont);
DeleteDC(hdc);TEXT-DrawSubset(0);