2012-08-08 93 views
0

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

我完全不知道發生了什麼問題,所有的價值看起來正常我給我。我做錯了什麼,或者有另一種方式來做到這一點?如果我必須用手反轉所有精靈的動畫,這將是一個悲傷的一天,謝謝!

+0

同樣的事情發生在不同的硬件或軟件渲染器上嗎? – 2012-08-08 11:40:13

回答

2

野生,未經檢驗的理論:

  • 精靈被渲染成3D空間
  • 紋理的多邊形翻轉它變成背面的攝像頭
  • 3D渲染設置爲忽略屁股
+0

聖...我會想到這一點,但實際上是這樣。我關閉撲殺,並搗毀它的作品。非常感謝你! – 2012-08-08 11:52:54

+0

我不知道這是否是正確的行爲:) – 2012-08-08 12:38:48