3D模型看起来像透明

时间:2012-10-26 19:14:54

标签: opengl

尝试使用OpenGL绘制wavefront obj文件,但似乎存在深度缓冲问题。

Problem

来源:

// 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 个答案:

答案 0 :(得分:2)

要检查的事项:

  • 确保启用深度测试glEnable(GL_DEPTH_TEST)
  • 确保启用深度写入glDepthMask(true)
  • 确保您的上下文具有深度缓冲区Assert(glGetIntegerv(GL_DEPTH_BITS) != 0))

答案 1 :(得分:1)

请求具有深度缓冲区和glEnable(GL_DEPTH_TEST)的GL上下文。

试试这个:

mainWindow.create
    (
    sf::VideoMode
        (
        settings.getWidth(), 
        settings.getHeight()
        ), 
    "", 
    sf::Style::Resize,
    sf::ContextSettings( 16, 0, 0, 2, 0 )
    );

答案 2 :(得分:1)

你有没有激活深度测试?

glEnable(GL_DEPTH_TEST);

答案 3 :(得分:0)

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

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