【发布时间】:2011-09-12 12:09:45
【问题描述】:
我正在使用托管 DirectX 尝试使用 Sprite 将纹理和一段文本绘制到屏幕上。不幸的是,如果我将文本和纹理放在同一个精灵中,则无论我执行绘制命令的顺序如何,纹理都会覆盖(过度绘制?)文本。
由于我最终想要散布纹理和文本,我如何为这些精灵指定 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 的精灵也有。
-
感谢您的评论。 Sprite.Draw 和 Font.DrawText 都没有图层深度参数。 Sprite.Draw 中的第二个 Vector3 确实指定了 3d 位置,但是将 Z 设为负会导致纹理根本不出现,将其设为正不会改变过度绘制行为。
标签: c# directx sprite managed-directx