gpt4 book ai didi

c++ - OpenGL深度测试在某些计算机上不起作用

转载 作者:行者123 更新时间:2023-12-02 09:52:00 24 4
gpt4 key购买 nike

我的第一个问题在这里。在我的程序中,深度测试在某些计算机上可以正常运行,但在其他计算机上则无法运行,位于较远位置的对象会覆盖位于较近位置的对象。我调用了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);

最佳答案

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

  • GLFW - Framebuffer related hints
    glfwWindowHint(GLFW_DEPTH_BITS, 24);
    // [...]

    GLFWwindow *wnd = glfwCreateWindow(800, 600, "OpenGL window", nullptr, nullptr);
  • SDL - Using OpenGL With SDL
    SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 24);
    // [...]

    SDL_SetVideoMode(800, 600, bpp, flags);
  • SFML - Using OpenGL in a SFML window
    sf::ContextSettings settings;
    settings.depthBits = 24;
    // [...]

    sf::Window window(sf::VideoMode(800, 600), "OpenGL window", sf::Style::Default, settings);
  • GLUT - glutInitDisplayMode
    glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH );
    glutInitWindowSize(800, 600);
  • 关于c++ - OpenGL深度测试在某些计算机上不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63842472/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com