Xna 景深问题

Xna 景深问题,xna,Xna,我已经将景深着色器从XNA3.1转换为4.0。问题是,它完全耗尽了我的色彩,没有渲染任何其他东西。您可以在这里看到问题: 任何想法都将不胜感激 编辑 我认为最好也添加渲染方法: public void PostProcess(GraphicsDevice device) { // Gaussian Blur Horizontal device.SetRenderTarget(this.GaussianHRT); device.Clear(Color.White); de

我已经将景深着色器从XNA3.1转换为4.0。问题是,它完全耗尽了我的色彩,没有渲染任何其他东西。您可以在这里看到问题:

任何想法都将不胜感激

编辑

我认为最好也添加渲染方法:

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();
}

通过将其输出到单独的渲染目标,我可以看到一些潜在的问题,但我无法理解为什么在渲染所有场景之前设置了
resolveTarget RenderTarget
,却得到了一个空白的渲染目标。然后在场景渲染后进行渲染。

您是说您将它逐行移植到xna 4,现在它显示了这种行为,还是您进行了代码更改?我的意思是,在我看来,像素着色器只是返回无效的颜色值

你能给我们一些关于你的着色器从3.1->4的变化的细节吗


编辑:走另一条思路。。。另一个原因是,你会看到像这样的黑色渲染是围绕照明。我将仔细检查并验证所有灯光参数是否都已传递到着色器中,以及它们是否正在相应地计算。

在设置纹理之前调用DrawQuad函数;这将导致绑定到组合着色器输入的无效纹理


这里还有许多其他可能出错的地方,但这是最有可能出现的问题。

在此之前,我在函数中设置了DepthBuffer。谢谢你的帮助。

当然可以。我已经准备好了一个后处理器,这个很好用。然后我尝试实现DoF,但得到了无效的颜色。它看起来应该像模糊图像下面的图像,但模糊效果很好。但我想我想说的是,你让它看起来像是以前在3.1下工作过,但在4.0中不再工作。这表明“港口”发生了一些变化。我是否正确理解了这一点,或者这个特定的着色器从未工作过。。。我之所以问这个问题,是因为它改变了故障排除技术:-)好的,所以在进一步的调查中,因为旧的XNA 3.1代码使用了
basicefect
,他们使用了
EnableDefaultLighting()
。我不能使用它,因为我的
着色器
现在是一个新类。你能缩小它的范围吗(通过将联合过程设置为
tex2D(positionSampler)
,然后
tex2D(blurSampler)
等等)?深度贴图和模糊过程正确吗?我尝试过交换这些,但什么都没有得到。我现在渲染各个阶段以分离渲染目标,以帮助调试过程。