|
|
下面代码是我用来将一个图片做为纹理rander到画面上,
不知道为什么,rander到画面的图形大小比原来的图形小,
大概只有原来的70-80%左右吧,不知道为什么,谁能告诉,谢谢
//定义0.5的坐标
D3DVECTOR vNorm(0, 0, -1);
m_avMagic[0] = D3DVERTEX(D3DVECTOR(-0.5f, 0.5f, 0), vNorm, 0, 0);
m_avMagic[1] = D3DVERTEX(D3DVECTOR(-0.5f,-0.5f, 0), vNorm, 0, 1);
m_avMagic[2] = D3DVERTEX(D3DVECTOR( 0.5f, 0.5f, 0), vNorm, 1, 0);
m_avMagic[3] = D3DVERTEX(D3DVECTOR( 0.5f,-0.5f, 0), vNorm, 1, 1);
if ( g_xMainWnd.Get3DDevice() )
{
D3DVECTOR vTrans;
D3DMATRIX matTrans;
D3DMATRIX matScale;
D3DMATRIX matWorld;
D3DMATRIX matWorldOriginal;
D3DMATERIAL7 mtrl;
if( SUCCEEDED(g_xMainWnd.Get3DDevice()->BeginScene()))
{
// 矩阵(Matrices)
//3-D变换(3-D Transformations)
g_xMainWnd.Get3DDevice()->GetTransform(D3DTRANSFORMSTATE_WORLD, &matWorldOriginal);
m_pxImage->SetIndex(_IMG_IDX_LOGIN_BORDER);
vTrans.x =100; //(FLOAT)m_rcWnd.left+(FLOAT)(m_rcImgWnd.right-m_rcImgWnd.left)/2-400;
vTrans.y =100; //(FLOAT)-m_rcWnd.top-(FLOAT)(m_rcImgWnd.bottom-m_rcImgWnd.top)/2+290;
vTrans.z = 0;
//平移
D3DUtil_SetTranslateMatrix(matTrans, vTrans); //matTrans=vTrans
//缩放
D3DUtil_SetScaleMatrix(matScale, (FLOAT)m_pxImage->m_lpstCurrWilImageInfo->shWidth,
(FLOAT)m_pxImage->m_lpstCurrWilImageInfo->shHeight, 0.0f);
//级连,先平移,后缩放,
D3DMath_MatrixMultiply(matWorld, matScale, matTrans);
g_xMainWnd.Get3DDevice()->SetTransform(D3DTRANSFORMSTATE_WORLD, &matWorld);
g_xMainWnd.Get3DDevice()->SetTexture(0,
D3DWILTextr_GetSurface(m_pxImage->m_szWilFileName, _IMG_IDX_LOGIN_BORDER));
D3DUtil_InitMaterial(mtrl, (FLOAT)(255.0/255.0),(FLOAT)(255.0/255.0),(FLOAT)(255.0/255.0));
mtrl.diffuse.a = 200/255.0f;
g_xMainWnd.Get3DDevice()->SetMaterial(&mtrl);
g_xMainWnd.Get3DDevice()->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, TRUE );
g_xMainWnd.Get3DDevice()->SetRenderState(D3DRENDERSTATE_COLORKEYENABLE, TRUE);
g_xMainWnd.Get3DDevice()->SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE);
g_xMainWnd.Get3DDevice()->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_MODULATE);
g_xMainWnd.Get3DDevice()->SetTextureStageState(0, D3DTSS_ALPHAARG2, D3DTA_DIFFUSE);
g_xMainWnd.Get3DDevice()->SetRenderState(D3DRENDERSTATE_SRCBLEND, D3DBLEND_ONE);
g_xMainWnd.Get3DDevice()->SetRenderState(D3DRENDERSTATE_DESTBLEND, D3DBLEND_INVSRCALPHA);
g_xMainWnd.Get3DDevice()->DrawPrimitive(D3DPT_TRIANGLESTRIP, D3DFVF_VERTEX, m_avMagic, 4, NULL);
g_xMainWnd.Get3DDevice()->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, FALSE);
g_xMainWnd.Get3DDevice()->SetRenderState(D3DRENDERSTATE_COLORKEYENABLE, FALSE);
g_xMainWnd.Get3DDevice()->SetRenderState(D3DRENDERSTATE_SRCBLEND , D3DBLEND_ONE);
g_xMainWnd.Get3DDevice()->SetRenderState(D3DRENDERSTATE_DESTBLEND, D3DBLEND_ZERO);
g_xMainWnd.Get3DDevice()->SetTransform(D3DTRANSFORMSTATE_WORLD, &matWorldOriginal);
g_xMainWnd.Get3DDevice()->EndScene();
}
} |
|