D3D9 Samples(10)--Text3D

本文档详细介绍了如何使用Direct3D9进行3D文本的绘制,包括基本文字绘制、字体修改、创建3D字体网格以及利用精灵对象进行文字渲染,通过实例展示了DrawText函数的用法,并提供了相关API的参考资料。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

 

 

D3D9 Samples(10)--Text3D

 

 

 

       打开Text3D项目。先编译运行下项目,看看效果:

 

 

       这个例子演示各种字体的绘制,包括2D文字和3D立体文字。

 

 

1. 基本绘制

 

ID3DXFont*                 g_pStatsFont =NULL;

绘制上方黄色的两行字,显示:

在OnCreateDevice中创建字体D3DXCreateFont。

在OnResetDevice、OnLostDevice、OnDestroyDevice中响应Device状态的变化。

在OnFrameRender中绘制:

SetRect( &rc, 2, 0, 0, 0 );

g_pStatsFont->DrawText(NULL,DXUTGetFrameStats(DXUTIsVsyncEnabled() ), -1, &rc,DT_NOCLIP,

                                    D3DXCOLOR( 1.0f, 1.0f, 0.0f, 1.0f ) );

SetRect( &rc, 2, 15, 0, 0 );

g_pStatsFont->DrawText(NULL,DXUTGetDeviceStats(), -1, &rc,DT_NOCLIP,

                                    D3DXCOLOR( 1.0f, 1.0f, 0.0f, 1.0f ) );

 

下面看下ID3DXFont::DrawText 函数:

INT DrawText(

  [in]  LPD3DXSPRITE pSprite,

  [in]  LPCTSTR pString,

  [in]  INT Count,

  [in]  LPRECT pRect,

  [in]  DWORD Format,

  [in]  D3DCOLOR Color

);

 

pSprite指向ID3DXSprite接口,可以使用程序提供的,如下面的g_pFont2。也可以用自己内部的sprite对象(如果pSprite被赋值NULL)。

pString指向需要绘制的文字字符串。

Count上面字符串的字符个数。如果此值为-1,那么上面的pString必须指向一个以零结尾(\0)的字符串,这样DrawText可以计算出字符串的长度。

pRect绘制区域。

Format表明绘制格式。比如向左对齐,居中等。

Color指定文字的颜色。这个参数类型实际上是DWORD,来存放alpha、red、green、blue四个颜色值,每个值占8个字节。

 

 

 

2. 修改字体

 

ID3DXFont*                 g_pFont =NULL;

绘制中间红色的那行字:

可以通过

修改它的字体。

相比上面的g_pStatsFont,这里增加了修改字体的功能,实现代码在“Change Font”按钮的响应处:

OnGUIEvent

case IDC_CHANGEFONT:

 

这里调用一个Windows API ChooseFont,弹出选择字体标准对话框。

 

确认选择后通过D3DXCreateFont创建一个新的字体给g_pFont。

 

 

 

3. 三维字体

 

ID3DXMesh*                 g_pMesh3DText =NULL;

这里是D3DX提供的一个Mesh接口,管理网格模型。

 

1.     创建字体网格

CreateD3DXTextMesh

A.     CreateCompatibleDC 创建一个和当前程序所在屏幕兼容的内存DC(device context)。

B.     CreateFont 创建一个字体。

C.     SelectObject为A中创建的hdc选择一个对象(即上面的字体对象)。并用hFontOld保存原先的对象

D.     D3DXCreateText用上面的hdc创建D3D的文字网格ID3DXMesh对象。

E.     SelectObject再用原先的hFontOld替换上面创建的字体对象hFont。

F.     删除对象和DC

这样就创建了一个字体网格对象。

 

 

 

4. 使用精灵对象绘制文字

 

ID3DXFont*                 g_pFont2 =NULL;

绘制上方粉红色的几行字以及下方白色的那几行字:

 

 

这个字体对象是演示使用程序创建的精灵对象来绘制文字。

ID3DXSprite*               g_pTextSprite =NULL;  // Sprite for batching draw text calls

从这个对象的方法中可以看到,实际上是封装了一个2D绘制矩形的接口,简化了直接使用vertex buffer的步骤。

 

在OnCreateDevice中D3DXCreateSprite创建精灵对象。

在OnFrameRender中绘制:

文字需要在ID3DXSprite的Begin和End之间绘制。

 

 

 

 

参考资料

 

http://msdn.microsoft.com/en-us/library/windows/desktop/bb173962(v=vs.85).aspx

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值