- 实验目的
1.理解 OpenGL 拾取操作的原理,掌握选择缓冲区在图元拾取中的作用。
2.学会使用 glSelectBuffer、glRenderMode 等函数实现图元拾取功能。
3.掌握对选择缓冲区数据的解析方法,实现拾取结果的识别与反馈。
- 实验内容
通过 OpenGL 实现图元拾取功能:在窗口中绘制三个不同颜色的矩形(红、绿、蓝),当鼠标左键点击某矩形时,利用选择缓冲区分析拾取结果,并在控制台输出选中的图元信息。
- 实验代码


- 实验结果
1.程序启动:弹出标题为 "拾取操作实验" 的窗口,窗口中显示三个矩形(红色、绿色、蓝色),背景为白色。
2.拾取操作:
鼠标左键点击红色矩形,控制台输出 "选中的图元数目为 1 个 \n 你选择了红色图元 \n";
点击绿色矩形,输出 "选中的图元数目为 1 个 \n 你选择了绿色图元 \n";
点击蓝色矩形,输出 "选中的图元数目为 1 个 \n 你选择了蓝色图元 \n";
点击矩形外区域,输出 "选中的图元数目为 0 个 \n"。

- 实验心得
本次实验让我深入理解了 OpenGL 拾取操作的核心机制。选择缓冲区是实现图元拾取的关键,通过 glSelectBuffer 配置缓冲区、glRenderMode(GL_SELECT) 激活选择模式,再结合名字堆栈(glPushName)为图元标记身份,就能精准捕获鼠标点击的图元。解析选择缓冲区时,需明确其数据结构(包含命中数、深度信息、图元名字等),通过指针偏移可提取出选中的图元名字,从而实现交互反馈。整个过程中,投影矩阵的保存与恢复(glPushMatrix/glPopMatrix)、拾取矩阵(gluPickMatrix)的定义也至关重要,它们保证了拾取区域的准确性。通过本次实验,我掌握了图形交互中 "拾取 - 识别 - 反馈" 的完整流程,为开发具备交互功能的复杂图形应用奠定了基础