您好,欢迎访问三七文档
字体与文本显示图形系统中为了获得当前运行程序的相关信息,往往需要在屏幕上显示文本,D3D的功能扩展ID3DXFont()对此提供了方便的解决方法。10.1二维文本绘制通过D3D功能对象ID3DXFont可以绘制文本,主要使用:ID3DXfont::DrawText()和ID3DXFont::GetDevice()函数。淘课网-中国领先的管理培训网站()15万份培训资料任你下载1.创建ID3DXFont对象使用接口ID3DXFont绘制文本,首先需要通过函数D3DXCreateFont()函数通过Windows字体和D3D设备指针创建ID3DXFont对象。ID3DXCreateFont()函数声明HRESULTD3DXCreateFont(LPDIRECT3DDEVICE9pDevice,INTHeight,UINTWidth,UINTWeight,UINTMipLevels,BOOLItalic,DWORDCharSet,DWORDOutputPrecision,WORDQuality,DWORDPitchAndFamilyLPCTSTRpFacename,LPD3DXFONT*ppFont);ID3DXCreateFont()函数参数说明pDevice:表示一个有效的D3D设备指针Height:表示创建字体的逻辑高度,如果等于0则使用字体的默认高度。Width:表示创建字体的平均逻辑宽度,如果等于0,则使用字体的默认宽度。Weight、MipLevelsItalic:表示字体的权舆和过滤属性,一般取默认值0。CharSet:表示创建字体所属的字符集合,如果设为D3FAULT_CHARSET,则函数将自动寻找与指定字体相符的字符集合。ID3DXCreateFont()函数参数说明(续)OutputPrecision:指定字符的输出精度,通常情况下将该值设为OUT_DEFAULT_PRECIS。Quality:指定字符的输出质量,通常情况下将该值设为D3FAULT_QUALITY。PitchAndFamily:指定字休的索引号pFaceName是指向表示字体名称的字符串。ppFont:存储新创建的字体指针。淘课网-中国领先的管理培训网站()15万份培训资料任你下载通过Arial字体创建一个ID3DXFont对象•LPD3DXFONTg_pFont=0;•if(FAILED(D3DXCreateFont(•g_pd3dDevice,•,0,0,0,0,0,0,0,0,•LArial,•&g_pFont)))•returnE_FAIL;2.使用ID3DXFont对象绘制二维文本创建了ID3DXFont对象后,就可以使用其接口函数ID3DXFont::DrawText()在指定位置绘制二维文本。该函数支持ANSI双字节字符串。ID3DXFont::DrawText()函数声明•INTID3DXFont::DrawText(•LPD3DXSPRITEpSprite,•LPCSTRpSting,•INTCount,•LPRECTpRect,•DWORDFormat,•D3DCOLORColor•);ID3DXFont::DrawText()参数说明pSprite:指定字符串所属的ID3DXSprite对象接口,可置为默认值为0,表示在当前窗口绘制字符串。pSting:指定将要绘制的字符串。Count:指定绘制字符的个数,如果等于-1,则函数将自动绘制到字符串结束为止。pRect:指定绘制字符串的矩形区域位置。Format:指定字符串在pRect指定的矩形区域内的摆放属性,这些属性可以通过位去处“或”(|)联合使用。Color:指定字符串的颜色值,属于D3DCOLOR结构。淘课网-中国领先的管理培训网站()15万份培训资料任你下载常用字符串排放属性摆放属性说明DT_BOTTOM字符串位于pRect的底部,该心性只能与DT_SINGLELINE共存DT_CALCRECT根据字符串的长度更改pRect指定的矩形区域的大小。DT_CENTER字符串位pRect的水平居中DT_LEFT字符串向pRect的左边对齐DT_NOCLIP不对字符串进行裁剪常用字符串排放属性(续表)摆放属性说明DT_RIGHT字符串向pRect右方对齐DT_SINGLELINE将字符串单行显示,忽略换行标记。DT_TOP字符串位于pRect的顶端DT_VCENTER字符串位于pRect垂直居中下列代码在窗口客户区中央显示一行白色的文字:WelcomeDirect3D!WCHAR*strText=LWelcomeDirect3D!;……g_pFont-DrawText(NULL,strText,(int)wcslen(strText),&clientRect,DT_SINGLELINE|DT_NOCLIP|DT_CENTER|DT_VCENTER,0xffffffff);淘课网-中国领先的管理培训网站()15万份培训资料任你下载3.ID3DXFont其他相关接口函数函数ID3DXFont::GetDevice()能够获得与ID3DXFont相关联的D3D设备指针,该函数声明如下:10.2三维文本绘制1.创建三维文本网格模型•在D3D中,三维物体的显示是通过网格模型来实现的,显示三维物体的关键在于生成该网格模型。三维文本也不例外,显示三维文本同样需要该文本所对应的网格模型。D3D为此提供了功能库函数D3DXCreateText(),它可以方便地创建一个包含具体文本的网格模型。淘课网-中国领先的管理培训网站()15万份培训资料任你下载D3DXCreateText()声明HRESULTD3DXCreateText(•LPDIRECT3DDEVICE9pDevice,•HDChDC,•LPCTSTRpText,•FLOATDeviation,•FLOATExtrusion,•LPD3DXMESH*ppMesh,•LPD3DXBUFFER*ppAdjacency,•LPGLYPHMETERICSFLOATpGlyphMetrics)D3DXCreateText()参数说明LpDevice:用于创建网格的3D设备指针hDC:表示设备描述表。pText:指定具体文本字符串Deviation:指定弦偏差的最大值。Extrusion:指定文本在z轴负方向突出的总量。ppMesh:指向生成字体网格模型地址的指针。ppAdjacency:指向包含相关输出信息缓冲区的指针,可以为NULL。pGlyphMetrics:指向GLYPHMETRICSFLOAT结构体数组指,该数组可以包括所有字符的相关数据。创建文本“三维字体”的网格模型的代码//创建设备描述表HDChdc=CreateCompatibleDC(NULL);if(hdc==NULL)returnE_OUTOFMEMORY;//创建字体HFONThFont=CreateFont(0,0,0,0,FW_BOLD,false,false,false,DEFAULT_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH|FF_DONTCARE,LArial);//将字体选进设备描述表SelectObject(hdc,hFont);2.绘制三维文本网格模型创建好文本的网格模型之后,就可以使用ID3DXMesh的接口函数DrawSubset()将其绘制出来,在绘制之前需要注意设置合适的世界矩阵,这时虽然是绘制三维文本,但实质上就是绘制一个三维物体,所以为三维文本设置世界矩阵是必不可少的。淘课网-中国领先的管理培训网站()15万份培训资料任你下载绘制三维文本的代码片段VOIDSetWorldMatrix(){//创建并设置世界矩阵D3DXMATRIXmatWorld;D3DXMATRIXmatTrans;D3DXMatrixTranslation(&matWorld,-1.75f,0.0f,0.0f);//平移g_pd3dDevice-SetTransform(D3DTS_WORLD,&matWorld);}……pTextMesh-DrawSubset(0);小结文本绘制是图形程序设计中不可或缺的一部分,正确适当地进行文本绘制在图形程序设计中具有非常重要的实际意义。本章通过两个示例程序详细介绍了在D3D中如何进行二维和三维文本的绘制。二信字体的显示比较简单,可以结合示例程序进一步加深理解。三维字体的显示关键在于构造出字符串所对应的网格模型,然后在场景中渲染该三维模型即可。淘课网-中国领先的管理培训网站()15万份培训资料任你下载
本文标题:字体与文本
链接地址:https://www.777doc.com/doc-3197141 .html