|
|
发表于 2008-11-1 16:24:00
|
显示全部楼层
Re:LPD3DXSPRITE 怎么绘制圆形区域?
void CGraphics::RenderSprite(DWORD hTex, const RECT *rcDst, const RECT *rcSrc /* = NULL */,
DWORD color /* = 0xffffffff */)
{
CTexture* pTexture = m_pTextureManager->GetTexture(hTex);
if(!pTexture)
return;
if(pTexture->AutoLoad())
{
RECT SrcRect;
if(rcSrc)
{
SrcRect = *rcSrc;
}
else
{
SrcRect.left = SrcRect.top = 0;
SrcRect.right = pTexture->GetWidth();
SrcRect.bottom = pTexture->GetHeight();
}
D3DXVECTOR2 vPos((float)rcDst->left, (float)rcDst->top);
D3DXVECTOR2 vScale((float)(rcDst->right-rcDst->left)/(SrcRect.right-SrcRect.left),
(float)(rcDst->bottom-rcDst->top)/(SrcRect.bottom-SrcRect.top));
float width = pTexture->GetWidth();
float height = pTexture->GetHeight();
float xScale=vScale.x;
float yScale=vScale.y;
float x=vPos.x;
float y=vPos.y;
/*CustomVertex vPoint[4] =
{
{ (float)x, (float)y, 0.0f, color, (float)SrcRect.left/width, (float)SrcRect.top/height },
{ (float)x+width*xScale, (float)y, 0.0f, color, (float)SrcRect.right/width, (float)SrcRect.top/height },
{ (float)x, (float)y+height*yScale, 0.0f, color, (float)SrcRect.left/width, (float)SrcRect.bottom/height },
{ (float)x+width*xScale, (float)y+height*yScale, 0.0f, color, (float)SrcRect.right/width, (float)SrcRect.bottom/height }
};*/
CustomVertex vPoint[4] =
{
{ (float)rcDst->left, (float)rcDst->top, 0.0f, color, (float)SrcRect.left/width, (float)SrcRect.top/height },
{ (float)rcDst->right, (float)rcDst->top, 0.0f, color, (float)SrcRect.right/width, (float)SrcRect.top/height },
{ (float)rcDst->left, (float)rcDst->bottom, 0.0f, color, (float)SrcRect.left/width, (float)SrcRect.bottom/height },
{ (float)rcDst->right, (float)rcDst->bottom, 0.0f, color, (float)SrcRect.right/width, (float)SrcRect.bottom/height }
};
m_pD3DDevice->SetTexture(0, pTexture->GetTexture());
m_pD3DDevice->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP, 2, vPoint, sizeof(CustomVertex));
/* D3DXVECTOR3 vPos((float)rcDst->left, (float)rcDst->top,0.0f);
D3DXVECTOR3 vScale((float)(rcDst->right-rcDst->left)/(SrcRect.right-SrcRect.left),
(float)(rcDst->bottom-rcDst->top)/(SrcRect.bottom-SrcRect.top),0.0f);
D3DXVECTOR3 vCenter(0.0f,0.0f,0.0f);
vPos.x=vScale.x*vPos.x;
vPos.y=vScale.y*vPos.y;
//lzp m_pSprite->Draw(pTexture->GetTexture(), &SrcRect, &vScale, NULL, 0.0f, &vPos, color);
m_pSprite->Draw(pTexture->GetTexture(), &SrcRect, &vCenter, &vPos, color);
*/
}
} |
|