0

小さな 3D エンジンにシャドウ マッピングを実装しています。ただし、深度テクスチャにアーティファクトがあるようです。これは、テクスチャを使用して影を観察するか、クワッドに深度テクスチャを描画することで確認できます。

クワッドに描画されたときの深度テクスチャは次のようになります。

はい、それらの小さな白い四角形はそこにあるべきではありません。

それで、それを引き起こしている可能性があるのは何ですか?

glfw ウィンドウを開く:

glfwOpenWindowHint(GLFW_OPENGL_VERSION_MAJOR, 4);
glfwOpenWindowHint(GLFW_OPENGL_VERSION_MINOR, 0);
glfwOpenWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
glfwOpenWindow(width, height,
               8, 8, 8, 8,
               24, 0, // 24 = depth buffer bits
               GLFW_WINDOW);

深度フレーム バッファとテクスチャの作成:

glGenFramebuffers(1, &depth_framebuffer_);

glGenTextures(1, &depth_texture_);
glBindTexture(GL_TEXTURE_2D, depth_texture_);
glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, 512, 512, 0, GL_DEPTH_COMPONENT, GL_FLOAT, 0);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);

glBindFramebuffer(GL_FRAMEBUFFER, depth_framebuffer_);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, depth_texture_, 0);

glDrawBuffer(GL_NONE);

if (glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE)
  exit(-1);

深度テクスチャへのレンダリング:

glBindFramebuffer(GL_FRAMEBUFFER, depth_framebuffer_);
glClear(GL_DEPTH_BUFFER_BIT);
render_objects();
glBindFramebuffer(GL_FRAMEBUFFER, 0);
4

1 に答える 1

1

それで、それを引き起こしている可能性があるのは何ですか?

私にはハードウェアの問題のように見えます。メモリ障害のために同様のパターンを示す「死んだ」グラフィックス カードが 2 枚あります。壊れたはんだパッドとグラフィックカードをリフローはんだオーブンに数秒間入れるだけで、問題を解決できます。GPU メモリ コントローラーが故障している可能性もあります。

于 2012-12-24T14:12:27.357 に答える