1

如何在 PixelShaderFunction HLSL 中手动设置像素在纹理中的最终位置?理想情况下,我希望 GPU 遵循下一个逻辑:

  1. 不按特定顺序逐个写入像素。意思是每当第一个像素出现时,将其写入纹理的左上角。将第二个写在第一个的右边,第三个写在第一个的右边,以此类推。
  2. 当您到达行尾时 - 转到下一行。
  3. 当你到达纹理的末端时 - 删除所有剩余的像素。

谢谢。

我觉得我可以通过在顶点着色器级别手动计算我的像素所需的位置来做到这一点。如果我能更好地理解像素定位的工作原理,我也许可以把它拉出来。如果我有一个渲染目标 2000*4。如何在顶点着色器级别确保我的像素最终位于第二行?

如果我的 RenderTarget 是一个高度 = 1 的纹理,我可以不用计算位置吗?或者我是否冒着通过像素合并丢失数据的风险?我打算在屏幕上一一画出长线,并清除中间的目标。

4

1 回答 1

0

基本上你不能做你所描述的。

在顶点着色器之后,GPU 有一组要绘制的三角形。它在渲染目标(可能是后缓冲区)上逐个像素地填充它们。作为这个填充过程的一部分——确定每个像素的颜色——你的像素着色器被调用(像一个函数)来填充那个特定的像素。此时没有“移动”输出像素的能力。

可以做的是在从像素着色器中的纹理采样时将纹理坐标参数调制为tex2D( MSDN )。您可以应用任何有意义的功能来实现您想要的结果。

或者,如果变换很简单,您可以简单地在顶点数据中或使用顶点着色器适当地设置纹理坐标。

于 2013-07-26T15:43:57.833 回答