Xna 景深问题
我已经将景深着色器从XNA3.1转换为4.0。问题是,它完全耗尽了我的色彩,没有渲染任何其他东西。您可以在这里看到问题: 任何想法都将不胜感激 编辑 我认为最好也添加渲染方法:Xna 景深问题,xna,Xna,我已经将景深着色器从XNA3.1转换为4.0。问题是,它完全耗尽了我的色彩,没有渲染任何其他东西。您可以在这里看到问题: 任何想法都将不胜感激 编辑 我认为最好也添加渲染方法: public void PostProcess(GraphicsDevice device) { // Gaussian Blur Horizontal device.SetRenderTarget(this.GaussianHRT); device.Clear(Color.White); de
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)
等等)?深度贴图和模糊过程正确吗?我尝试过交换这些,但什么都没有得到。我现在渲染各个阶段以分离渲染目标,以帮助调试过程。