3D Darstellung mittels ????

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von Mabbi.

    3D Darstellung mittels ????

    Hallo Leute, zur Zeit versuche ich eine Sammlung von Koordinaten(3D) visuell darzustellen.
    das versuche ich mittels openGL bzw openTK.

    Ich bin noch ganz am Anfang. Habe mittels vertex3 schon einpaar Striche hinbekommen :huh: .
    Die XYZ-Koordinaten der einzelnen Punkte, möchte ich zusätzlich mit einem Punkt markieren können sodass ich bei einem z.B. linken Mausklick auf einen dieser Punkte eine Aktion starten kann. Nur WIE ?(
    Nun, was die Doku für OPENTK bzw. GL betrifft, diese ist ziemlich Mager :thumbdown: . Oder ich bin noch nicht auf den richtigen link gestosen.



    Wie würdet ihr das eigentlich machen (Strecken im 3D Raum anzeigen lassen, Einzelheiten oder Bearbeitung der Punkte per Mausklick)?
    So eine Art mini CAD Programm.
    Solange es nur Punkte und Linien sind (und die Menge nicht allzu hoch ist), ist es eigentlich relativ einfach, das einfach von 3D nach 2D runter zu rechnen ("projizieren"). Dann kannst du das mit jeglicher Technologie - sei es GDI+, OpenGL, DirectX, oder was auch immer sonst - zeichnen und auch sowas wie Anklicken ist relativ einfach umzusetzen, weil du ja schon die 2D-Position von allem berechnet hast. Um in 3D etwas anklicken zu können, ist es vermutlich sinnvoll, vom Ursprung der Kamera in der der Mausposition entsprechenden Richtung ne Gerade zu bauen und dann die erste Sache zu finden, die sich mit dieser Gerade schneidet.
    WPF ist da auch sehr mächtig und mit DirectX hast Du 'ne äußerst solide Multimedia-API.

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Hallo ihr lieben,

    danke für Eure Antwort.
    ich bin gerade mit OpenTK fleißig unterwegs.
    Natürlich gibt es weitere Wege die wahrscheinlich zum gleichen Ziel führen.
    Momentan bin ich aber noch auf der OpenTK Bahn und werden noch damit weiter arbeiten.
    Das schlimmste war erst mal infos zu finden.

    Trotzdem danke!
    Hi,

    wenn ich das richtig verstehe möchtest du auf Deinem Bildschirm einen Punkt manuell setzen und dann im 3D Bild dahinter die "optisch nächstgelegene Komponente" aktivieren. Das ganze in gewissen Grenzen korrekt ?

    Ich habe so etwas vor gut 15 Jahren in der Ogre Engine geschrieben. Dies soll nur als Methode oder guideline dienen und nicht als Lösung.

    Faktisch habe ich in dem Viewport (das sichtbare Bild auf deinem Bildschirm wenn die 3D Anwendung läuft den Mausclick (POSX,POSY) ausgewertet, dann die Kameraposition als Ausgangspunkt für einen Vector3D genommen, bin also aus dem Bildschirm raus zum Betrachter ein Stück gewandert und habe einen StartVector3D Kameraposition zu Clickposition erstellt. Dann disen Vektor um gute 50m (hypothetische Größe) verlängert, also hinter den Bildschirm in die 3D Landschaft geschossen.
    Dann habe ich wie beim Raytracing eine virtuelle Kugel in kleinen Steps den Vektor vom MouseclickPunkt (man fängt erst am Viewport an, unsichtbare Komponenten zwischen Bildschirm und Kameraposition sollen ja nicht anclickbar sein) und immer die Längen des Vektors zwischen Kugelposition und Mittelpunkt einer anclickbaren Komponente in ein Datatable gewemst, die Komponente mit der kürzesten Entfernung war der Sieger und wurde je nach Entfernung aktiviert oder auch nicht.

    Ist eine relativ rechenzeitaufwendige Methode, aber bei einer überschaubaren Anzahl von Mausclicks und Komponenten ( hier kann man im Vorfeld sehr effektiv filtern über eine einmalige Auswertung zum original Clickpunkt der Maus und der Enmtfernung zum Mittelpunkt der Komponenten) sehr parktikabel und vor allem auch logisch nachvollziehbar.

    In heutigen Spieleengines ist sowas schon hinterlegt, damals mussten wir das in Ogre3D selber basteln.

    Anbei ein kleines hoch professionelles Bild... :D



    ROT: Viewport, faktisch Dein Bildschirm
    Blauer Ball: Deine virtuelle Kamera ausserhalb des Bildschirms, also da wo Du sitzt
    Schritt 1: Hellgrün Vektor von Kamera zu Click-Koordinaten auf dem Viewport
    Schritt 2: Vektor verlängern in das 3D Bild hinein (dunkelgrün)
    Schritt 3: Den dunkelgrünen Vektor per Raster abfahren und immer die kürzeste Entfernung (Orange Striche) zu den gelben Objekten ermitteln.
    Die gelben Objekte sind Komponenten in Deiner 3D-Ansicht.
    Schritt 4: Das mit der kürzesten Entfernung gewinnt, hier kannst du eine Mindest-Entfernung für ein positives Click-Event gegenprüfen.

    Die Längenauswertung von Vector3D ist sehr schnell, also für uns war es damals performant genug.
    Voila... hoffe ich :D

    P.S.: das ich mich an sowas nach so langer Zeit noch erinnere...lol

    Habe sogar noch ein Video von damals dazu gefunden auf meinem verwaisten Youtube.Kanal, erste Schritte Mausinteraktion mit Fahrzeugen und Gegenständen:

    youtube.com/watch?v=nibEdWPn0QY

    Und da sieht man mal wieder wie die Einschätzung von Zeitspannen falsch ist, knappe 10 Jahre ist es erst her.

    Dieser Beitrag wurde bereits 16 mal editiert, zuletzt von „Mabbi“ ()