- int selection(int xs, int ys)
- {
- GLuint Puffer[100];
- GLint Viewport[4];
- int treffer, i;
- GLuint Z_Wert;
- GLint Getroffen;
- int Result;
- glGetIntegerv(GL_VIEWPORT, &Viewport[0]); //Die Sicht speichern
- glSelectBuffer(100, &Puffer[0]); //Den Puffer zuordnen
- glMatrixMode(GL_PROJECTION); //In den Projektionsmodus
- glRenderMode(GL_SELECT); //In den Selectionsmodus schalten
- glPushMatrix(); //Um unsere Matrix zu sichern
- glLoadIdentity(); //Und dieselbige wieder zurückzusetzen
- gluPickMatrix(xs, Viewport[3]-ys, 1.0, 1.0, Viewport);
- gluPerspective(45.0, Viewport[2]/Viewport[3], 0.1, 100);
- updateGL(); //Die Szene zeichnen
- glMatrixMode(GL_PROJECTION); //Wieder in den Projektionsmodus
- glPopMatrix(); //und unsere alte Matrix wiederherzustellen
- treffer = glRenderMode(GL_RENDER); //Anzahl der Treffer auslesen
- Getroffen = -1; //Höchsten möglichen Wert annehmen ???
- Z_Wert = 100; //Höchsten Z - Wert ???
- for (i=0; i < treffer; ++i) {
- if (Puffer[(i*4)+1] < Z_Wert) {
- Getroffen = Puffer[(i*4)+3];
- Z_Wert = Puffer[(i*4)+1];
- }
- }
- if (Getroffen == -1)
- Result = -1;
- else
- Result = Getroffen;
- return Result;
- }