在进行Opengl编程时,通常会进行一些交互式操作,其中的鼠标拾取技术可以实现对目标物体的选取和判断,为开发者和用户带来便利。下面笔者就对这当中的一些核心代码进行总结和分析。
Opengl中的拾取是对opengl管线的一个应用,所以这个过程并不是想象中利用射线求交来判断是否选中目标物体,而是利用投影变换阶段的拾取矩阵进行的。
由于我的工程是在mfc环境下进行的,所以我只列出核心代码并进行分析,不过只要读者真正理解了这部分代码,相信这个功能也就很好的实现了。
int mouse_x ,mouse_Y; //鼠标位置
GLuint buffer[512]; //设定一个选择缓冲区
GLint hits; //被选中的物体的数量
void Selection(void) //拾取
{
GLint viewport[4]; //视口的大小,四个值分别为,x,y,width,height;
glGetIntegerv(GL_VIEWPORT, viewport);
glSelectBuffer(512, buffe