【问题标题】:OpenGL depth buffer does not seem to take effectOpenGL深度缓冲区似乎没有生效
【发布时间】:2014-08-01 18:04:16
【问题描述】:

我最近开始编写一个 OpenGL 3D 应用程序并学习了几个教程,例如 open.gl。

我目前在尝试以 3D 显示我的对象时遇到渲染问题,深度缓冲区似乎根本不起作用。不管我启用它,清除缓冲区位,还是没有,显示总是一样的。

即使复制粘贴code from open.gl,3D 也永远不会生效。

我的测试代码和上面的源代码唯一不同的是我不能使用 GLSL 的#version 150 核心,因此使用#version 130 和#define GLM_FORCE_RADIANS 来避免编译错误。

【问题讨论】:

  • 您确定安装了正确的驱动程序吗? Windows 带有一个默认的后备 OpenGL 实现,但是它缺乏对所有现代功能的支持。 Windows 驱动程序更新未安装功能齐全的 OpenGL 驱动程序,因此您必须从 GPU 制造商网站下载正确的驱动程序并手动安装。
  • 您是否将 opengl32.lib 和 glu32.lib 链接到您的项目,如果是,您是否有正确的驱动程序,您还需要下载 glm 并确保包含库的包含,因为glm 是一个全头库,您不必链接它,查看代码,您还需要下载 glew 并将其链接到您的项目,然后它应该可以工作。
  • 我目前正在使用 VMWare 在 Ubuntu iso 下工作,我将尝试更新所有内容,看看这是否会改变结果。是因为我无法使用正确的 GLSL 版本的驱动程序吗?

标签: c++ opengl 3d sfml


【解决方案1】:

我发现了我的问题。

问题来自于 SFML 的上下文初始化,我需要配置一个适当的 ContextSettings 类并将其传递给我的窗口:

  sf::ContextSettings           settings;
  settings.depthBits            = 24;
  settings.stencilBits          = 8;
  settings.antialiasingLevel    = 2;

  sf::Window window(sf::VideoMode(800, 600, 32), "OpenGL", sf::Style::Titlebar | sf::Style::Close, settings);

【讨论】:

  • 欢迎将此标记为已接受的答案。此外,将来最好在您的问题中附上屏幕截图。
  • 必须等两天才能做到,但我会的。
猜你喜欢
  • 1970-01-01
  • 2016-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多