0

我想在不使用 GLUT 的情况下以独立于平台的方式使用深度缓冲区初始化 OpenGL。

如何使用 c# 包装器删除 OpenGL 场景中的隐藏表面。我没有使用 GLUT,所以我不能使用 glutInitDisplayMode。任何想法?


更多细节:

我找到了有关 Hidden-Surface 移除的这些步骤:

  1. 通过 glutInitDisplayMode 请求 z 缓冲区:

    // GLUT_DEPTH to request for depth-buffer
    glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH);
    
  2. 启用 z-buffer 进行深度测试:

    glEnable(GL_DEPTH_TEST);
    
  3. 当我们清除颜色缓冲区时清除 z 缓冲区:

    // Clear color and depth buffers
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);  
    

据我所知, glutInitDisplayMode 是 GLUT 函数之一。我可以消除这个电话而不会产生不良影响。如果不是,那么可以解决问题的替代纯opengl调用是什么。

我正在使用由(Colin P. Fahey)编写的 ac# 包装器

4

3 回答 3

2

GLUT 不是 OpenGL!

无论 GLUT 做什么,您的 C# 包装器都可能提供它,而且可能更好。您需要的是深度缓冲区并启用深度测试


反映问题编辑的更新

获取深度缓冲区的确切步骤完全取决于您使用的包装器。所以有必要告诉我们它是哪个包装器。

于 2012-07-02T12:15:23.573 回答
0

OpenGL 是一个平台无关的渲染 API。为窗口系统创建 OpenGL 上下文是窗口系统接口(例如WGL)的工作。

根据您使用的 C# 绑定,您可能有直接的 wgl 或 glx 调用或类似 GLUT 的平台独立的窗口调用集(例如在OpenTK的情况下)。如果您让我们知道您使用什么绑定,我可以提供更多信息。

于 2012-07-02T13:24:51.437 回答
0

你有没有考虑过使用一个不那么……古怪的界面?我完全赞成寻找由随机人编写的不同且有趣的工具,但该文档非常糟糕。

我查看了它,它的 InitializeOpenGL 命令似乎不允许您为 GL 初始化设置任何参数。完全没有。这意味着您几乎受制于控制。

现在,默认情况下它可能会给你一个深度缓冲区(坦率地说,如果它没有,那么它完全没有价值,你应该立即放弃它,如果不是更早的话)。但是由于没有办法告诉它你想用你的缓冲区做什么,所以你不能做任何事情来确保它。

就个人而言,我建议您放弃此工具并使用更主流的工具,例如OpenTK。诚然,OpenTK 的稳定版本非常古老,但它仍然比您现在使用的要好。

于 2012-07-03T15:53:36.453 回答