2016-11-01 17 views
0

私はDirectXTKをC++に使用しており、スプライトバッチ機能を多用しています。DirectxTK SpriteBatchとViewport Centering

私はアイソメトリックレンダリングエンジンを開発しようとしています。私は既にアイソメトリックレンダリングを正しく実行するようにしました。オフセットと並んで。しかし、私は大きな問題に直面しています。

私の人生にとって、カメラの中心をどのように世界の中心(0,0)や他の座標に合わせるかを理解できません。

とSpriteBatch.Begin(にカメラから直接生成この変換行列を注入した後に)

Matrix Camera::getTransformMatrix() { 

    Matrix Transform = Transform.CreateTranslation(Vector3(World_Pos.x, World_Pos.y, 0)); 
    Matrix Rotation = Rotation.CreateRotationZ(0); 
    Matrix Scale = Scale.CreateScale(ZoomFactor, ZoomFactor, 1); 
    return Transform * Rotation * Scale; 
} 

何も起こらないように思われます。これは、カメラのワールド位置を(0,0)に設定し、スプライトのワールド位置を(0,0)に設定して行います。

これは結果の画像です。

http://i.imgur.com/Bep7l5a.png

私はアルファブレンディングをオフにし、デバッグの理由から、スプライトオフセット。

誰でも教えてください。また、誰かがyを反転させる方法を教えてくれれば、それも素晴らしいだろう。

+0

私はDirectXTKを使用していませんが、 'Camera :: getTransformMatrix()'によって返される変換行列をどのように適用しますか? –

+0

@Zamronyをそのままspritebatch.beginの引数にそのまま入力します。 – moonshineTheleocat

答えて

1

SpriteBatchにカスタム変換を指定すると、スクリーンビューポートのデフォルト変換が適用されます。デフォルトの変換では、SpriteBatchは画面の左上隅から始まるピクセル座標で動作します。

カスタム変換を使用したい場合は、「そのまま」の最終ビューポート変換と連結せずに、あなたはオリエンテーションの処理のために、この特殊なケースを使用することができます。

spriteBatch->SetRotation(DXGI_MODE_ROTATION_UNSPECIFIED); 

wikiに必ずお読みください。

+0

私が求めていたものではありませんが、私はそれを解決しました。 – moonshineTheleocat

+0

回転モードをこのように設定すると、中央に0,0の座標を-1から1の標準正規化された空間に戻し、デフォルトのスケールとオフセットをスキップします。左上の中心を0,0、幅、高さに配置します。 –

1

私の答えが見つかりました。この問題に遭遇した人にも。ビューポートを画面の中央に中心(0,0)に移動する必要があるという事実を補う必要があります。あなたが必要とする行列であると言うことです

...

見る*翻訳(幅* 0.05、高さ* 0.05)ビューは、あなたの製品の逆行列である

世界規模、世界ローテーション、そして世界の変容。このような最後のワールド変換行列Fの製品、およびビュー行列Vを満たすこと

...

I = F * V

私は単位行列です。

関連する問題