我已将深度场着色器从XNA 3.1转换为4.0。问题是,它完全耗尽了我的颜色而没有渲染任何其他东西。你可以在这里看到问题:
Project Vanquish - Depth of Field issue
任何想法都会非常感激。
修改
我认为最好也添加Render方法:
public void PostProcess(GraphicsDevice device)
{
// Gaussian Blur Horizontal
device.SetRenderTarget(this.GaussianHRT);
device.Clear(Color.White);
device.SetRenderTarget(null);
this.SetBlurEffectParameters(1.0f / this.device.Viewport.Width, 0);
this.DrawQuad(this.resolveTarget, this.gaussianBlur.Effect);
// Gaussian Blur Vertical
device.SetRenderTarget(this.GaussianVRT);
device.Clear(Color.White);
device.SetRenderTarget(null);
this.SetBlurEffectParameters(0, 1.0f / this.device.Viewport.Height);
this.DrawQuad(this.GaussianHRT, this.gaussianBlur.Effect);
// Render result
device.Textures[0] = this.resolveTarget;
device.Textures[1] = this.GaussianVRT;
device.Textures[2] = this.depthRT;
this.DrawQuad(this.resolveTarget, this.combine.Effect);
// Reset RenderStates
this.ResetRenderStates();
}
通过将其输出到单独的RenderTargets,我可以看到一些潜在的问题,但我无法理解为什么我得到一个空白的RenderTarget,即使我在渲染所有场景之前设置了resolveTarget RenderTarget
。然后在渲染场景后渲染。
答案 0 :(得分:0)
你是说你把它移植到xna 4行,它现在表现出这种行为,或者你做了代码更改?我的意思是,它看起来像像素着色器只是返回无效的颜色值。
你可以给我们一些关于你的着色器3.1中改变了什么的细节 - > 4?
编辑:走下不同的思路......你会看到黑色渲染的另一个原因就是照明。我会仔细检查并确认所有的光参数都被传递到着色器,并且它们正在相应地进行计算。
答案 1 :(得分:0)
在设置纹理之前调用DrawQuad函数;这应该导致绑定到组合着色器输入的无效纹理。
这里还有许多其他问题可能会出错,但这是最可能的嫌疑人。
答案 2 :(得分:0)
在我设置DepthBuffer之前的函数中存在问题。谢谢你的帮助。