2

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

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

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

4

2 回答 2

0

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

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

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

于 2013-07-13T02:37:33.120 回答
0

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

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

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

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