【问题标题】:How to know which triangle contribute to the color of a pixel?如何知道哪个三角形有助于像素的颜色?
【发布时间】:2013-07-13 21:25:57
【问题描述】:

我在图形和 DX 方面完全是新手,遇到了问题,而且我周围没有人也知道图形。对不起,如果这个问题看起来太天真了。

我使用 DirectX 11 渲染网格,我想为每个像素获取一个缓冲区。此缓冲区应存储为该像素提供颜色的所有三角形的链表(或其他结构)。

我应该对哪个着色器或 DX 的哪个部分进行操作?或者简单地说,我在哪里可以得到像素着色器中的三角形信息?

【问题讨论】:

  • 简单的答案是:将 ID 添加到您的顶点属性(三角形中的每个顶点应该具有相同的值 - '多边形 id' 以便它们在插值过程中不会改变)并通过顶点传递它们着色器到像素着色器,如果需要,您可以在其中使用它。
  • 这是用于调试目的还是您在运行时需要的东西?

标签: graphics directx


【解决方案1】:

您可以在像素着色器中写入三角形 ID,但使用硬件 z 缓冲区您只能在每个像素中捕获一个三角形。

使用多重采样纹理,您可以捕捉更多三角形。这在实际情况下应该足够了。

如果您的三角形非常小并且其中许多在一个像素内可见,那么您应该考虑使用您自己的隐藏表面去除算法的A-Buffer

【讨论】:

    【解决方案2】:

    如果您仅出于调试目的需要它,您可以使用任何图形调试器:

    1. Visual Studio 图形调试器(自 Visual Studio 2012 起集成)
    2. 对于 AMD GPU:GPUPerfStudio
    3. 对于 NVidia GPU:Nsight
    4. 来自 DX SDK 的旧 PIX。

    如果您在运行时需要它(顺便说一句,为什么?=))

    • 使用System-Generated Values: VertexIDPrimitiveIDSV_VertexID 计算对像素颜色有贡献的精确基元甚至顶点。这很棘手,但有可能。
    • 另一种方法是在顶点声明中使用某种自定义三角形 ID。但请注意剔除。
    • 您可以将像素着色器中的最终数据输出到buffer,然后在 CPU 上读取。
    • 所有这些问题都是 DirectX 中相当高级的主题。我不确定“图形和 DX 中的全新”编码器是否可以解决它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多