2

シャドウ マップを機能させようとしてきましたが、その深度バッファー部分を通過することさえできません。私は何時間もインターネットで見てきました、やだやだだ。これまでの私のコードは次のとおりです-

FBO と深さのテクスチャを作成します。

GLuint framebuffer;
    GLuint depth;
    GLuint texture;

    glGenFramebuffers(1, &framebuffer);
    glBindFramebuffer(GL_FRAMEBUFFER, framebuffer);

    glGenTextures(1, &texture);
    glBindTexture(GL_TEXTURE_2D, texture);

    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, 1280, 800, 0, GL_RGBA, GL_FLOAT, NULL);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_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);


    glGenTextures(1, &depth);
    glBindTexture(GL_TEXTURE_2D, depth);

    glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, 1280, 800, 0, GL_DEPTH_COMPONENT, GL_FLOAT, NULL);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);

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




    glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, depth, 0);
    //glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texture, 0);
    glDrawBuffer(GL_NONE);


    if (glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE)
        std::cout << "There was a problem with making the framebuffer\n";
    glBindFramebuffer(GL_FRAMEBUFFER, 0);

    return framebuffer;

表示用に「深さ」をクワッドにレンダリングします。

 glBindFramebuffer(GL_FRAMEBUFFER, FBO);
   glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

   for (int i = 0; i < objects.size(); i++)
   {
    objects[i].renderObjectForDepth();
   }
   glBindFrameBuffer(GL_TEXTURE_2D,0);
   glBindTexture2D(GL_TEXTURE_2D, texture)
   drawQuad();

そして、私にはすべて問題ないように見えますが、添付の写真のような画像が生成されます。私は何日も髪を引き裂いてきましたが、助けていただければ幸いです.

編集: 空白のテクスチャをレンダリングしていたためです。つまり、書き込まれたことのないテクスチャの色です。深度テクスチャを描画し、カラー テクスチャを書き込むと、問題なく動作します。しかし、カラーテクスチャなしでどうやってそれを行うのですか?

「レンダリング中の深度バッファ」

4

1 に答える 1

2

深度のみの FBO にレンダリングするときに、次の 2 つの状態が設定されていることを確認します。

glDrawBuffer(GL_NONE);
glReadBuffer(GL_NONE);
于 2013-08-05T15:31:24.560 に答える