glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH)的解释?

时间:2016-02-19 20:58:16

标签: c++ c glut

我'使用Glut处理一些OpenGl教程,我遇到了

glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH)

我理解它的作用,但我不明白它是如何做到的?

查看定义:

GLUT_DOUBLE                        0x0002
GLUT_RGB                           0x0000
GLUT_DEPTH                         0x0010

我可以看到函数中有一个OR位操作'参数。

这个按位操作如何在上面的宏上工作?它们代表的值是什么,来自内存的物理地址?

现在我只是显示一些在400x400 px窗口中旋转的形状,并且禁用任何参数似乎没有任何视觉效果。

谢谢!

2 个答案:

答案 0 :(得分:3)

其中两个常量gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, someOtherTexture, 0); GLUT_DOUBLE各包含一个位:

GLUT_DEPTH

将这些常量与按位OR组合在一起创建一个新值,同时设置这两个位,并且可以使用例如检查这些位是否在结果值中设置。

GLUT_DOUBLE = 0x0002 = 0b0000 0000 0000 0010
GLUT_DEPTH  = 0x0010 = 0b0000 0000 0001 0000

if ((display_mode & GLUT_DOUBLE) != 0) { ... } 为零。包括它对结果没有影响;我怀疑它表示默认设置为真。

使用的具体数字没有任何更深层次的意义。它们只是用作在一个整数参数中组合一堆开/关选项的方法。

答案 1 :(得分:0)

至于标志的含义,请查看glutInitDisplayMode()的文档。特别是,

  

GLUT_DOUBLE

     

用于选择双缓冲窗口的位掩码。如果同时指定了GLUT_SINGLE,则会覆盖它。

     

GLUT_DEPTH

     

用于选择具有深度缓冲区的窗口的位掩码。

双缓冲将使您的动画更加顺畅。对于一个简单的程序,你可能不会看到单缓冲和双缓冲之间有太大的区别。对于更复杂的动画,差异很大。

深度缓冲区对于3D图形非常重要。

如果您希望了解这些工作的详细信息,我建议您做一些研究。