Modeller, mehrere Polygone markieren



  • Hallo!
    Ich habe einen Modeller, mit dem ich 3D-Figuren bearbeiten kann. In diesem gibt es bereits die Möglichkeit (na? wer erinnert sich?) Polygone per Klick ins gerenderte Fenster zu markieren. Jetzt möchte ich aber mehrere markieren, und zwar indem ich sie markiere, wie man im File-Explorer Dateien markiert...Maustaste drücken, ziehen, loslassen. Dann habe ich ein schönes Rechteck gezeichnet und möchte alle Polygone die innerhalb diesen Rechtecks liegen markieren. Wie realisiere ich das am besten?

    Ich habe ja einen Startpunkt, meine Kameraposition und 4 Endpunkte (die 4 Punkte des Rechtecks von 2D in die dritte Dimension umgerechnet). Aber wie bekomme ich hier am besten alle Polygone die innerhalb diesen Gebildes (Pyramide) liegen? Ich dachte mir man schaut, ob die 3 Punkte der Polygone alle innerhalb der Planes der Pyramide liegen...aber wie berechne ich die Planes der Pyramide wenn ich alle 5 Punkte dieser Pyramide habe?

    Gruß,
    Kevin



  • also im Endeffekt kannst du beispielsweise das Ganze so sehen, dass dein auf dem Bildschirm befindliches Viereck der Boden einer Pyramide ist.
    Wenn du nun davon ausgehst, dass der Kamerapunkt die Spitze der Pyramide ist, brauchst du nur in einer realistischen Entfernung (so 100m) den Boden setzen.
    jetzt kannst du 2 Dreiecke bilden. (Boden X-Achse und Kamerapunkt, sowie boden Y-Achse und Kamerapunkt) Nun berechnest du einfach ob sich ein Punkt (2-dimensional gesehen) innerhalb des Dreiecks befindet. Ist Alle Winkel zwischen dem Ausgangspunkt und den Dreieckspunkten zusammen sollten 360° ergeben..

    allerdings weiß ich nicht, ob das nicht etwas zu umständlich ist



  • Winkel würde ich gerne aus dem Spiel lassen 🙂
    Ich muss ja eigentlich nur wissen wie man überprüft, ob ein Punkt innerhalb einer Pyramide liegt, von der ich alle 5 Punkte habe...Leider bin ich noch immer nicht in der Kollegstufe wo man bei uns Raumgemotrie durchnimmt 😞



  • So ganz ohne winkel wirds wohl nicht gehen.
    Was du aber tun könntest wäre dir zu merken, wo ein Punkt in der 2D-Ansicht ist und dann einfach mit nem Rahmenvergleich (xa<px<xb)(ya<py<yb) arbeiten, kostet aber RAM..

    Hab da grade was gefunden - vielleicht hilft das
    http://www.matheraum.de/read?t=15980&v=t



  • Stimmt...das habe ich mir auch schon gedacht...ich denke ich werde es jetzt wohl so machen. Nur weiß ich nicht wie ich 3D Koordinaten + allen Matrizen in die Ebene umrechne...eine Formel für 2D->3D habe ich...aber leider weiß ich nicht genau wie man diese umkehrt...DirectX bietet soweit ich weiß ebenfalls eine Funktion für 3D->2D, somit wohl auch für 2D->3D...kennt jemand den Namen oder die Formel? Danke!

    Kevin



  • hmm.. wobei mir einfällt, dass man vielleicht auch einfach keine Pyramide sondern 2 Parallelogramme (die zusammen wie Pfosten auf dem Rechteckboden stehen)nehmen könnte.
    dann muss man nur noch sehen, ob der Punkt innerhalb der Parallelogramme liegt..



  • Wie sollten die Parallelogramme aussehen? Kanns mir gerade nicht vorstellen.....habe jetzt aber irgendwie Gefallen an der 2D Methode gefunden...jetzt brauch ich nur noch die Umrechnungsfunktion 🙂



  • In DX8 hieß es D3DXVec3Project
    in DX9 ists Vector3.Project



  • Edit: Stimmt - meinte Parallele Strahlen, keine parallelogramme..

    also.
    Du nimmst deinen Blickwinkel auf die ganze Szene als Grundlage. Die 4 Eckpunkte sind nun nichts welter als Parallelverschiebungen hiervon.
    nun nimmst du die beiden übereinander liegenden strahlen und schaust, ob ein Punkt zwischen beiden Vektoren liegt. Anschließend nimmst du die Nebeneinander liegenden Strahlen und tust das Gleiche. Du musst allerdings beachten, dass du auch den up-Vektor der Kamera einberechnest.

    Dadurch kommst du nur mit Vektorrechnung klar und brauchst theoretisch nicht wirklich einen Winkel berechnen..



  • D3DXVec3Project....mal ausprobieren



  • Illuminator war wohl schneller 🙂
    Ich probier das jetzt erstmal mit der 2D-Methode!



  • ok mit D3DXVec3Project funktionierts perfekt...danke für den Tipp!


Anmelden zum Antworten