0

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;

いくつかの異なるスケーリング値の場合、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);

何が問題になっているのかまったくわかりません。すべての値は私には正常に見えます。私は何を間違っているのですか、それとも別の方法がありますか?すべてのスプライトを手で逆方向にアニメートしなければならないのは悲しい日です。よろしくお願いします。

4

1 に答える 1

2

ワイルドでテストされていない理論:

  • スプライトは、3D空間でテクスチャポリゴンとしてレンダリングされます
  • 裏返すと裏側がカメラになります
  • 3Dレンダリングは、裏面を無視するように設定されています
于 2012-08-08T11:40:56.830 に答える