パートナーと私は OpenGL の小さなデモに取り組んでいます。単純なシャドウ マッピングを行っています。彼は ATI と Intel HD グラフィックス 4000 を使用しており、すべて正常に動作しています。私は GTX 560 TI を使用しており、同じコードを使用していますが、影にきびが発生します。
私が動いているとき、影全体がちらつきます。フレームバッファの深度バッファを設定するには、次のようにします。
glBindTexture(GL_TEXTURE_2D,_t_depth->name());
glTexImage2D(
GL_TEXTURE_2D,0,
GL_DEPTH_COMPONENT32,
width,height,
0, GL_DEPTH_COMPONENT, GL_FLOAT,0);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_CLAMP_TO_EDGE);
glBindTexture(GL_TEXTURE_2D,0);
glFramebufferTexture(GL_FRAMEBUFFER,GL_DEPTH_ATTACHMENT,_t_depth->name(),0);
頂点シェーダーの関連部分は次のとおりです。
uniform mat4 u_lightspace_MVP;
layout(location=0) in vec3 v_position;
...
vec4 shadowcoord_x=u_lightspace_MVP*vec4(v_position,1.0);
shadowcoord_x/=shadowcoord_x.w;
フラグメント シェーダーの関連部分は次のとおりです。
if (texture(s_shadowMap,shadowcoord_x.xy).r>shadowcoord_x.z-0.0001)
さまざまなバイアス値を試しましたが、にきびに影響しないか、影がまったくありません。また、ルックアップ関数として textureProj() および texture() で sampler2DShadow を使用しようとしました。何も機能していないようです。この問題は、シャドウだけでなく、シャドウマップも使用されるボリューム ライティング エフェクトにも影響します。一方、gl_ClipDistance を使用したクリッピングは、私の Nvidia では正常に機能しますが、彼のグラフィック カードでは機能しません。