游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2475|回复: 6

???sprite如何使用旋?

[复制链接]

8

主题

17

帖子

17

积分

新手上路

Rank: 1

积分
17
发表于 2007-8-10 11:10:00 | 显示全部楼层 |阅读模式
???各位前?
?教Sprite作旋?的函式是什??
在DX8.0版中Sprite->Draw其中一???入??凳切?D度?
但是改成9.0後就?]有那???入了?
???用9.0?怎????
感?各位?芸战獯

2

主题

429

帖子

435

积分

中级会员

Rank: 3Rank: 3

积分
435
发表于 2007-8-10 12:01:00 | 显示全部楼层

Re:???sprite如何使用旋?

矩阵

D3DXMatrixRotationZ

8

主题

17

帖子

17

积分

新手上路

Rank: 1

积分
17
 楼主| 发表于 2007-8-11 14:07:00 | 显示全部楼层

Re:???sprite如何使用旋?

感?您回答
那?????
是先用D3DXMatrixRotationZ???做旋?
然後再把RECT?G到sprite->draw()的函式???

5

主题

755

帖子

757

积分

高级会员

Rank: 4

积分
757
发表于 2007-8-11 14:42:00 | 显示全部楼层

Re:???sprite如何使用旋?

sprite不是可以set一个matrix你变化哪个matrix然后在set不就OK拉

8

主题

17

帖子

17

积分

新手上路

Rank: 1

积分
17
 楼主| 发表于 2007-8-12 13:56:00 | 显示全部楼层

Re:???sprite如何使用旋?

不好意思
其??小弟是拿?碜?d的??虻
其??只有用?sprite->draw???函式
?]有用?matrix 所以也不熟
不知道能不能????大概的?例?
?是?要先去碰一下matrix?
??^^"

0

主题

1

帖子

5

积分

新手上路

Rank: 1

积分
5
发表于 2007-8-13 09:57:00 | 显示全部楼层

Re: ???sprite如何使用旋?

void CDisplayD3D9:rawImage( int left, int top, HIMG hImg, DWORD effect, DWORD dwColor )
{
    CD3DImage*pImg = g_D3DImgMgr.GetImg(hImg);
    if( NULL == pImg ) return;
    if( NULL == pImg->GetTex() ) return;

    D3DXVECTOR3 pos;
    pos.x = (float)left;
    pos.y = (float)top;
    pos.z = 0;

    bool bScale  = ( 1.0f != m_vScale.x || 1.0f != m_vScale.y );
    bool bRot    = ( 0 != m_fRotate );

    if( bScale || bRot )
    {
        bool bCenter = ( m_vCenter.x != 0 || m_vCenter.y != 0 );

        if( bCenter )
        {
            D3DXMATRIXA16 matCenter;
            D3DXMatrixTranslation( &matCenter, -m_vCenter.x-pos.x, -m_vCenter.y-pos.y, 0 );
            m_matTrans = matCenter;
        }
        else
        {
            D3DXMatrixIdentity( &m_matTrans );
        }

        if( bScale )
        {
            D3DXMATRIXA16 matScale;
            D3DXMatrixScaling( &matScale, m_vScale.x, m_vScale.y, m_vScale.z );
            m_matTrans *= matScale;
        }

        if( bRot )
        {
            D3DXMATRIXA16 matRot;
            D3DXMatrixRotationZ( &matRot, m_fRotate );
            m_matTrans *= matRot;
        }

        if( bCenter )
        {
            D3DXMATRIXA16 matCenter;
            D3DXMatrixTranslation( &matCenter, m_vCenter.x+pos.x, m_vCenter.y+pos.y, 0 );
            m_matTrans *= matCenter;
        }

    }
    else
    {
        D3DXMatrixIdentity( &m_matTrans );
    }

    g_pSprite->SetTransform( &m_matTrans );

    _change_render_state( effect&fxBlendMask );
    if( effect & fxTexTex ) dwColor = 0xffffffff;//use texture color
   
    g_pSprite->Draw( pImg->GetTex(), pImg->GetImgRect(), &m_vCenter, &pos, dwColor );
}

二个问题注意
1. SetTransform和Draw里的pos和center会互相影响,建议是在原点进行rot/scale
2. SetTransform会影响之后的所有Sprite Draw

最后
单纯画2DSprite,ID3DXSprite不如自己写的效率高,具体可以参考HGE Source中的代码

8

主题

17

帖子

17

积分

新手上路

Rank: 1

积分
17
 楼主| 发表于 2007-10-2 22:48:00 | 显示全部楼层

Re:???sprite如何使用旋?

十分感?您的回覆
小弟真的是受益良多

真的很抱歉??晚才?您回?
之前不知何故一直?不上??站
再次感?您的教?W
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-12-15 02:21

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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