2012-08-08 42 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