Hmm, in deinerm anderen Thread hatte sich die Frage irgendwie anders angehört...
Jetzt verkompliziert sich das Ganze leider etwas...
Mit der Methode GetPickedObjects() (man achte auf das s am Ende) vom Buffer bekommst du eine Liste aller Objekte in einem bestimmten Area. Dieses wird übergeben mit einem Rect, also nimmst du am besten ein Rect, dessen "Oben-Links"-Koordinate der aktuellen Mausposition entspricht und die "Unten-Rechts"-Koordinate jeweils +1 ist, also ein Rect mit einer Breite und Höhe von jeweils zwei Pixeln (ich weiß nicht, ob es auch klappt, wenn das Rect nur einen Pixel groß ist, unten-rechts und oben-links also die gleichen Koordinaten haben, das kannst du ja leicht ausprobieren).
Dann gehst du die Liste, die von GetPickedObjects() zurückgegeben wird, durch und schaust jeweils, ob das aktuelle Glied der Liste vom Typ TGLBaseSceneObject ist:
Delphi-Quelltext
1: 2: 3: 4:
| if picklist[i] is TGLBaseSceneObject then else |
Genauso kannst du auch überprüfen, ob das Objekt ein TGLTerrainRenderer ist, wenn der Anwender versehentlich auf den Boden anstatt auf das Objekt klickt.
Das erste Objekt, das dir über den Weg läuft und ein Szenenobjekt ist (Die Liste ist nach Tiefe von der Kamera aus gesehen sortiert), ist dein gewünschtes Objekt. Das kannst du jetzt typecasten und benutzen.
Aber wenn ich die Dokumentation zur PickList richtig lese, kann sie sowieso nur TGLBaseSceneObjects beinhalten. Das würde bedeuten, daß dein TGLCustomControl gar nicht enthalten ist, aber dein Mauszeiger ist ja nicht das einzige Objekt, es gibt ja noch die HUDSprites, die allesamt TGLBaseSceneObjects sind. Allerdings würde es dann eigentlich keinen Fehler geben, wenn du mit obiger Methode auf ein Menü im HUD klickst, ich weiß ja nicht, ob du das HUD mit den Window-Controls realisiert hast oder mit HUDSprites.
Die entsprechenden Klassen musst du dir dann raussuchen. Wenn alle deine Objekte eine bestimmte (eigene?) Klasse sind, lohnt es sich zum Beispiel zu gucken, ob das Objekt dieser Klasse entspricht, anstatt zu gucken, ob es anderen Klassen nicht entspricht
War jetzt mit den ganzen Klassen von GLScene ziemlich harter Tobak und ich war vorhin schon müde, ich weiß nicht ob das alles so verständlich ist. Wenn nicht, frag morgen nochmal nach, wenn ich wacher bin... ("I don't like Mondays" The Boomtown Rats)
Your computer is designed to become slower and more unreliable over time, so you have to upgrade. But if you'd like some false hope, I can tell you how to defragment your disk.