glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH) exp

glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH) explanation?

本文关键字:GLUT exp DEPTH DOUBLE glutInitDisplayMode RGB      更新时间:2023-10-16

我正在使用 Glut 编写一些 OpenGl 教程,我遇到了

glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH)
我了解它

的作用,但我不了解它是如何做到的?

查看定义:

GLUT_DOUBLE                        0x0002
GLUT_RGB                           0x0000
GLUT_DEPTH                         0x0010

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

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

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

谢谢!

其中

两个常量,GLUT_DOUBLEGLUT_DEPTH,每个都包含一个设置位:

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

将这些常量与按位 OR 组合会创建一个设置了这两个位的新值,并且可以检查这些位是否在结果值中设置

,例如
if ((display_mode & GLUT_DOUBLE) != 0) { ... }

GLUT_RGB为零。包括它对结果没有影响;我怀疑它代表了一个默认情况下为真的设置。

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

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

GLUT_DOUBLE

位掩码,用于选择双缓冲窗口。如果还指定了GLUT_SINGLE,这将覆盖它。

GLUT_DEPTH

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

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

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

如果您想更详细地了解这些工作原理,我建议您进行一些研究。