0

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

4

1 回答 1

0

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

您的下载链接不起作用,因为我怀疑它已经 2 年了。

您应该确保您的像素着色器同时返回COLOR0语义COLOR1(请注意,float4尽管输出是单通道纹理,但深度是 a):

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

根据您的相机设置,您可能会得到如下信息:

在此处输入图像描述

于 2012-07-10T18:38:17.710 回答