我正在使用托管DirectX尝试使用Sprite在屏幕上绘制纹理和一段文本。不幸的是,如果我将文本和纹理放在同一个精灵中,则无论我执行绘制命令的顺序如何,纹理都会覆盖(覆盖?)文本。

由于我最终将要散布纹理和文本,因此如何为这些精灵指定Z顺序。每个图层都必须位于单独的子画面中吗?

这是当前代码: 通用标签

注意:使用SpriteFlags.SortDepthBackToFront或SpriteFlags.SortDepthBackToFront不会更改行为。

这在我看来可能是一个概念上的误解,但是如果代码有用,我将非常感激地接受使用C ++或任何语言的非托管DirectX中的示例。

非常感谢!

有帮助吗?

解决方案

如果要更改渲染的Z顺序,则必须在Draw命令中设置Z值。如果将all设置为0,您将得到各种各样的怪异。您更大的问题是DrawText不允许您设置所有垃圾的Z深度。

因此,您唯一的机会就是使用ID3DXSprite :: SetTransform。对于相关的z排序位置,只需将Z坐标向后移动。因此,您可以如下设置转换(假设您正在使用身份世界矩阵)(C ++示例) 通用标签

然后继续传递(0,0,0)的位置进行渲染,文本也将获得正确的深度以进行z排序。

希望有帮助。

其他提示

这是我(张贴者)提出的答案:

Goz提供了解决问题所需的大多数信息。本质上,对于纹理,可以使用第二个Verctor3的第三个参数指定z顺序。实验已经清楚地表明,(1)z阶从0.0到1.0,最接近的是0.0,最远的是1.0。超出该范围的任何东西都不会出现。

对于文本,由于没有机会在调用中指定z,因此需要使用Goz建议的变换矩阵。

最后,这大概是我使用的代码。 通用标签

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top