Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   GLscene Cube Fläche auslesen (https://www.delphipraxis.net/200307-glscene-cube-flaeche-auslesen.html)

nwnssolutionssoftware 8. Apr 2019 11:16

GLscene Cube Fläche auslesen
 
Kann man wenn ein Würfel auswählt ist auch gleich mit auslesen welche Fläche man angeklickt hat ob nun die Linke oder die rechte Seite. Anzeigen ist ja recht einfach:
Code:
pick := (GLSceneViewer1.Buffer.GetPickedObject(X, Y) as TGLCustomSceneObject);
Jetzt fehlt nur noch das Auslesen de Würfel Seite:thumb: Vieleicht habt ihr ja eine Idee
Danke schonmal im Vorraus.

nwnssolutionssoftware 21. Mai 2019 23:06

AW: GLscene Cube Fläche auslesen
 
Hat keiner eine Idee?

Uwe Raabe 21. Mai 2019 23:29

AW: GLscene Cube Fläche auslesen
 
Soweit ich weiß, geht das nicht, da das GL_SELECT nur die Primitiven liefert, die im Bereich gerendert werden, aber nicht welcher Teil der Primitive.

EWeiss 22. Mai 2019 06:21

AW: GLscene Cube Fläche auslesen
 
GLScene ist dafür nicht die richtige Bibliothek
Versuchs mal mit Ray Casting

Delphi-Quellcode:
pick := (GLSceneViewer1.Buffer.GetPickedObject(X, Y) as TGLCustomSceneObject);


Kann nicht gehen du hast nur 2 Koordinaten es fehlt die der Tiefe also Z..
Deine Abfrage ist also auf 2D nicht 3D ausgelegt.

http://databasefaq.com/index.php/ans...king-in-OpenGL

gruss

Uwe Raabe 22. Mai 2019 07:16

AW: GLscene Cube Fläche auslesen
 
Zitat:

Zitat von EWeiss (Beitrag 1432795)
GLScene ist dafür nicht die richtige Bibliothek

Ist aber vermutlich gerade die, die er benutzt.

Zitat:

Zitat von EWeiss (Beitrag 1432795)
Delphi-Quellcode:
pick := (GLSceneViewer1.Buffer.GetPickedObject(X, Y) as TGLCustomSceneObject);
Kann nicht gehen du hast nur 2 Koordinaten es fehlt die der Tiefe also Z..
Deine Abfrage ist also auf 2D nicht 3D ausgelegt.

Die Abfrage erwartet natürlich die Bildschirmkoordinaten des Rendering-Context und die sind halt nur 2D. Die Funktion macht daraus ein 3x3 Pixel großes Rechteck und listet alle Primitiven auf, die in diesem Rechteck gerendert werden, sortiert nach Z-Wert. Das vorderste Objekt wird dann zurückgegeben. Es gibt auch noch die Funktion GetPickedObjects, mit der man das Rechteck vorgibt und die gesamte Liste zurückbekommt.

Allerdings wird nur auf ganze Primitiven (Plane, Sphere, Cube, Mesh...) aufgelöst und nicht auf einzelne Teilflächen davon. Würde man den Cube durch 6 Planes darstellen, könnte man auch die korrekte Fläche erkennen. Es ist also kein Manko der Bibliothek, sondern eine Sache des Aufbaus der Szene durch Primitive. Wenn ich die Flächen eines Cubes unterscheiden will, dann darf ich eben keinen Cube nehmen, sondern muss die Flächen einzeln rendern.

Ach ja, GLScene bietet auch ein RayCastIntersect für seine Scene-Objects. Würde aber hier auch nichts helfen, da auch die objekt-basiert ist. Allerdings könnte man anhand der Koordinaten des Intersection-Points auf die getroffene Fläche schließen. Ist aber alles andere als trivial.

EWeiss 22. Mai 2019 07:43

AW: GLscene Cube Fläche auslesen
 
Zitat:

Ist aber alles andere als trivial.
Danke für deine zusätzlichen Infos..

Denke ich auch ;)
Habe das bei meinem Winamp Plugin gemerkt als ich NUR 2D Objekte die sich drehen über Picking zu identifizieren.
Für Anfänger in Sachen OpenGL btw.. GLScene nicht gerade einfach zu realisieren.

Zitat:

Ist aber vermutlich gerade die, die er benutzt.
Deshalb mein Hinweis das es nicht die richtige Bibliothek ist um so etwas zu verwirklichen.
Er muss dafür also ausweichen.

gruss

Heuman 22. Mai 2019 15:52

AW: GLscene Cube Fläche auslesen
 
Hallo,

wenn es nicht umbedingt ein TGLCube sein muss, kann man sich vielleicht damit helfen
indem man sich mit einen TGLDummyCube und entsprechend vielen TGLPlanes
eine Würfel zusammenbaut.

Gruß

nwnssolutionssoftware 23. Mai 2019 16:55

AW: GLscene Cube Fläche auslesen
 
Moin erstmal Vielen Dank an die ganzen Antworten.
Es muss nicht unbedingt ein Cube sein letzendlich sollen diese Cubes ausgetauscht werden
zu STL FIles (weiß leider gerade nicht wie die Komponente heißt). Alles der Cube muss es nicht sein!
Mit den einzelnen Planes hatte ich auch schon überlegt jedoch ist das schwierig wenn man meherere Blöcke während
der Runtime erstellt.
Viele können sich bestimmt schon denken was ich vor habe: Minecraft Clone mit GLscene.
Vieleicht gibt es aber noch eine andere Möglichkeit die mir nur nicht bekannt ist.
Mit den einzelnen Planes wird mir zu unübersichtlich vor allem wenn ich dann später die Planes alle
wieder laden möchte.
Danke aber trotzdem schonmal.

nwnssolutionssoftware 10. Jun 2019 12:15

AW: GLscene Cube Fläche auslesen
 
Vieleicht noch jemand Ideen?


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:37 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz