HLSL设置像素着色器中的像素位置,以控制像素在纹理中的最终位置

时间:2013-07-26 07:42:50

标签: position set shader pixel hlsl

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

  1. 按特定顺序逐个写入像素。意味着每当第一个像素出现时,将其写入纹理的左上角。在第一个的右边写第二个,在第一个的右边写第三个,依此类推。
  2. 当你到达终点时 - 转到下一行。
  3. 当你到达纹理的末尾时 - 丢弃所有剩余的像素。
  4. 感谢。

    我觉得我可以通过在顶点着色器级别手动计算像素所需的位置来实现。如果我能更好地理解像素定位的工作方式,我可以将它拉出来。如果我有一个渲染目标2000 * 4。如何在顶点着色器级别确保我的像素将在第二行结束?

    如果我的RenderTarget是一个高度为1的纹理,我怎么能不计算位置呢?或者我冒险通过像素合并丢失数据?我打算在屏幕上画一条长线,一个接一个地清除目标。

1 个答案:

答案 0 :(得分:0)

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

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

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

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

相关问题