使用深度缓冲和深度测试初始化​​OpenGL

时间:2012-07-02 11:27:33

标签: c# opengl

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

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


更多详情:

我找到了关于隐藏表面移除的这些步骤:

  1. 通过glutInitDisplayMode请求z-buffer:

    // 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);  
    
  4. 据我所知,glutInitDisplayMode是GLUT函数之一。 我可以消除这个电话没有不良影响。 如果没有,那么替代纯粹的opengl调用是什么呢。

    我正在使用(Colin P. Fahey)

    编写的c#包装器

3 个答案:

答案 0 :(得分:2)

GLUT不是OpenGL!

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


反映问题编辑的更新

获取深度缓冲区所需的确切步骤完全取决于您使用的包装器。因此,告诉我们哪个包装器是必不可少的。

答案 1 :(得分:0)

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

根据您正在使用的C#绑定,您可能有直接的wgl或glx调用或类似GLUT的平台窗口调用(在OpenTK的情况下就像这样)。如果您告诉我们您使用的绑定,我可以提供更多信息。

答案 2 :(得分:0)

您是否考虑过使用不那么奇怪的界面?古怪的?我全都是为了寻找随机人写的不同而有趣的工具,但这些文档非常糟糕。

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

现在,可能默认会给你一个深度缓冲区(坦率地说,如果没有,那么它就完全没用了,你应该立即放弃它)。但由于没有办法告诉它你想用你的缓冲区做什么,你无法做到确保它。

就个人而言,我建议你放弃这个工具并使用更像OpenTK这样的主流。当然,OpenTK的稳定发布是相当古老的,但它仍然比你现在使用的更好。