OpenGL拾取模式三个问题
1:拾取模式中实体名称是整形GLuint类型,但是命名不连续或者不从1开始时,拾取栈输出的名字就对不上了,感觉拾取栈的名字是从头按序号输出的;
2:拾取模式中,实体个数大于128时,拾取到128以后的实体,拾取栈中的名字都是128;
3:拾取栈最终结果为什么会有很多数据,如拾取到2和4,结果集是:
buffer[0]=2;
buffer[1]=2147482496;
buffer[2]=2147482496;
buffer[3]=1;
buffer[4]=2;
buffer[5]=4;
buffer[6]=2147482496;
buffer[7]=2147482496;
buffer[8]=1;
buffer[9]=2;
buffer[10]=3;
buffer[11]=4;
//拾取代码片段如下:///////////////////////////////
{
GLuint pickBuffer[1024];
GLint nPicks,vp[4];
glSelectBuffer(1024,pickBuffer);
glRenderMode(GL_SELECT); //进入选择模式
glInitNames(); //初始化名字栈
glMatrixMode(GL_PROJECTION); //进入投影阶段准备拾取
glPushMatrix(); //保存以前的投影矩阵
glLoadIdentity(); //载入单位矩阵
glGetIntegerv(GL_VIEWPORT, vp); //获得vp
gluPickMatrix( x, viewport[3]-y,2,2, vp );
gluOrtho2D(0.0,winWidth,0.0,winHeight);
DrawGraph(GL_SELECT);
//恢复投影变换
glMatrixMode(GL_PROJECTION);
glPopMatrix();
glFlush();
//获得选择集并输出
nPicks = glRenderMode(GL_RENDER);
}
void DrawGraph(GLenum mode/*=GL_SELECT*/)
{
……
if(mode ==GL_SELECT )
{
glPushName(graph.name);
}
……
}