1

単純な三角形を描画するプログラムを作成し、VAO、VBO、および GLSL シェーダーを使用します。結果は次のとおりです。

ここに画像の説明を入力

しかし、以下を使用して深度テストを有効にすると:</p>

glEnable(GL_DEPTH_TEST)

ウィンドウには何も表示されません。

ここで、プログラムのコードをいくつか投稿します。

float positionData[] = {
    -0.8f, -0.8f, 0.0f,
    0.8f, -0.8f, 0.0f,
    0.0f,  0.8f, 0.0f };
float colorData[] = {
        1.0f, 0.0f, 0.0f,
        0.0f, 1.0f, 0.0f,
            0.0f, 0.0f, 1.0f };
void initVBO()
{
    // Create and populate the buffer objects
    GLuint vboHandles[2];
    glGenBuffers(2, vboHandles);
    GLuint positionBufferHandle = vboHandles[0];
    GLuint colorBufferHandle = vboHandles[1];

    glBindBuffer(GL_ARRAY_BUFFER,positionBufferHandle);
    glBufferData(GL_ARRAY_BUFFER,9 * sizeof(float),
        positionData,GL_STATIC_DRAW);

    glBindBuffer(GL_ARRAY_BUFFER,colorBufferHandle);
    glBufferData(GL_ARRAY_BUFFER,9 * sizeof(float),
        colorData,GL_STATIC_DRAW);

    glGenVertexArrays(1,&vaoHandle);
    glBindVertexArray(vaoHandle);

    glEnableVertexAttribArray(0);
    glEnableVertexAttribArray(1);

    glBindBuffer(GL_ARRAY_BUFFER, positionBufferHandle);
    glVertexAttribPointer( 0, 3, GL_FLOAT, GL_FALSE, 0, (GLubyte *)NULL );

    glBindBuffer(GL_ARRAY_BUFFER, colorBufferHandle);
    glVertexAttribPointer( 1, 3, GL_FLOAT, GL_FALSE, 0, (GLubyte *)NULL );
}

void display()
{
    glClear(GL_COLOR_BUFFER_BIT);

    glBindVertexArray(vaoHandle);
    glDrawArrays(GL_TRIANGLES,0,3);
    glBindVertexArray(0);

    glutSwapBuffers();
}

私の質問は、深度テストを有効にした後に三角形を描画できないのはなぜですか?

4

2 に答える 2

5

通常、レンダリング時に使用される複数の(タイプの)バッファがあります。1つはカラーバッファで、ピクセルデータがピクセル形式で含まれています(つまり、各カラーチャネルに8ビットのRGB)。使用されるもう1つの典型的なバッファーは、デプスバッファーです。デプステストとデプスバッファへの書き込みは、2つの異なるものです。デプステストは、ピクセルからのデプス値をデプスバッファ内の関連するピクセルのデプス値と照合し、ピクセル/フラグメントを受け入れるか拒否するかを決定します。デプス書き込みは、実際にはその値をデプスバッファなどのバッファに書き込みます。

プログラムはおそらくデプスバッファに書き込み、デプスバッファをテストしますが、デプスバッファをクリアすることはないため、カラーバッファがクリアされていても、そこに/であるものがすでに書き込まれていると考えられます。書き込もうとしているピクセルの前面(または構成されているもの)であるため、それらは拒否されます。

通常、フレームごとに深度バッファをクリアします。GL_DEPTH_BUFFER_BITこれを行うには、フラグをに渡しglClearます。

于 2012-09-18T03:53:40.803 に答える
4

デプスバッファも明示的にクリアする必要があります。

        glClear(GL_COLOR_BUFFER_BIT |
                GL_DEPTH_BUFFER_BIT)
于 2012-09-18T02:49:26.830 に答える