DirectX9:基础篇 第七章 字体

一.简介

在Direct3D中,有三种输出文字的方法:

  • (1) ID3DXFont 接口渲染文字
  • (2) CD3DFont 类渲染文字
  • (3) D3DXCreateText() 函数渲染文字

 

二.ID3DXFont

1.创建 ID3DXFont 接口

HRESULT D3DXCreateFontIndirect(

  LPDIRECT3DDEVICE9 pDevice,

  CONST LOGFONT* pLogFont,

  LPD3DXFONT* ppFont

);

 

LOGFONT lf;
ZeroMemory(&lf, sizeof(LOGFONT));
lf.lfHeight = 25;
lf.lfWidth = 12;
lf.lfWeight = 500;
lf.lfItalic = false;
lf.lfUnderline = false;
lf.lfStrikeOut = false;
lf.lfCharSet = DEFAULT_CHARSET;

strcpy(lf.lfFaceName, "Times New Roman");
ID3DXFont* font = 0;
D3DXCreateFontIndirect(Device, &lf, &font);

 

2.绘制文本

INT ID3DXFont::DrawText(

  LPCSTR pString,    // 要绘制的文字

  INT Count,       // 字符数量

  LPRECT pRect,      // 文本绘制范围

  DWORD Format,    // 文字格式化

  D3DCOLOR Color     // 文字颜色

);

 

Font->DrawText(
    "Hello World",
    -1,
    &rect,
    DT_TOP | DT_LEFT,
    0xff000000
);

 

3.计算每秒的渲染帧数

DWORD FrameCnt;
float TimeElapsed;
float FPS;

void CalcFPS(float timeDelta)
{
    FrameCnt++;
    TimeElapsed += timeDelta;
    if (TimeElapsed >= 1.0f)
    {
        FPS = (float)FrameCnt / TimeElapsed;
        TimeElapsed = 0.0f;
        FrameCnt = 0;
    }
}

 

三.CD3DFont

1.创建 CD3DFont 类

CD3DFont(

     const TCHAR* strFontName,  // 以null结束的字符串,

      DWORD dwHeight,      // 字体的高度

      DWORD dwFlags = 0L     // 可选参数: D3DFONT_BOLD, D3DFONT_ITALIC, D3DFONT_ZENABLE

);

Font  = new CD3DFont("Times New Roman", 16, 0);
Font->InitDeviceObjects(Device);
Font->RestoreDeviceObjects();

 

2.绘制文本

HRESULT CD3DFont::DrawText(FLOAT x, FLOAT y, DWORD dwColor, const TCHAR* strText, DWORD dwFlags = 0L);

  • x

    文字在屏幕上开始绘制的 x 坐标

  • y

    文字在屏幕上开始绘制的 y 坐标

  • dwColor

    文字的颜色

  • strText

    要绘制的文字

  • dwFlags

    可选参数:

    0

    D3DFONT_CENTERED,

    D3DFONT_TWOSIDED,

    D3DFONT_FILTERED

Font->DrawText(20, 20, 0xff000000, "Hello World");

 

3.清除文本

Font->InvalidateDeviceObjects();
Font->DeleteDeviceObjects();
delete Font;

 

四.D3DXCreateText()

HRESULT D3DXCreateText(

  LPDIRECT3DDEVICE9 pDevice,

  HDC hDC,

  LPCTSTR pText,

  FLOAT Deviation,

  FLOAT Extrusion,

  LPD3DXMESH* ppMesh,

  LPD3DXBUFFER* ppAdjacency,

  LPGLYPHMETRICSFLOAT pGlyphMetrics

);

  • pDevice

    设备

  • hDC

    设备环境句柄

  • pText

    指向以 null 结束的字符串指针

  • Deviation

    字形轮廓,值越接近0越光滑

  • Extrusion

    文字在 z 轴方向的深度

  • ppMesh

    

  • ppAdjacency

    

  • pGlyphMetrics

    一个指向 LPGLYPHMETRICSFLOAT 结构数组的指针

 

HDC hdc = CreateCompatibleDC(0);

LOGFONT lf;
ZeroMemory(&lf, sizeof(LOGFONT));

lf.lfHeight = 25;
lf.lfWidth = 12;
lf.lfWeight = 500;
lf.lfItalic = false;
lf.lfUnderline = false;
lf.lfStrikeOut = false;
lf.lfCharSet = DEFAULT_CHARSET;

// font style strcpy(lf.lfFaceName, "Times New Roman");
// Create a font and select that HFONT hFont; HFONT hFontOld; hFont = CreateFontIndirect(&lf); hFontOld = (HFONT)SelectObject(hdc, hFont);

// Create the 3D mesh of text
ID3DXMesh* Text = 0;
D3DXCreateText(_device, hdc, "Direct3D", 0.001f, 0.4f, &Text, 0, 0);

// Reselect the old font, and free resources
SelectObject(hdc, hFontOld);
DeleteObject(hFont);
DeleteDC(hdc);

Text->DrawSubset(0);

 

转载于:https://www.cnblogs.com/k5bg/p/11150866.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值