深度缓冲区仅显示蓝色

时间:2010-07-07 04:43:21

标签: graphics rendering depth-buffer

我正在尝试在RenderMonkey中实现Light Prepass渲染。到目前为止,在Normal + Depth pass中,似乎Normal缓冲区获得了正确的结果,但Depth缓冲区只显示了一种颜色。如何检查我的深度缓冲区是否正确? 工作区下载链接:http://www.mediafire.com/?jq3jmantyxw

1 个答案:

答案 0 :(得分:0)

浅蓝色实际上是RGB值0.0, 1.0, 1.0。由于深度(通常)是表示Z的单个通道,因此当从纹理采样时,它在第一个通道中返回红色。缺少通道绿色,蓝色和alpha将被硬件替换为1.0。

您的下载链接无法正常运行,因为我怀疑这是2年了。

你应该确保你的像素着色器返回COLOR0COLOR1语义(注意深度是float4,尽管输出是单通道纹理):

struct PS_OUT { float4 color : COLOR0; float4 depth : COLOR1; };

PS_OUT ps_main( PS_INPUT Input )
{
    PS_OUT Output;
    // your color shader here
    Output.color = myFinalColor;
    Output.depth = myFinalDepth;  // e.g. Input.posz / Input.posw from your vertex shader
    return Output;
}

根据您的相机设置,您可以获得以下内容:

enter image description here