我正在製作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