J'utilise managed DirectX pour essayer de dessiner une texture et un morceau de texte à l'écran en utilisant un Sprite. Malheureusement, si je place le texte et la texture dans le même sprite, la texture écrase (décompose?) Le texte sans tenir compte de l'ordre des commandes de dessin.Managed DirectX: Spécification de la profondeur (ordre Z) des sprites contenant la texture et le texte
Puisque je vais éventuellement vouloir intercaler des textures et du texte, comment puis-je spécifier un ordre Z pour ces sprites. Chaque couche doit-elle être dans un sprite distinct?
Voici le code actuel:
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();
Remarque: L'utilisation du SpriteFlags.SortDepthBackToFront ou SpriteFlags.SortDepthBackToFront ne change pas le comportement. Ceci est probablement un malentendu conceptuel de ma part, mais si le code est utile, j'accepterai avec gratitude les échantillons dans DirectX non managé en utilisant C++ ou tout autre langage.
Merci beaucoup d'avance!
La méthode Draw a-t-elle une surcharge qui prend un argument layerDepth? Comme le fait SpriteBatch de XNA, je pense que l'image-objet de DirectX gérée aurait l'un ou l'autre. – tafa
Merci pour le commentaire. Ni Sprite.Draw ni Font.DrawText ont un argument de profondeur de calque. Le deuxième Vector3 dans le Sprite.Draw spécifie une position 3d, mais en faisant le Z négatif, la texture n'apparaît pas du tout, et la rendre positive ne change pas le comportement de l'overdraw. –