- function tglform.Selection : integer;
- var
- Puffer : array[0..256] of GLUInt;
- Viewport : tvector4i;
- Treffer,i : Integer;
- Z_Wert : GLUInt;
- Getroffen : GLUInt;
- begin
- glGetIntegerv(GL_VIEWPORT, @viewport); //Die Sicht speichern
- glSelectBuffer(256, @Puffer); //Den Puffer zuordnen
- glRenderMode(GL_SELECT); //In den Selectionsmodus schalten
- glmatrixmode(gl_projection); //In den Projektionsmodus
- 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, panel1.width/panel1.Height, 1, 100);
- render; //Die Szene zeichnen
- glmatrixmode(gl_projection); //Wieder in den Projektionsmodus
- glPopMatrix; //um unsere alte Matrix wiederherzustellen
- treffer := glRenderMode(GL_RENDER); //Anzahl der Treffer auslesen
- Getroffen := High(GLUInt); //Höchsten möglichen Wert annehmen
- Z_Wert := High(GLUInt); //Höchsten Z - Wert
- for i := 0 to Treffer-1 do
- if Puffer[(i*4)+1] < Z_Wert then
- begin
- getroffen := Puffer[(i*4)+3];
- Z_Wert := Puffer[(i*4)+1];
- end;
- Result := getroffen;
- end;