游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3287|回复: 4

LPD3DXSPRITE 怎么绘制圆形区域?

[复制链接]

3

主题

3

帖子

7

积分

新手上路

Rank: 1

积分
7
发表于 2008-10-27 15:06:00 | 显示全部楼层 |阅读模式
LPD3DXSPRITE                        g_pSprite         = NULL;
LPDIRECT3DTEXTURE9      g_pMiniMap         = NULL;
D3DXCreateSprite(g_pd3dDevice, &g_pSprite);
D3DXCreateTextureFromFile( g_pd3dDevice, L"minimap.dds", &g_pMiniMap );

g_pd3dDevice->BeginScene()
g_pSprite->Begin(D3DXSPRITE_DONOTSAVESTATE);
g_pSprite->Draw(g_pMiniMap, &rc, NULL, NULL, D3DCOLOR_XRGB( 255, 255, 255));

我想把矩形的minimap用圆形绘制,有什么办法和思路??
帮忙解决以下,混合透明?或显示圆形区域?请帮忙写个小例子,谢谢!!!

如果g_pSprite->Draw(g_pMiniMap, &rc, rc的参数可以设置为HRGN就好了,可是不能编译[em17] [em17]帮帮忙阿!!

g_pSprite->End();
g_pd3dDevice->EndScene();
g_pd3dDevice-&gtresent( NULL, NULL, NULL, NULL );

1

主题

23

帖子

23

积分

注册会员

Rank: 2

积分
23
发表于 2008-10-28 11:58:00 | 显示全部楼层

Re:LPD3DXSPRITE 怎么绘制圆形区域?

模板缓冲

75

主题

385

帖子

400

积分

中级会员

Rank: 3Rank: 3

积分
400
发表于 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);
*/
        }
}

5

主题

46

帖子

55

积分

注册会员

Rank: 2

积分
55
QQ
发表于 2008-11-1 18:35:00 | 显示全部楼层

Re:LPD3DXSPRITE 怎么绘制圆形区域?

上面的代码就能画圆形区域了吗?

LPD3DXSPRITE 似乎不行;
用两层纹理混合可以实现;
第一层画小地图的矩形部分;
第二层在给一个圆形的Alpha通道;

0

主题

2

帖子

6

积分

新手上路

Rank: 1

积分
6
发表于 2008-11-6 10:05:00 | 显示全部楼层

Re: LPD3DXSPRITE 怎么绘制圆形区域?

学习一下
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-20 23:28

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表