|
我最近做了一个化工塔的模型,想在鼠标点中的地方显示对应点的坐标,由于opengl没有函数可以从鼠标点中的地方可以取坐标(估计是深度不能确定),所以选择用opengl的选择模式,可是我每次选择的时候
hits := glRenderMode(GL_render);
中的hits始终都是0,不知道怎么回事
我使用delphi编的
程序如下
点击选择:
glGetIntegerv(GL_VIEWPORT, @viewport);
// 设置选择缓冲区并切换到选择模式
glSelectBuffer(BUFSIZE, @selectBuf);
glRenderMode(GL_SELECT);
// 初始化名字堆栈,然后将首记录填充一个无意义的值
// 因为一个空堆栈将导致调用glLoadName()函数失败
glInitNames;
glPushName(1000);
// 设置拾取所用的视见体
glMatrixMode(GL_PROJECTION);
glLoadIdentity;
glPushMatrix;
gluPickMatrix(x, viewport[3]-y, 1, 1, viewport);
glPushMatrix;
draw(GL_SELECT);
glPopMatrix;
glPopName;
glFinish;
hits := glRenderMode(GL_render);
msg := '命中: '+ IntToStr(hits) + #13#10;
names := selectBuf[0];
msg := msg + #13#10 + '命中名字数 = ' + IntToStr(names);
|
|