0

現在、WebGL2.0 を使用してディファード シェーディングに取り組んでいます。私が現在直面している主な問題の 1 つは、DEPTH_ATTACHMENT から深さの値を読み取れないことです。実際には、DEPTH24_STENCIL8 テクスチャを DEPTH_ATTACHMENT として使用して独自の GBuffer を作成し、このテクスチャをサンプラーにバインドして、次のような遅延シェーディング部分でフラグメント シェーダーの値を読み取ろうとします。

uniform sampler2D u_depthSampler;
vec4 depthValue = texture(u_depthSampler, v_uv);

次に、シェーディング フラグメント シェーダーで出力として depthValue を設定します。

layout(location = 0) out vec4 o_fragOut;
o_fragColor.xyz = depthValue.xyz;
o_fragColor.w = 1.0;

Firefox でこれを実行すると、エラーは報告されませんでしたが、出力色は純粋な赤です (これは vec3(1.0, 0.0, 0.0) を意味すると思います)。これは本当に私を混乱させます。誰でもいくつかの指示を提供できますか?glsl コードに問題はありますか? THX〜

4

2 に答える 2

1

深度バッファは線形ではありません。線形化するには、次の式を使用します。

float f = 1000.0; //far plane
float n = 1.0; //near plane
float z = (2.0 * n) / (f + n - texture2D( diffuse, texCoord ).x * (f - n));

gl_FragColor = vec4(z,z,z, 255)
于 2016-05-18T09:56:52.270 に答える
0

深度テクスチャが実際にはほぼ純粋な赤ですが、実際には赤ではないという大きな間違いを犯した可能性があります。私はこれを試しました:

float depthPow = pow(depthValue.x, 10.0);
o_fragOut.xyz = vec3(depthPow);

そして、私は思う正しい結果を得ます。

于 2016-05-18T07:53:51.290 に答える