0

我正在使用 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。知道吗?

4

2 回答 2

0

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

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

于 2012-11-29T01:21:48.067 回答
0

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

于 2012-11-28T10:36:28.380 回答