【问题标题】:Artifacts when mapping screen coordinates to texture texels将屏幕坐标映射到纹理纹理时的伪影
【发布时间】:2015-11-02 03:53:18
【问题描述】:

好的,伙计们,所以我的问题很奇怪。我正在将纹理映射到四边形。纹理包含使用 Free Type 生成的字体值。当我将它渲染到屏幕上时,它有伪影。 “Hola, elienay, y Khaleexy”是渲染的四边形/纹理。

但是,当我进入着色器调试模式并查看纹理以了解为什么它有伪影时,我没有得到伪影。四边形完美渲染,后台缓冲区正确地具有最终颜色,没有 1 个单一的伪影;见下文。

好的,你们明白我在说什么了吗?四边形正在被渲染并完美地映射到纹理,但问题似乎在于应用程序将后台缓冲区呈现到屏幕时。关于这可能是由什么引起的以及如何解决它的任何想法?

下面是另外几个不同随机字符的屏幕截图。仅在未在调试模式下渲染场景时显示工件的呈现方式。

【问题讨论】:

  • 如果我不得不猜测,我会说您创建了一个与窗口一样大的交换链,而不是窗口的客户端大小。我的意思是,窗口本身包括一个小边框和标题栏,这些区域是您无法呈现的,因此您的交换链需要非常轻微地减小大小以适应客户矩形。尝试测量渲染目标的大小和可以渲染的窗口区域,看看它们是否完全匹配。
  • Adam 这简直是天方夜谭,但这是我检查的第一件事。事实上,我正在使用 AdjustWindowRectEx() 来获得客户区的正确大小。再一次,一个猜测的人。
  • 好吧,亚当。你是对的。我检查了这个,它应该可以正常工作,但是,在函数的底部,其他人继续编辑函数调用,并且传递了错误的参数。发表你的答案,我会接受的。

标签: directx directx-11


【解决方案1】:

根据第一条评论,交换链需要以客户端窗口矩形的大小而不是整个窗口(包括标题栏和边框)的大小创建。当创建的窗口过大几个像素时,Windows 需要将交换链重新缩放一个非常小的因子,这意味着您会失去预期的 1:1 像素精度。

【讨论】:

    猜你喜欢
    • 2019-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-29
    • 1970-01-01
    • 2022-01-21
    • 2015-07-12
    相关资源
    最近更新 更多