DirectX中的字体应用

1 DX中的创建字体的函数

 HRESULT  D3DXCreateFont(
  __in   LPDIRECT3DDEVICE9 pDevice,
  __in   INT Height,
  __in   UINT Width,
  __in   UINT Weight,
  __in   UINT MipLevels,
  __in   BOOL Italic,
  __in   DWORD CharSet,
  __in   DWORD OutputPrecision,
  __in   DWORD Quality,
  __in   DWORD PitchAndFamily,
  __in   LPCTSTR pFacename,
  __out  LPD3DXFONT *ppFont
);
 HRESULT  D3DXCreateFontIndirect(
  __in   LPDIRECT3DDEVICE9 pDevice,
  __in   const D3DXFONT_DESC *pDesc,
  __out  LPD3DXFONT *ppFont
);
typedef struct D3DXFONT_DESC {
  INT   Height;
  UINT  Width;
  UINT  Weight;
  UINT  MipLevels;
  BOOL  Italic;
  BYTE  CharSet;
  BYTE  OutputPrecision;
  BYTE  Quality;
  BYTE  PitchAndFamily;
  TCHAR FaceName;
} D3DXFONT_DESC, *LPD3DXFONT_DESC;

可以看出函数D3DXCreateFont跟函数D3DXCreateFontIndirect 如出一辙,只不过是在D3DXCreateFontIndirect中用结构体D3DXFONT_DESC代替了诸多D3DXCreateFont中纷乱的参数。

下面详细介绍一下各个参数的含义:

Height:字体的高度

Width:字体的宽度

Weight:字体的权重,范围是0到1000,也就是字体的粗细,0最细,1000最粗

MipLevels:字体的过滤属性,如果值是0或者D3DX_DEFAULT,那么完整的mipmap链被创建,如果是1则纹理空间被等同的映射到屏幕空间。

Italic:布尔类型的变量,TRUE表示斜体,FALSE表示不是斜体

CharSet:字符集,一般设置为默认值DEFAULT_CHARSET

OutputPrecision:表示输出文本的精度,就是指输出的文字跟字体要求的宽度,高度,字符方向,行距,间距,字体类型等的契合度,通常设置为OUT_DEFAULT_PRECTS,具体可见WinGDI.h中的定义类型

Quality :输出质量,一般也设置为DEFAULT_QUALITY

PitchAndFamily :间距和字体系列,一般设置为0。具体可以见WinGDI

#define DEFAULT_PITCH           0

#define FIXED_PITCH             1

#define VARIABLE_PITCH          2

#if(WINVER >= 0x0400)

#define MONO_FONT               8

#define FF_DONTCARE         (0<<4)  /* Don‘t care or don‘t know. */

#define FF_ROMAN            (1<<4)  /* Variable stroke width, serifed. */

/* Times Roman, Century Schoolbook, etc. */

#define FF_SWISS            (2<<4)  /* Variable stroke width, sans-serifed. */

/* Helvetica, Swiss, etc. */

#define FF_MODERN           (3<<4)  /* Constant stroke width, serifed or sans-serifed. */

/* Pica, Elite, Courier, etc. */

#define FF_SCRIPT           (4<<4)  /* Cursive, etc. */

#define FF_DECORATIVE       (5<<4)  /* Old English, etc. */

这样的话我就可以在字体系列和字间隔之间随意搭配,

FaceName:字体名称,比如“宋体”,“华文彩云”等

示例:

//创建字体
HR( D3DXCreateFont(m_pDevice,30,20,0,D3DX_DEFAULT,false,DEFAULT_CHARSET,OUT_TT_ONLY_PRECIS,
		DEFAULT_QUALITY,81,TEXT("宋体"),&m_pFont) );
//绘制字体
	RECT rect;
	GetClientRect(m_hwnd,&rect);

	TCHAR buf[50] = {0};
	int nSize = _stprintf(buf,TEXT("FPS:%0.2f"),getFPS(dTime) );
	HR( m_pFont->DrawText(NULL,buf,nSize,&rect,DT_RIGHT,D3DCOLOR_XRGB(2,190,100)) );
	rect.top = 100;
	HR( m_pFont->DrawText(NULL,TEXT("不会磨灭的激情forever"),-1,&rect,DT_CENTER,D3DCOLOR_XRGB(200,90,100)) );
	rect.top = 200;
	HR( m_pFont->DrawText(NULL,TEXT("狂傲不羁的少年forever"),-1,&rect,DT_CENTER,D3DCOLOR_XRGB(255,120,10)) );

2 与之对应的GDI中的创建字体的函数

CreateFont,以及CreateFontIndirect

3 3D字体

D3DXCreateText函数,创建一个网格,绘制文字的时候就是绘制对应的网格

 HRESULT  D3DXCreateText(
  __in   LPDIRECT3DDEVICE9 pDevice,
  __in   HDC hDC,
  __in   LPCTSTR pText,
  __in   FLOAT Deviation,
  __in   FLOAT Extrusion,
  __out  LPD3DXMESH *ppMesh,
  __out  LPD3DXBUFFER *ppAdjacency,
  __out  LPGLYPHMETRICSFLOAT pGlyphMetrics
);

pText:要显示的内容

Deviation:TrueType字体轮廓的最大弦偏差,该值必须是非负弦偏差等于原始字体的一个设计单位,一般设置为0.001

Extrusion:沿Z轴负方向的字体深度

ppMesh:返回创建的字体网格

ppAdjacency:返回创建网格的邻接信息,如果不需要可以用指定该参数为NULL

pGlyphMetrics:指向LPGLYPHMETRICSFLOAT类型结构体的指针,该结构包含了字形(glyph)的度量数据(metric data),如果不需要该数值,可以将其设为NULL

可以看到函数的参数中有hdc这一选项,这个主要是为了将HFONT选入设备上下文,然后利用该字体去绘制3D文字网格。,因此我们需要先创建字体,然后将字体选入设备中。

创建字体毫无疑问就是利用上面说的CreateFont或者CreateFontIndirect函数。

示例如下:

//创建字体
	HFONT hFont;
	HFONT hFontOld;
	HDC hdc = CreateCompatibleDC(NULL);

	hFont = CreateFont(25,12,0,0,500,false,false,false,DEFAULT_CHARSET,OUT_DEFAULT_PRECIS,
		CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE,TEXT("宋体") );
	hFontOld = (HFONT)SelectObject(hdc,hFont);
	D3DXCreateText(m_pDevice,hdc,TEXT("不经打击老天真"),0.001f,0.5f,&m_pFontMesh,NULL,NULL);

	SelectObject(hdc,hFontOld);
	DeleteObject(hFont);
	DeleteDC(hdc);
//绘制字体
	m_pFontMesh->DrawSubset(0);

最终显示效果:

程序的下载地址:下载地址

DirectX中的字体应用

时间: 2024-10-17 15:15:43

DirectX中的字体应用的相关文章

如何添加window中的字体到eclipse中去?

以前都没有注意到在window中的字体居然有些在eclipse中查找不到,后来才知道是因为window中的有些字体被设置为了隐藏了所以查找不到了 后来在网上找找资料发现有些解决方法,有些博主说这样: 采用的是更改eclipse 下面的 plugins 里面的org.eclipse.jface_3.7.0.v20110928-1505.jar 把它打开然后进入到/org/eclipse/jface/resources这个目录,然后找到xxxxwindows7.properties 在这个jar包里

从OTF字体文件中查找字体名称

for in ? 使用神器vim就好了... vim ./AKZIDENZGROTESK-COND.OTF 从OTF字体文件中查找字体名称,布布扣,bubuko.com

iOS开发中自定义字体的方法

http://www.cnblogs.com/iyou/archive/2014/05/25/3751669.html 1. 首先下载你想要设置的字体库,例如设置方正启体简体 2. 添加到工程,一定要注意勾选红色框框处,默认是不勾选的  添加以后 3.在plist文件中添加 4.现在已经添加成功了,但是要使用就必须知道FontName,用以下代码可查到 NSArray *familyNames = [[NSArray alloc] initWithArray:[UIFont familyName

为什么html5用的jQuery Mobile在手机浏览器/微信中打开字体很小

头部加入 <header> <metaname="viewport"content="width=device-width, initial-scale=1"> </header> 为什么html5用的jQuery Mobile在手机浏览器/微信中打开字体很小,布布扣,bubuko.com

Eclipse中的字体设置

Eclipse是java开发者使用最广泛的开发工具,作为一名初学者,感觉Eclipse能对java中许多不同的字段进行颜色划分的功能非常实用,于是对Eclipse中的字体稍微进行了研究. 常见进行字体调整的界面有三种,1.基本的字体设置:2.程序编写界面的颜色设置:3.java程序内特殊字的颜色设置. 1.基本的字体设置 Windous->Preferences->General->Appearance->Basic 基本字体的设置 常用Text Font->Edit(右侧)

(转)directx中丢失的设备(lost device)

directx中丢失的设备(lost device) 丢失的设备 一个Microsoft? Direct3D?可以处于操作状态或丢失状态.操作状态是设备的正常状态,设备按预期运行并present所有渲染结果.当事件发生时,如全屏应用程序失去键盘输入焦点,设备就转变到丢失状态,这会导致渲染无法进行.丢失状态表现为所有渲染操作的悄然失败,这意味着即使渲染操作失败所有的渲染方法仍可以返回成功码.在这种情况下,IDirect3DDevice9:resent返回错误码D3DERR_DEVICELOST.

Android下EditText中的字体不统一问题

Android下EditText中的字体不统一问题 好久没写,今天心情好略记下解决的某bug 在一个登录界面有帐号和密码两个EditText,但是却发现两个EditText的hint的英文字体不同,看着极不协调.但是两个EditText都没有特意设置过hint的字体啊··· 经实验,把密码栏的android:password="true"属性去掉后字体变一样.应该是这个属性的影响. 经查,hint字体受EditText的text字体影响,即受android:typeface的影响.an

使用资源文件(内存)中的字体 或 使用文件中的字体

// 一.使用资源文件(内存)中的字体 System.Runtime.InteropServices.GCHandle hObject = System.Runtime.InteropServices.GCHandle.Alloc(Properties.Resources.QuartzMS, System.Runtime.InteropServices.GCHandleType.Pinned); IntPtr intptr = hObject.AddrOfPinnedObject(); Syst

145显示系统中的字体

效果如下: ViewController.h 1 #import <UIKit/UIKit.h> 2 3 @interface ViewController : UITableViewController 4 @property (strong, nonatomic) NSArray *arrFontName; 5 @property (strong, nonatomic) NSArray *arrFont; 6 @property (strong, nonatomic) NSDictiona