Forum: PC-Programmierung (QT-)Widget für 3D Körper Interaktion


von Stephan (Gast)


Lesenswert?

Hallo zusammen,

ich recherchiere nach einer Art Widget (vorzugsweise QT), in das 
einfache 3D-Objekte geladen werden können und das idealerweise die 
Funktionen zum Auswählen von Flächen mit sich bringt.

Zunächst geht es um einen Würfel, der mit der Maus frei gedreht werden 
kann und wo der Benutzer auf eine der sechs Flächen klickt.
Ich hänge an dem Punkt herauszufinden, auf welche er den klickt:

Klickereigneisse auf Flächen in einer 2D-Umgebung sind mit QT 
komfortabel mit einer Hand voll Funktionen gelöst, für 3D finde in der 
Doku kein Equivalent dazu (bin mir nicht sicher ob soetwas denn 
exitiert).

Wie löst man das in einer 3D-Darstellung?

Stephan

P.S.: Ich habe mit QT bereits etwas  Erfahrung, bin damit aber nicht 
"verheiratet".

von volksvorg (Gast)


Lesenswert?


von Markus F. (mfro)


Lesenswert?

Das ist weniger ein Qt- denn ein OpenGL-Problem.

OpenGL kennt einen GL_SELECT render mode, bei dem die Grafikpipeline 
durchlaufen wird, ohne wirklich etwas auf dem Bildschirm auszugeben. 
Stattdessen werden die "gezeichneten" Primitive mit 2D (Maus-) 
Koordinaten verglichen und in einem Hitbuffer gespeichert (s. 
glSelectBuffer() und glRenderMode(GL_SELECT)). Anschließend schaltest Du 
wieder in den "normalen" GL_RENDER mode zurück und holst dir die 
gepickten Primitive aus dem Hit Buffer.

Stattdessen kann man die Geschichte aber auch "ganz zu Fuß" angehen: aus 
den Mauskoordinaten und dem Blickvektor eine Linie konstruieren und 
potentielle Schnittpunkte mit deinem Modell berechnen. Der "erste" 
(naheliegendste) Schnittpunkt ist das angeklickte Objekt.

von Stephan (Gast)


Lesenswert?

Hallo  Marcus,

vielen Dank, mit den Schlagwörtern komme ich weiter! Dann ist es 
logisch, das QT diese Funktionen nicht (direkt) enthält.

Gruß

Stephan

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.