【发布时间】:2012-11-28 07:51:56
【问题描述】:
我有一个 640x480 的渲染目标(它的主后缓冲区)。
我将全屏四边形传递给顶点着色器,全屏四边形的 X 和 Y 坐标都在 [-1,1] 之间,这意味着我只将坐标传递给像素着色器而不进行计算:
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
但事实是,这个像素着色器可以工作:
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
我已经试过了
float x = input.Position.x / input.Position.w;
因为我在某处读到这样我可以获得 -1,1 之间的值,但它也不起作用。
提前致谢。
【问题讨论】: