为什么使用D3DXFont :: DrawText的时候重复文本所呈现到不同的纹理的Z缓冲区?

StackOverflow https://stackoverflow.com/questions/1358896

  •  20-09-2019
  •  | 
  •  

我已经绊倒了一会儿,如果有人之前已经遇到了这个问题,不知道。

我工作中的应用被分成多个数据图,并在屏幕的底部的单一的时间表。每个小区(实际上是多个纹理层叠在彼此的顶部上),以及在时间线呈现到一个单独的纹理。时间轴纹理从屏幕的底部的顶部第一渲染,随后每个情节纹理。我使用DXUT和DirectX9的(2009年3月)。

添加时间文本到时间轴纹理后,我注意到,文本是在每个数据图的标题栏重复。这里的显示器的一部分的一个撷取画面,它显示了只是一个单一的情节,但是重复的文本上的每个情节打开:

“替代文字”

现在看来似乎是直接关系到DrawText的被称为在时间轴的渲染功能。我使用相对坐标的RECT传递给DrawText的,但因为我已经设置渲染目标所需的质地应该只影响当前的纹理。并不是每一个纹理渲染之后。

有没有人遇到类似这样使用D3DXFont什么问题?

修改:经过一些实验,它看起来像它有事情做与Z缓冲。通过添加D3DCLEAR_ZBUFFER到清晰的每个纹理表面,重复的文字消失了。虽然问题似乎绕过了现在,我还是好奇,为什么我的DrawText调用过程中被写入了一个完全独立的纹理Z缓存。

有帮助吗?

解决方案

在Z缓冲器状态是持久的。

例如,

SetDepthStencilSurface(X)
SetRenderTarget(A)
Draw()
SetRenderTarget(B)
Draw()

两个绘制调用将使用相同的深度缓冲器。

在DrawText的没有改变已设置的深度缓冲器。它假定你的意思是你做了什么。

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