1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
|
void cStereoPair::Picking()
{
// on entre en mode "select"
GLfloat buffer[512] ;
glFeedbackBuffer(512,GL_3D, buffer) ;
(void) glRenderMode(GL_FEEDBACK) ;
// on sélectionne l'endroit que l'on veut observer
glMatrixMode (GL_PROJECTION);
glPushMatrix ();
glLoadIdentity ();
GLint viewport[4];
glGetIntegerv(GL_VIEWPORT, viewport);
int xmouse = cInputManager::GetInstance().mouseX ;
int ymouse = cInputManager::GetInstance().mouseY ;
gluPickMatrix( xmouse , viewport[3]-ymouse , 5 , 5 , viewport );
gluPerspective(45,(1024/768),0.1,100);
glMatrixMode(GL_MODELVIEW);
// on initialise la pile des nom
glInitNames();
glPushName(0);
// on redessine la scene
glLoadName(10) ;
glDisable( GL_DEPTH_TEST );
glBegin(GL_QUADS);
glColor4f(1,1,1,1) ;
glVertex2f( -3 , -3.5 );
glVertex2f( -3 , 3.5 );
glVertex2f( 4 , 3.5 );
glVertex2f( 4 , -3.5 );
glEnd();
glDisable(GL_TEXTURE_2D);
glDisable(GL_BLEND);
// on restore la matrice de projection
glMatrixMode(GL_PROJECTION);
glPopMatrix();
glMatrixMode(GL_MODELVIEW);
glFlush();
// on retourne en mode "render"
glMatrixMode (GL_PROJECTION);
glPopMatrix ();
int size = glRenderMode(GL_RENDER) ;
// analyse des données
std::cout << std::endl << std::endl << std::endl ;
for ( int i = 0 ; i < size ; i ++ )
{
if ( buffer[i] == GL_POINT_TOKEN ) std::cout << "GL_POINT_TOKEN " << std::endl ;
if ( buffer[i] == GL_LINE_TOKEN ) std::cout << "GL_LINE_TOKEN " << std::endl ;
if ( buffer[i] == GL_POLYGON_TOKEN )
{
std::cout << "GL_POLYGON_TOKEN " << std::endl ;
for ( int j = 0 ; j < 11 ; j ++)
std::cout << buffer[j] << std::endl ;
}
if ( buffer[i] == GL_BITMAP_TOKEN) std::cout << " GL_BITMAP_TOKEN " << std::endl ;
if ( buffer[i] == GL_DRAW_PIXEL_TOKEN) std::cout << "GL_DRAW_PIXEL_TOKEN" << std::endl ;
} |
Partager