作为一名OpenGL初学者,我想知道他们做了什么以及为什么需要这些。例如在通话中
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
答案 0 :(得分:12)
GL_COLOR_BUFFER_BIT
和GL_DEPTH_BUFFER_BIT
不是函数,它们是常量。您可以使用它们告诉glClear()
要清除哪些缓冲区 - 在您的示例中,深度缓冲区和“当前启用颜色写入的缓冲区”。您也可以通过GL_ACCUM_BUFFER_BIT
清除累积缓冲区和/或GL_STENCIL_BUFFER_BIT
清除模板缓冲区。
在使用库时,常量的实际值对您来说无关紧要 - 重要的实现细节是每个常量的二进制表示不会相互重叠。正是这种特性允许您将多个常量的按位OR传递给glClear()
的单个调用。
查看glClear()
documention了解详情。
答案 1 :(得分:0)
对glClear的调用(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)清除OpenGL颜色和深度缓冲区(或任何其他缓冲区或缓冲区组合)。 OpenGL是一个状态机,最好用干净的平板启动每个帧。
答案 2 :(得分:0)
我在阅读这个问题时偶然发现了这个问题,并想为任何困惑的人添加一些细节。我看到这两个变量是常量,表示位值中的选项。
glClear() 方法需要知道要清除的缓冲区类型。但是,有许多缓冲区,例如颜色和深度缓冲区等 (https://www.khronos.org/registry/OpenGL-Refpages/gl2.1/xhtml/glClear.xml)。
通过使用位来表示选项,通过执行 OR 操作可以更轻松地设置多个选项。
有关更多详细信息,请查看此“位操作”教程,即“位标志何时最有用?”部分位于:https://www.learncpp.com/cpp-tutorial/bit-manipulation-with-bitwise-operators-and-bit-masks/