OpenGL拾取模式三个问题

langpp1 2016-08-17 04:34:41
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);
}
……
}
...全文
288 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2016-08-19
  • 打赏
  • 举报
回复
引用 2 楼 langpp1 的回复:
没有讲到这种二维拾取
把二维拾取当作三维拾取的特例。
langpp1 2016-08-19
  • 打赏
  • 举报
回复
没有讲到这种二维拾取
赵4老师 2016-08-17
  • 打赏
  • 举报
回复
搜网络教程“学OpenGL编3D游戏”?

24,855

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧