我正在用DirectX9用C++做一个小游戏。我读了一些教程,我可以画出我的sprite对象并移动它,我想旋转它。我尝试:
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();
}
当我删除设置转换部分时,它工作得很好。我检查了hresult s,他们返回了S_OK.Any的想法?
发布于 2012-11-28 18:36:28
我认为主要的问题是,你试图在2D用例中使用3D转换。尝试使用矩阵的D3DXMatrixTransformation2D
(doc)。但还有一些额外的问题。我假设名称dim代表尺寸,但是Draw()
(doc)的这个参数设置精灵的中心,而不是大小。最后,完全清除你的stencilbuffer而不使用它是不必要的昂贵的,但我不知道你的其他代码。希望这能有所帮助:)
发布于 2012-11-29 09:21:48
我认为旋转精灵是没有意义的,因为精灵通常带有2d纹理,用于广告牌,如果你绕X轴旋转它,就像一张图片绕X轴翻转一样,你不能得到你想要的效果,我试着绕Z轴旋转它,这很好用,因为纹理通常在XOY平面上。
如果你想做一个旋转的球,为什么不使用3D网格呢?对于这个请求,sprite不是一个很好的选择。
https://stackoverflow.com/questions/13594486
复制相似问题