




已阅读5页,还剩1页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第7讲 文本显示1、2D文本显示在Direct3D中,ID3DXFont接口用于在DirecteD应用程序中创建字体与实现2D文本的绘制。(1)定义d3d字体对象指针LPD3DXFONT g_pFont = 0; /字体对象(2)创建ID3DXFont接口对象HRESULTD3DXCreateFont(LPDIRECT3DDEVICE9pDevice,HFONThFont,LPD3DXFONT*ppFont);/HFONT TextFont=CreateFont( 12, 6,0, 0, FW_NORMAL, FALSE, FALSE, FALSE, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS, PROOF_QUALITY, FIXED_PITCH | FF_SCRIPT, 宋体 );(3)调用ID3DXFont接口对象g_pFont的接口DrawText方法绘制2D文本。INTDrawText(LPCSTRpString,INTCount,LPRECTpRect,DWORDFormat,D3DCOLORColor); (4) /释放字体对象if(g_pFont != NULL)g_pFont-Release();代码:/=/ Desc: 二维字体/=#include #include #include /-/ Desc: 全局变量/-LPDIRECT3D9 g_pD3D = NULL; /Direct3D对象LPDIRECT3DDEVICE9 g_pd3dDevice = NULL; /Direct3D设备对象LPD3DXFONT g_pFont = 0; /字体对象WCHAR* strText = L欢迎学习Direct3D 游戏编程!;RECT clientRect; /绘制字体的位置矩阵/HFONT TextFont=CreateFont( 12, 6,0, 0, FW_NORMAL, FALSE, FALSE, FALSE, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS, PROOF_QUALITY, FIXED_PITCH | FF_SCRIPT, 宋体 );/-/ Desc: 初始化Direct3D/-HRESULT InitD3D( HWND hWnd )/创建Direct3D对象, 该对象用于创建Direct3D设备对象 if( NULL = ( g_pD3D = Direct3DCreate9( D3D_SDK_VERSION ) ) ) return E_FAIL;/设置D3DPRESENT_PARAMETERS结构, 准备创建Direct3D设备对象 D3DPRESENT_PARAMETERS d3dpp; ZeroMemory( &d3dpp, sizeof(d3dpp) ); d3dpp.Windowed = TRUE; d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;/创建Direct3D设备对象 if( FAILED( g_pD3D-CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dpp, &g_pd3dDevice ) ) ) return E_FAIL; HFONT TextFont=CreateFont(0,0,0,0,0,0,0,0,0,0,0,0,0, LArial);/创建字体对象if (FAILED(D3DXCreateFont(g_pd3dDevice,TextFont, &g_pFont) return E_FAIL;/获取窗口客户区GetClientRect(hWnd, &clientRect);return S_OK;/-/ Desc: 释放创建的对象/-VOID Cleanup()/释放字体对象if(g_pFont != NULL)g_pFont-Release();/释放Direct3D设备对象 if( g_pd3dDevice != NULL) g_pd3dDevice-Release();/释放Direct3D对象 if( g_pD3D != NULL) g_pD3D-Release();/-/ Desc: 渲染图形/-VOID Render() /清空后台缓冲区 g_pd3dDevice-Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(45, 50, 170), 1.0f, 0 ); /开始在后台缓冲区绘制图形 if( SUCCEEDED( g_pd3dDevice-BeginScene() ) ) g_pFont-DrawText(strText, (int)wcslen(strText), &clientRect, DT_SINGLELINE|DT_NOCLIP|DT_CENTER|DT_VCENTER, 0xffffffff);/结束在后台缓冲区绘制图形 g_pd3dDevice-EndScene(); /将在后台缓冲区绘制的图形提交到前台缓冲区显示 g_pd3dDevice-Present( NULL, NULL, NULL, NULL );/-/ Desc: 消息处理/-LRESULT WINAPI MsgProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam ) switch( msg ) case WM_DESTROY:Cleanup(); PostQuitMessage( 0 ); return 0; return DefWindowProc( hWnd, msg, wParam, lParam );/-/ Desc: 入口函数/-int WINAPI WinMain( HINSTANCE hInst, HINSTANCE, LPSTR, INT )/注册窗口类 WNDCLASSEX wc = sizeof(WNDCLASSEX), CS_CLASSDC, MsgProc, 0L, 0L, GetModuleHandle(NULL), NULL, NULL, NULL, NULL, LClassName, NULL ; RegisterClassEx( &wc );/创建窗口 HWND hWnd = CreateWindow( LClassName, L二维字体, WS_OVERLAPPEDWINDOW, 200, 100, 800, 800, GetDesktopWindow(), NULL, wc.hInstance, NULL );/初始化Direct3Dif( SUCCEEDED( InitD3D( hWnd ) ) ) /显示窗口ShowWindow( hWnd, SW_SHOWDEFAULT );UpdateWindow( hWnd );/进入消息循环MSG msg;ZeroMemory( &msg, sizeof(msg) );while( msg.message!=WM_QUIT )if( PeekMessage( &msg, NULL, 0U, 0U, PM_REMOVE ) )TranslateMessage( &msg );DispatchMessage( &msg );elseRender(); /渲染图形 UnregisterClass( LClassName, wc.hInstance ); return 0;2、3D字体显示(1)对于三维文本,需要通过D3DXCreateText函数根据设备环境(DC)创建包含文本的一个网格对象,使用网格实现3D文本,可以显著地增加文本的立体感,并能够体现出文本在受到光照后的明暗变换效果。LPD3DXMESH g_pTextMesh=NULL; /3D文本网格对象(2)初始化3D文本函数:HDC CreateCompatibleDC(HDC hdc);hdc:现有设备上下文环境的句柄,如果该句柄为NULL,该函数创建一个与应用程序的当前显示器兼容的内存设备上下文环境。当不再需要内存设备上下文环境时,可调用DeleteDc函数删除它。1)创建设备环境HDC hdc=CreateCompatibleDC(0);/创建设备环境2)创建字体函数:HFONT CreateFont(int nHeight, / logical height of font height int nWidth, / logical average character width int nEscapement, / angle of escapement int nOrientation, / base-line orientation angle int fnWeight, / font weight如400表示标准体,700表示黑(粗)体,如果此值为0,则使用缺省的权值。DWORD fdwItalic, / italic attribute flag DWORD fdwUnderline, / underline attribute flag DWORD fdwStrikeOut, / strikeout attribute flag删除线DWORD fdwCharSet, / character set identifier DWORD fdwOutputPrecision, / output precision指定输出精度DWORD fdwClipPrecision, / clipping precision指定裁剪精度DWORD fdwQuality, / output quality指向输出质量DWORD fdwPitchAndFamily, / pitch and family 间距LPCTSTR lpszFace / pointer to typeface name string );该函数创建一种有特殊性的逻辑字体,此逻辑字体可以在后面被任何设备选择。InitD3D()中/创建字体HFONT hFont = 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); 3)/将字体选进设备描述表InitD3D()中SelectObject(hdc, hFont);4)创建三维文本网格模型HRESULTD3DXCreateText(LPDIRECT3DDEVICE9pDevice,HDChDC,LPCTSTRpText,FLOATDeviation,/指定弦偏差的最大值FLOATExtrusion,/指定文本z轴负方向突出的总量LPD3DXMESH*ppMesh,LPD3DXBUFFER*ppAdjacency,/指向包含相关输出信息缓冲区指针,可以设为NULLLPGLYPHMETRICSFLOATpGlyphMetrics /指向包含所有字符相关数据的数组);/创建三维文本网格模型if( FAILED( D3DXCreateText( g_pd3dDevice, hdc, L三维字体, 0.001f, 0.4f, &g
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 咨询直播方案怎么写好
- 江门企业拓展活动方案策划
- 保险咨询方案收费原因
- 还款咨询方案怎么写
- 节日活动策划方案案例分析
- 脑部障碍康复咨询方案
- 苏州职业危机咨询方案
- 朔州液压顶管施工方案
- 幼儿园舞蹈排练比赛合同范文8篇
- 施工现场设备管理措施专项施工方案
- 2025-2030中国术中神经生理监测行业市场发展趋势与前景展望战略研究报告
- 2024慢性鼻窦炎诊断和治疗指南解读课件
- 《YS-T621-2021百叶窗用铝合金带、箔材》
- 《胸痛中心质控指标及考核标准》(第三版修订版)
- 2025年国资委企业面试题及答案
- 食品安全周课件
- 亚朵酒店前台培训
- QC七大手法培训
- 拆迁补偿安置协议
- 企业财务分析实践指南
- 体格检查(心肺)
评论
0/150
提交评论