C++ 在一个轴上翻转D3DX10_精灵不会';不工作,翻转两个工作

C++ 在一个轴上翻转D3DX10_精灵不会';不工作,翻转两个工作,c++,directx,transform,sprite,C++,Directx,Transform,Sprite,我正在制作一个2D侧滚游戏(DirectX 10),所以我想在Y轴上翻转精灵。由于某些原因,当我在Y或X方向上指定负缩放值时,精灵不会绘制,但如果我同时为这两个方向指定正缩放值或负缩放值,精灵将绘制得很好。我不认为这是精灵在屏幕外的情况,因为我已经检查了matWorld中的值,并且它总是在我的视口的值内 设置matWorld的代码如下所示: D3DXMATRIX matTranslation; D3DXMatrixTranslation(&matTranslation, static_c

我正在制作一个2D侧滚游戏(DirectX 10),所以我想在Y轴上翻转精灵。由于某些原因,当我在Y或X方向上指定负缩放值时,精灵不会绘制,但如果我同时为这两个方向指定正缩放值或负缩放值,精灵将绘制得很好。我不认为这是精灵在屏幕外的情况,因为我已经检查了matWorld中的值,并且它总是在我的视口的值内

设置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;
图形代码如下所示:

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);
我完全不知道出了什么问题,所有的值对我来说都很正常。我做错了什么,还是有别的方法?如果我也要用手把所有的精灵反过来制作动画,那将是一个悲伤的日子。。提前谢谢

狂野、未经检验的理论:

  • 精灵在三维空间中渲染为纹理多边形
  • 翻转它会将背面转向摄影机
  • 三维渲染设置为忽略背面

相同的事情是发生在不同的硬件上还是发生在软件渲染器上?天哪。。。我从来没有想过,但事实就是这样。我关掉了扑杀,砰的一声,它开始工作了。非常感谢你!
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);