マネージDirectXを使用して、スプライトを使用してテクスチャとテキストを描画します。残念ながら、テキストとテクスチャを同じスプライトに配置すると、描画コマンドを実行する順序に関係なく、テクスチャがテキストを上書き(オーバードロー?)します。マネージDirectX:テクスチャとテキストを含むスプライトの深度(Zオーダー)を指定する
私は最終的にテクスチャとテキストを散りばめたいので、どのようにこれらのスプライトにZオーダーを指定しますか?各レイヤーは別個のスプライトになければなりませんか?
m_device.BeginScene();
m_device.Clear(ClearFlags.Target, Color.Black, 1.0f, 0);
m_sprite.Begin(SpriteFlags.SortTexture | SpriteFlags.AlphaBlend);
// Switching the order of following two statements doesn't change the Z-Order!
m_sprite.Draw(m_texture, Vector3.Empty, new Vector3(0, 0, 0),
Color.White.ToArgb());
m_d3dFont.DrawText(m_sprite, m_text, x, y, color);
m_sprite.End();
m_device.EndScene();
m_device.Present();
注:動作を変更しませんSpriteFlags.SortDepthBackToFrontまたはSpriteFlags.SortDepthBackToFrontを使用して
は、ここで現在のコードです。
これはおそらく私の考え方の誤解ですが、コードが有用であれば、C++やその他の言語を使用してアンマネージドDirectXでサンプルを受け入れることに感謝します。
事前に感謝します。
Drawメソッドには、layerDepth引数をとるオーバーロードがありますか? XNAのSpriteBatchはそうしているので、管理されているDirectXのスプライトがどちらかを持っていると思う。 – tafa
コメントありがとうございます。 Sprite.DrawとFont.DrawTextのどちらも、レイヤ深度引数を持ちません。 Sprite.Drawの2番目のVector3は3次元位置を指定しますが、Zを負にするとテクスチャがまったく表示されず、正にすることでオーバードローの動作が変更されません。 –