6 Dicembre 2002
Costruzione di Interfacce - Paolo Cignoni
19
gluPickMatrix
vint MoebiusStrip::PickElement(int x, int y, int& SideInd, int& BlockInd)
v{
v  long hits;
v  static unsigned int selectBuf[16384];
v  glSelectBuffer(16384, sBuf);
v  glRenderMode(GL_SELECT);
v  glInitNames();  glPushName(-1);
v  int viewport[4];  glGetIntegerv(GL_VIEWPORT,          viewport);
v  double   mp[16];  glGetDoublev( GL_PROJECTION_MATRIX ,mp);
v  glMatrixMode(GL_PROJECTION);
v  glPushMatrix();
v  glLoadIdentity();
v  gluPickMatrix(x, viewport[3]-y, 4, 4, viewport);
v  glMultMatrixd(mp);
v  glMatrixMode(GL_MODELVIEW);
v  Draw(); // RENDER!
v  glPopMatrix();
v  glMatrixMode(GL_PROJECTION);
v  glPopMatrix();
v  glMatrixMode(GL_MODELVIEW);
v  hits = glRenderMode(GL_RENDER);
v  if (hits <= 0)     return 0;
v  vector< pair<double,unsigned int> > H;
v  for(int ii=0;ii<hits;ii++)
v    H.push_back( make_pair(sBuf[ii*4+1]/4294967295.0,sBuf[ii*4+3]));
v  sort(H.begin(),H.end());
v  Ind2Sec(H[0].second,SideInd, BlockInd);
v  return H[0].second;
v}