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

请求带有深度缓冲区的 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 回答
1

你激活深度测试了吗?

glEnable(GL_DEPTH_TEST);
于 2012-10-26T19:21:42.503 回答
0

你在使用顶点着色器吗?如果在顶点着色器的出口处 gl_Position.z 意外设置为 0,就会发生这种情况。或者我相信是 -1 和 1 之间的任何值。

如果所有顶点在输入阶段之前具有相等的 z 值,也会发生这种情况,尽管在这种情况下您的转换矩阵一定有问题。或者只是你可能正在用你的转换矩阵做一些非常奇特的事情,并且模型很好。您是否同时设置了 MODELVIEW 和 PROJECTION,并相应地将它们相乘?在顶点着色器中还是在 FFP 中?

于 2013-02-11T22:37:28.830 回答