旋转精灵对象Directx9

时间:2012-11-27 22:40:19

标签: c++ directx sprite

我正在使用Directx 9在C ++中制作小游戏。我阅读了一些教程,我可以绘制我的精灵对象并移动它等。但我想旋转它。我尝试:

void D3DGraphics::DrawSprite(LPDIRECT3DTEXTURE9 &texture,ID3DXSprite* pSprite, D3DXVECTOR3* pos, D3DXVECTOR3* dim ){

pDevice->Clear( 0,NULL,D3DCLEAR_STENCIL,D3DCOLOR_XRGB(0,0,0),0.0f,0 );

D3DXMATRIX matrix;
D3DXMatrixRotationX(&matrix, 0.05f);

pSprite->Begin(D3DXSPRITE_ALPHABLEND);


    hresult= pSprite->SetTransform(&matrix);

    hresult= pSprite->Draw(texture, NULL, dim, pos, 0xFFFFFFFF);


pSprite->End();

}

当我删除settransform部分时,它工作得很完美。我检查了hresult,他们返回了S_OK.Any想法?

2 个答案:

答案 0 :(得分:0)

我认为主要的问题是,您尝试将3D转换用于2D用例。尝试使用D3DXMatrixTransformation2Ddoc)作为矩阵。但还有其他问题。我假设名称dim代表维度,但Draw()doc)的此参数设置精灵的中心,而不是大小。最后,全屏 - 清除你的模板缓冲器而不使用它是不必要的昂贵,但我不知道你的其他代码。 希望有所帮助:)

答案 1 :(得分:0)

我认为旋转精灵是没有意义的,因为精灵通常带有2d纹理并用于计票,如果你围绕X轴旋转它就像一张照片在X周围翻转-axis,你不能得到你想要的效果,我试图围绕Z轴旋转它,这很好用,因为纹理通常在XOY平面上。

如果你想制作旋转球,为什么不使用3D网格呢?精灵不是这个请求的好选择。