📄 chud.cpp
字号:
#include "CHud.h"
struct Vertex
{
float x, y, z;
float tu, tv;
};
Vertex m_quadVertices[] =
{
{-1.0f, 0.23f, 0.0f, 0.0f,0.0f },
{ 1.0f, 0.23f, 0.0f, 1.0f,0.0f },
{-1.0f, 0.0f, 0.0f, 0.0f,1.0f },
{ 1.0f, 0.0f, 0.0f, 1.0f,1.0f }
};
#define D3DFVF_CUSTOMVERTEX ( D3DFVF_XYZ | D3DFVF_TEX1 )
CHud::CHud()
:m_pdevice(NULL)
,m_pSourSurf(NULL)
,m_pTexture(NULL)
,m_pVertexBuffer(NULL)
,m_pRTSurf(NULL)
,m_pFont(NULL)
,m_pText(NULL)
{
};
CHud::~CHud()
{
SAFE_RELEASE( m_pVertexBuffer );
SAFE_RELEASE( m_pTexture );
SAFE_RELEASE( m_pSourSurf );
SAFE_RELEASE( m_pRTSurf );
}
void CHud::init( LPDIRECT3DDEVICE9 pDevice, LPD3DXFONT pFont, char *pText )
{
m_pdevice = pDevice;
m_pFont = pFont;
m_pText = pText;
// 向纹理中绘制文字
if (FAILED(m_pdevice->GetRenderTarget(0, &m_pSourSurf))) return ;
HRESULT hr = D3DXCreateTexture( m_pdevice,
120, 12,
0, // create a complete mipmap chain
D3DUSAGE_RENDERTARGET, // usage
D3DFMT_X8R8G8B8,// 32 bit XRGB format
D3DPOOL_DEFAULT, &m_pTexture);
if (FAILED(m_pTexture->GetSurfaceLevel(0, &m_pRTSurf)))
{
return ;
}
if (FAILED(m_pdevice->SetRenderTarget(0, m_pRTSurf)))
{
return ;
}
m_pdevice->BeginScene();
m_pdevice->Clear( 0, NULL, D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER,
D3DCOLOR_COLORVALUE(0.0f,0.0f,0.0f,1.0f), 1.0f, 0);
RendText( 0, 0 );
m_pdevice->EndScene();
// 将表面保存到文件
//D3DXSaveSurfaceToFile( "HUD1.bmp", D3DXIFF_BMP, m_pRTSurf, NULL, NULL );
m_pdevice->SetRenderTarget(0, m_pSourSurf); // 设置回原来的后台表面
m_pdevice->CreateVertexBuffer( 4*sizeof(Vertex), D3DUSAGE_WRITEONLY,
D3DFVF_CUSTOMVERTEX, D3DPOOL_DEFAULT,
&m_pVertexBuffer, NULL );
void *pVertices = NULL;
m_pVertexBuffer->Lock( 0, sizeof(m_quadVertices), (void**)&pVertices, 0 );
memcpy( pVertices, m_quadVertices, sizeof(m_quadVertices) );
m_pVertexBuffer->Unlock();
};
void CHud::RendText( int x, int y )
{
RECT destRect;
SetRect( &destRect, x, y, 120, 12 );
m_pFont->DrawText( NULL, m_pText, -1, &destRect, DT_CENTER,
D3DXCOLOR( 1.0f, 1.0f, 1.0f, 1.0f ) );
}
void CHud::render( D3DXVECTOR3 pos )
{
float fSacling = 1.0f;
D3DXMATRIX matWorld, matSacling;
D3DXMatrixTranslation( &matWorld, pos.x, pos.y, pos.z );
D3DXMatrixScaling( &matSacling, fSacling, fSacling, fSacling );
matWorld = matSacling * matWorld;
m_pdevice->SetTransform( D3DTS_WORLD, &matWorld );
// 使字体变清晰
m_pdevice->SetSamplerState(0, D3DSAMP_MINFILTER, D3DTEXF_POINT);
m_pdevice->SetSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_POINT);
m_pdevice->SetRenderState( D3DRS_ALPHABLENDENABLE, TRUE );
// Alpha混合
m_pdevice->SetRenderState( D3DRS_SRCBLEND, D3DBLEND_ONE );
m_pdevice->SetRenderState( D3DRS_DESTBLEND, D3DBLEND_ONE );
m_pdevice->SetTexture( 0, m_pTexture );
m_pdevice->SetStreamSource( 0, m_pVertexBuffer, 0, sizeof(Vertex) );
m_pdevice->SetFVF( D3DFVF_CUSTOMVERTEX );
m_pdevice->DrawPrimitive( D3DPT_TRIANGLESTRIP, 0, 2 );
m_pdevice->SetRenderState( D3DRS_ALPHABLENDENABLE, TRUE );
};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -