📄 ch17p2_solidfadetransition.cpp
字号:
#include "Ch17p2_SolidFadeTransition.h"
CSolidFadeTransition::CSolidFadeTransition(LPDIRECT3DDEVICE8 pDev, LPDIRECT3DTEXTURE8 pOrigTexture,
D3DXCOLOR FadeToColor)
{
m_pd3dDevice = pDev;
m_FadeToColor = FadeToColor;
m_fFadeTime = 0;
m_pOrigImage = pOrigTexture;
// create vertex buffer for one quad
if (FAILED(CreateQuad(&m_pVB, D3DPOOL_MANAGED, 2, 0, pDev))) {
throw("Error creating vertex buffer!");
}
}
CSolidFadeTransition::~CSolidFadeTransition()
{
SAFE_RELEASE(m_pVB);
}
void CSolidFadeTransition::DoTransition(float fTransTime)
{
m_fFadeTime += fTransTime;
}
void CSolidFadeTransition::FadeQuadVerts()
{
HRESULT hr;
VERTEX_XYZ_DIFFUSE_TEX1* pVertices;
D3DXCOLOR FadeToColor = m_FadeToColor;
// calculate the new color value
FadeToColor.a = FadeToColor.a * (m_fFadeTime / m_fDuration);
if (FadeToColor.a > 1.0f) FadeToColor.a = 1.0f;
if( FAILED( hr = m_pVB->Lock( 0, 6*sizeof(VERTEX_XYZ_DIFFUSE_TEX1), (BYTE**)&pVertices, 0 ) ) )
return;
pVertices[0].color = (DWORD)FadeToColor;
pVertices[1].color = (DWORD)FadeToColor;
pVertices[2].color = (DWORD)FadeToColor;
pVertices[3].color = (DWORD)FadeToColor;
pVertices[4].color = (DWORD)FadeToColor;
pVertices[5].color = (DWORD)FadeToColor;
if( FAILED( hr = m_pVB->Unlock() ) ) return;
}
void CSolidFadeTransition::DoRender(D3DXMATRIX mFinalScale)
{
m_pd3dDevice->SetRenderState(D3DRS_ALPHABLENDENABLE, FALSE);
// set our texture active...
m_pd3dDevice->SetTexture( 0, m_pOrigImage );
// set up our texture stages for a simple texture copy...
m_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_SELECTARG1 );
m_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE );
m_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG2, D3DTA_DIFFUSE );
m_pd3dDevice->SetTextureStageState( 0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1 );
// draw our quad
m_pd3dDevice->SetStreamSource( 0, m_pVB, sizeof(VERTEX_XYZ_DIFFUSE_TEX1) );
m_pd3dDevice->SetVertexShader( D3DFVF_XYZ_DIFFUSE_TEX1 );
m_pd3dDevice->DrawPrimitive( D3DPT_TRIANGLELIST, 0, 2 );
if (m_fFadeTime > 0.0f) {
// set up texture stage states for blending the 2nd quad on top
m_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_DIFFUSE );
m_pd3dDevice->SetTextureStageState( 0, D3DTSS_ALPHAARG1, D3DTA_DIFFUSE );
// put the correct colors into the quad's verts
FadeQuadVerts();
m_pd3dDevice->SetRenderState( D3DRS_ALPHABLENDENABLE, TRUE );
m_pd3dDevice->SetRenderState( D3DRS_SRCBLEND, D3DBLEND_SRCALPHA );
m_pd3dDevice->SetRenderState( D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA );
m_pd3dDevice->SetStreamSource(0, m_pVB, sizeof(VERTEX_XYZ_DIFFUSE_TEX1));
m_pd3dDevice->SetVertexShader(D3DFVF_XYZ_DIFFUSE_TEX1);
m_pd3dDevice->DrawPrimitive(D3DPT_TRIANGLELIST, 0, 2);
m_pd3dDevice->SetRenderState( D3DRS_ALPHABLENDENABLE, FALSE );
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -