2

OpenGL を使用してウェーブフロント obj ファイルを描画しようとしていますが、深度バッファの問題があるようです。

問題

ソース:

// Default constructor
Engine::Engine()
{
    initialize();
    loadModel();    
    start();
}

// Initialize OpenGL
void Engine::initialize()
{     
    // Enable depth test
    glEnable(GL_DEPTH_TEST);
    // Enable depth write
    glDepthMask(GL_TRUE);
}

void Engine::start()
{
    // Main loop
    while(isOpen())
    {
        glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

        // Draw 3D model to screen
        draw();
    }
}
4

4 に答える 4

2

確認事項:

  • 深度テストが有効になっていることを確認してくださいglEnable(GL_DEPTH_TEST)
  • 深度書き込みが有効になっていることを確認してくださいglDepthMask(true)
  • コンテキストに深度バッファがあることを確認してくださいAssert(glGetIntegerv(GL_DEPTH_BITS) != 0))
于 2012-10-26T19:20:28.403 に答える
1

深度テストを有効にしましたか?

glEnable(GL_DEPTH_TEST);
于 2012-10-26T19:21:42.503 に答える
1

深度バッファと を持つ GL コンテキストを要求しますglEnable(GL_DEPTH_TEST)

これを試して:

mainWindow.create
    (
    sf::VideoMode
        (
        settings.getWidth(), 
        settings.getHeight()
        ), 
    "", 
    sf::Style::Resize,
    sf::ContextSettings( 16, 0, 0, 2, 0 )
    );
于 2012-10-26T19:20:50.937 に答える
0

頂点シェーダーを使用していますか? これは、頂点シェーダーの終了時に gl_Position.z が誤って 0 に設定された場合に発生します。または、-1 から 1 の間の任意の値に設定されていると思います。

この場合、変換行列に何か問題があるに違いありませんが、入力ステージの前にすべての頂点の z 値が等しい場合にも発生します。または、単純に、変換行列で非常に風変わりなことをしている可能性があり、モデルは問題ありません。MODELVIEW と PROJECTION の両方を設定し、それに応じて乗算しましたか? 頂点シェーダーまたは FFP のどちらで?

于 2013-02-11T22:37:28.830 に答える