我有一个640x480 rendertarget(它的主要backbuffer)。全屏四像素着色器有屏幕坐标吗?
即时传递一个全屏四边形顶点着色器,全屏四具有[-1,1]为X和Y,这意味着,我只通过坐标转换的像素着色器,没有计算坐标之间:
struct VSInput
{
float4 Position : SV_POSITION0;
};
struct VSOutput
{
float4 Position : SV_POSITION0;
};
VSOutput VS(VSInput input)
{
VSOutput output = (VSOutput)0;
output.Position = input.Position;
return output;
}
,但是,从像素着色器,所述x和y坐标的每个片段的屏幕空间(0 < X < 640和0 <ÿ< 480)。 这是为什么?我一直认为坐标将在插值到像素着色器的途中插入到-1,1之间,在这种情况下更是如此,因为我在顶点着色器上硬编码了-1和1之间的坐标。
但事实是,这个像素着色器的工作原理:
float x = input.Position.x;
if(x < 200)
output.Diffuse = float4(1.0, 0.0, 0.0, 1.0);
else if(x > 400)
output.Diffuse = float4(0.0, 0.0, 1.0, 1.0);
else
output.Diffuse = float4(0.0, 1.0, 0.0, 1.0);
return output;
它输出我的呈现窗口上3周色的条纹,但如果我改变从屏幕空间(从上面的代码中的200和400)将这些值-1,1空格,并使用类似if(x < 0.5)它不会工作。
我已经尝试过
浮子X = input.Position.x/input.Position.w;
因为我读的地方,我可以得到-1,1之间的值,但它也不工作。
在此先感谢。
非常感谢,这完美地工作,并没有顶点缓冲区需要它,甚至更好。 – sap