1

我正在做一个模拟器视觉效果,其中有很多代表模拟元素的 2D 图标,并且我有一个代表另一个更重要元素的 3D(使用 Blender 制作的.x)图标。

我需要在其他二维图标(.tga)之上制作这个,但我找不到制作这个的方法。Direct x 是否可以在其余 2d 图标上绘制 3d 图标?此时,2D 图标总是出现在 3D 之上。

请有人帮我解决这个问题。我正在用 C++ 编程 非常感谢。

4

2 回答 2

0

渲染 2D 图标时禁用 Z 写入。当您在启用 Z-writes 的情况下渲染 3D 图标时,它将渲染 2D 图标。

您目前的问题是,当您渲染 2D 图标时,您使用的是 z 缓冲区前面的 z 值(很可能是 0)。您可能还会发现您可以将 z 值设置为 1(这很可能,这完全取决于您如何设置 2D 渲染)以强制 2d 图标在 z 缓冲区的后面渲染。

Z 缓冲区中没有条目相当于它位于 Z 顺序的后面。

于 2011-03-07T11:45:04.733 回答
0

假设您启用了深度缓冲,您需要确保图标的 Z 值距离您的相机比您的模型更远。如果您使用的是 ID3DXSprite,您应该能够在调用 Draw 函数时指定 Z 位置,或者使用ID3DXSprite::SetTransform()函数。

请注意,ID3DXSprite 可能会使用与模型不同的投影矩阵来绘制精灵,具体取决于您传递给 ID3DXSprite::Begin() 的标志。您可能想要使用D3DXSPRITE_OBJECTSPACE标志。

于 2011-03-07T11:45:47.347 回答