我正在制作2D双面滚动游戏(DirectX 10),所以我想翻转Y轴上的精灵。出于某种原因,当我在Y或X方向上指定负比例值时,精灵不绘制,但如果我为两者指定正或负比例值,则绘制得很好。我不认为这是一个离开屏幕的精灵,因为我检查了matWorld中的值,并且它始终在我的视口的值内。在一个轴上翻转D3DX10_SPRITE不起作用,翻转两个作品
,设置了matWorld的代码如下:
D3DXMATRIX matTranslation;
D3DXMatrixTranslation(&matTranslation, static_cast<float>(m_X), static_cast<float>(m_Y), m_Z);
D3DXMATRIX matTranslationPointMove;
D3DXMatrixTranslation(&matTranslationPointMove, 0.5f, 0.5f, 0.1f);
D3DXMATRIX matScaling;
D3DXMatrixScaling(&matScaling, static_cast<float>(m_Width) * m_ScaleX, static_cast<float>(m_Height) * m_ScaleY, 1.0f);
m_Sprite.matWorld = matTranslationPointMove * matScaling * matTranslation;
对于一些不同的缩放值,matWorld看起来像这样(道歉格式化..):
ScaleX=ScaleY = 1 ---- ScaleX=ScaleY = -1 ------------ ScaleX=-1, ScaleY=1
[24 0 0 0] ---------------- [-24 0 0 0] ------------------------ [-24 0 0 0 ]
[0 18 0 0] ---------------- [0 -18 0 0] ------------------------ [0 18 0 0 ]
[0 0 1 0 ] ----------------- [0 0 1 0 ] ------------------------- [0 0 1 0 ]
[12 52 0.6 1 ] ----------- [-12 52 0.6 1 ] ------------------- [-12 52 0.6 1 ]
绘图代码长相像这样:
m_pDevice->ClearRenderTargetView(m_pRenderTargetView, D3DXCOLOR(1.0f, 1.0f, 1.0f, 0.0f));
HRESULT hr = NULL;
D3DXMATRIX matProjection;
D3DXMatrixOrthoOffCenterLH(&matProjection,
-400.0f,
800.0f,
-400.0f,
800.0f,
0.1f,
10.0f
);
hr = m_ISprite->SetProjectionTransform(&matProjection);
if (FAILED(hr)) OutputDebugStringA("NOOooooo");
m_ISprite->Begin(D3DX10_SPRITE_SORT_DEPTH_BACK_TO_FRONT);
spriteVector::iterator it = spritesToDraw.begin();
while(it != spritesToDraw.end())
{
m_ISprite->DrawSpritesBuffered(*it, 1);
++it;
}
m_ISprite->Flush();
m_ISprite->End();
m_pSwapChain->Present(0,0);
我完全不知道发生了什么问题,所有的价值看起来正常我给我。我做错了什么,或者有另一种方式来做到这一点?如果我必须用手反转所有精灵的动画,这将是一个悲伤的一天,谢谢!
同样的事情发生在不同的硬件或软件渲染器上吗? – 2012-08-08 11:40:13