我需要计算分配给从某个角度在屏幕上绘制给定对象时产生的像素的最小和最大UV值。例如,如果我有一个UV映射的立方体但只有前面可见,则应将min(UV)和max(UV)设置为分配给可见面像素的最小和最大UV坐标。
我想使用Direct3D 9着色器(以及可能的最低着色器模型)来加速处理。顶点着色器可以像获取每个输入顶点的UV坐标并将其未经修改地传递给像素着色器一样简单。另一方面,像素着色器必须采用顶点着色器生成的值,并使用这些值计算最小和最大UV值。
我想知道的是:
在HLSL中有没有办法做到这一点,还是我坚持用手工做?如果HLSL不起作用,那么在不使用着色器的情况下最有效的方法是什么?
答案 0 :(得分:1)
1)你没有。 2)你必须在某个时候做回读。这将是一个相当缓慢的过程,并导致管道停滞。
总的来说,我想不出一个好方法。你究竟想要用这个来实现什么?可能还有其他方法可以实现您所追求的结果。
你“可能”能够使用多个渲染目标并将每个像素的UV写入渲染目标。然后,您需要将渲染目标传递回主内存,然后解析它的最小值和最大值。这是一个非常缓慢且非常丑陋的解决方案。
如果你可以做几个单独的传球你可以渲染到一个非常小的渲染目标,并使用1传球与最大和1传球与最小阿尔法混合操作。再次......不是一个好的解决方案。