PDA

View Full Version : Objects selection



qocarlos
11-01-2002, 03:17 AM
Hi,
I am trying to do an MFC-based OpenGL molecular viewer. I need to implement atom selection, so my code looks something like this:

//Selection function
OnSelect(CPoint pt)
{
GLint hits;
GLint viewport[4];
GLuint selectBuff [512];
glSelectBuffer(512,selectBuff);

glGetIntegerv(GL_VIEWPORT,viewport);

glMatrixMode(GL_PROJECTION);

glPushMatrix();

glRenderMode(GL_SELECT);

glLoadIdentity();

gluPickMatrix(pt.x,viewport[3] - pt.y,5,5,viewport);

gluPerspective(45,AspectRatio,1,10);
OnRender(SELECT) ;
hits=glRenderMode(GL_RENDER);

if(hits)
{
Proces****s(selectBuff[3]);
}
glMatrixMode(GL_PROJECTION);
glPopMatrix();

glMatrixMode(GL_MODELVIEW);
}

OnRender(GLenum mode)
{
glPushMatrix();
glRotatef(rotate.x,1.0,0.0,0.0);
glRotatef(rotate.y,0.0,1.0,0.0);
RenderMolecule(

RenderMolecule(GL_SELECT);
glPopMatrix()
}

RenderMolecule(GLenum mode)
{
glInitNames();
glPushName(0);

register int i;

for(i=0;i<m_molecule.m_atom.size();i++)
{
glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, color );
glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, color );
glPushMatrix();
glTranslatef(m_molecule.m_atom[i].c.x/m_scale,
m_molecule.m_atom[i].c.y/m_scale,
m_molecule.m_atom[i].c.z/m_scale);
///if in selection mode load a name to the stack (the objects id)
if (mode == GL_SELECT)
glLoadName(i + 1) ;
gluSphere(atomSphere,0.2 / m_scale,GRAIN,GRAIN);
glPopMatrix();
}
}


The problem is that when molecule is rotated, the atom selection is incorrect (wrong numbers are given)
Any idea?