C# 需要一个简单的像素着色器代码,只需将输入纹理绘制到屏幕(视口)
我需要一个简单的着色器代码与我的XNA应用程序一起使用,它只是将给定的纹理绘制到屏幕上。。从本质上说,我试图进行后处理,但我的目标是不应用任何后处理效果,而只是将纹理本身显示出来 我尝试了以下像素着色器代码,但遇到了一些问题(解释如下): 我遇到的问题是,整个纹理都没有绘制。。只是因为某些原因才划定边界?!即使是关于边界,我也不确定是否正确绘制了边界。。我只是说它们被绘制是因为那里的像素值随着场景本身的变化而变化 应该是这样的: 这就是我所看到的:C# 需要一个简单的像素着色器代码,只需将输入纹理绘制到屏幕(视口),c#,xna,shader,C#,Xna,Shader,我需要一个简单的着色器代码与我的XNA应用程序一起使用,它只是将给定的纹理绘制到屏幕上。。从本质上说,我试图进行后处理,但我的目标是不应用任何后处理效果,而只是将纹理本身显示出来 我尝试了以下像素着色器代码,但遇到了一些问题(解释如下): 我遇到的问题是,整个纹理都没有绘制。。只是因为某些原因才划定边界?!即使是关于边界,我也不确定是否正确绘制了边界。。我只是说它们被绘制是因为那里的像素值随着场景本身的变化而变化 应该是这样的: 这就是我所看到的: 有什么想法吗?我最好的建议是在绘图代码中显
有什么想法吗?我最好的建议是在绘图代码中显示纹理。为什么不能在应用程序中而不是在像素着色器中执行此操作
如果你真的想做像素着色器,你需要提供更多的代码。绘制的内容取决于纹理坐标,因此我需要查看您的绘制代码来回答此问题。您如何绘制全屏四边形?顶点缠绕可能与当前消隐模式相反,因此三角形将被背面消隐。您可以使用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包含视口的像素尺寸(例如1024768)。我建议使用PIX(在DirectX SDK中)来确定场景的错误。看起来您已经打开了线框渲染,或者您的模型、变换或顶点着色器有问题。我不知道您的位置参数代码是用于什么的,但是您的其他代码会有所帮助。尝试将蓝色作为静态颜色返回,以确保正在使用着色器,然后尝试使用纹理坐标返回颜色,而不使用纹理帮助诊断。
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();
}
}