我需要一个简单的着色器代码才能与我的XNA应用程序一起使用,它只是将一个给定的纹理绘制到屏幕上。基本上,我正在尝试进行后期处理,但我的目标是不应用任何后期处理效果,但只是将纹理显示为自身..
我尝试了以下像素着色器代码,但我遇到了一些问题(如下所述):
sampler textureSampler;
float4 PostProcessingPS(float2 texCoord: TEXCOORD0, float4 Position : POSITION0) : COLOR0
{
float4 color = tex2D(textureSampler,texCoord);
return color;
}
technique PostProcessingEffect
{
pass Pass1
{
PixelShader = compile ps_2_0 PostProcessingPS();
}
}
我得到的问题是没有绘制整个纹理..由于某种原因只绘制边框?甚至关于边框,我不确定它们是否被正确绘制..我只是说它们被绘制,因为那里的像素值随着场景本身的变化而变化..
这应该是这样的:
这就是我所看到的:
有什么想法吗?
答案 0 :(得分:0)
我最好的建议是在绘图代码中显示纹理。为什么不能在应用程序中而不是像素着色器中执行此操作?
如果您真的想要使用像素着色器,则需要提供更多代码。绘制的内容取决于纹理坐标,所以我需要看到你的绘图代码来回答这个问题。
答案 1 :(得分:0)
你是如何绘制全屏四核的?您可能使顶点绕组与当前剔除模式相反,因此三角形被背面剔除。您可以使用XNA 3.x中的GraphicsDevice.RenderState.CullMode = CullMode.None或4.0中的GraphicsDevice.RasterizerState = RasterizerState.CullNone来检查这一点。
您在屏幕中心看到的对角线是因为您缺少半像素偏移以正确地将纹素与屏幕上的像素对齐。当您将它们从顶点着色器传递到像素着色器时尝试向顶点位置添加偏移,如下所示:
Position.x - = 1.0 / ViewportSize.x;
Position.y + = 1.0 / ViewportSize.y;
其中ViewportSize包含视口的像素尺寸,例如(1024,768)。