【问题标题】:OpenGL depth test doesn't work on some computersOpenGL 深度测试在某些计算机上不起作用
【发布时间】:2020-12-29 16:56:55
【问题描述】:

我在这里的第一个问题。在我的程序中,深度测试在某些计算机上可以正常工作,但在其他计算机上不起作用,位于较远的对象会覆盖位于较近的对象。我打电话给glEnable(GL_DEPTH_TEST); 并试图打电话给glDepthFunc(GL_LESS);,正如我所说,在某些计算机上一切正常,但同一程序在其他计算机上不能正常工作。怎么解决?

编辑:问题已解决。在调用之前添加了这些行 al_create_display(); 一切正常

  al_set_new_display_option(  ALLEGRO_COLOR_SIZE,  32,  ALLEGRO_REQUIRE);
  al_set_new_display_option(  ALLEGRO_DEPTH_SIZE,  24,  ALLEGRO_REQUIRE);
  al_set_new_display_option(  ALLEGRO_STENCIL_SIZE,  8,  ALLEGRO_REQUIRE);
  al_set_new_display_option(  ALLEGRO_AUX_BUFFERS,  0,  ALLEGRO_REQUIRE);  
  al_set_new_display_option(  ALLEGRO_SAMPLES,  4,  ALLEGRO_SUGGEST);

【问题讨论】:

  • 您必须确保默认帧缓冲区具有深度缓冲区。默认帧缓冲区是在初始化 OpenGL 窗口和上下文时创建的。
  • @Rabbid76 如果我使用即时模式,我该怎么做?
  • @Rabbid76 我正在使用 Allegro 5,我应该调用 al_set_new_display_option(),还是设置显示标志?
  • 对不起,我对 Allegro 5 不熟悉。可能你要设置al_set_new_display_option(ALLEGRO_DEPTH_SIZE, ..., ...)

标签: c++ opengl depth-buffer depth-testing


【解决方案1】:

除了激活Depth Test (glEnable(GL_DEPTH_TEST)),重要的是当前framebuffer 有一个depth buffer
default framebuffer 是在构造 OpenGL Context 时创建的。 OpenGL 上下文的创建取决于操作系统和窗口库(例如GLFWSDLSFML)。默认情况下是否创建深度缓冲区通常取决于系统。通常,窗口库提供了额外的选项,用于在生成 OpenGL 窗口时显式指定深度缓冲区:

例如:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-02
    • 2011-12-22
    • 1970-01-01
    • 2016-05-18
    • 2014-07-19
    • 2012-03-09
    相关资源
    最近更新 更多