我'使用Glut处理一些OpenGl教程,我遇到了
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH)
我理解它的作用,但我不明白它是如何做到的?
查看定义:
GLUT_DOUBLE 0x0002
GLUT_RGB 0x0000
GLUT_DEPTH 0x0010
我可以看到函数中有一个OR位操作'参数。
这个按位操作如何在上面的宏上工作?它们代表的值是什么,来自内存的物理地址?
现在我只是显示一些在400x400 px窗口中旋转的形状,并且禁用任何参数似乎没有任何视觉效果。
谢谢!
答案 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图形非常重要。
如果您希望了解这些工作的详细信息,我建议您做一些研究。