glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH) exp
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH) explanation?
我正在使用 Glut 编写一些 OpenGl 教程,我遇到了
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH)
我了解它的作用,但我不了解它是如何做到的?
查看定义:
GLUT_DOUBLE 0x0002
GLUT_RGB 0x0000
GLUT_DEPTH 0x0010
我可以看到函数的参数中有一个 OR 位操作。
这种按位运算如何在上面的宏上工作?它们代表什么值,来自内存的物理地址?
现在我只是显示一些在 400x400 像素窗口中旋转的形状,禁用任何参数似乎没有任何视觉效果。
谢谢!
其中
两个常量,GLUT_DOUBLE
和GLUT_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 图形非常重要。
如果您想更详细地了解这些工作原理,我建议您进行一些研究。
相关文章:
- 使用 GLUT 使用键停止动画?
- GLEW/GLUT:调用init并创建一个窗口后,取消初始化并重新初始化?
- OpenGL Glut显示功能在Mojave上显示黑屏
- GLUT 无法获得米利斯精度的时间
- GLUT 问题:重新声明 c++ 内置类型'wchar_t'时出错
- 在macOS上编译GLEW和GLUT?
- 提升多精度浮点数128:标准::exp错误:'no matching function for call'
- 在 c++ 中计算对数和 exp 函数
- 在 CLion (MacOS) 中使用 OpenGL 和 GLUT 库时出现链接错误
- 单词exp和带空格的字符串
- C++ exp 在 i7-3770 和 i7-4790 上的 x64 下函数不同的结果
- constexpr exp, log, pow
- exp(-1/0.) == 0 是否确定即使使用 -ffast-math 优化也能成立?
- 带 GLUT 的黑屏?
- 如何将整个C Glut程序编写为可以在另一个程序中调用的函数
- C++ GLUT 使对象在视口外消失
- 将 math.h exp 调用替换为查找表
- C++ 编译器抛出 GLUT 错误
- std::exp(-100.0f) == NaN?
- 连接GLUT和QGLViewer的问题