1

我需要计算分配给从某个角度在屏幕上绘制给定对象时产生的像素的最小和最大 UV 值。例如,如果我有一个 UV 映射立方体,但只有正面可见,则 min(UV) 和 max(UV) 应设置为分配给可见面像素的最小和最大 UV 坐标。

我想使用 Direct3D 9 着色器(以及可能的最低着色器模型)来加快处理速度。顶点着色器可以像获取每个输入顶点的 UV 坐标并将它们未经修改地传递给像素着色器一样简单。另一方面,像素着色器必须采用顶点着色器产生的值并使用这些值来计算最小和最大 UV 值。

我想知道的是:

  1. 如何在像素着色器的调用之间保持状态(当前最小值和最大值)?
  2. 如何将着色器生成的最终最小值和最大值放入我的程序中?

有没有办法在 HLSL 中做到这一点,还是我坚持手工做?如果 HLSL 不起作用,那么在不使用着色器的情况下最有效的方法是什么?

4

1 回答 1

1

1)你没有。2)您必须在某个时候回读。这将是一个相当缓慢的过程并导致管道停顿。

一般来说,我想不出一个好的方法来做到这一点。你到底想用这个实现什么?可能还有其他方法可以达到您所追求的结果。

您“可能”能够使用多个渲染目标并将每个像素的 UV 写入渲染目标。然后你需要将渲染目标传回主内存,然后解析它的最小值和最大值。这是一个非常缓慢且非常丑陋的解决方案。

如果您可以将其作为几个单独的通道进行,您可能能够渲染到一个非常小的渲染目标,并使用 1 通道和 Max 和 1 通道和 Min alpha 混合操作。再次......不是一个很好的解决方案。

于 2010-09-05T20:49:02.350 回答