ausgefüllte Polygone zeichnen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • ausgefüllte Polygone zeichnen

    Ich glaube folgendes Problem sieht auf den ersten Blick relativ einfach aus, aber irgendwie komm ich nicht drauf:

    Ich möchte ein Polygon (2D) zeichnen lassen und dessen Inhalt ausfüllen.
    Leider funktioniert das mit keinem der draw_primitive_begin Typen richtig:
    Also pr_trianglelist, pr_trianglefan, pr_trianglestripe.
    Dieses Polygon z.B. lässt sich nicht so einfach zeichnen.
    Könnt ihr ja ausprobieren. Jedesmal passiert es, dass ein Teil außerhalb des Polygons gezeichnet wird.
    Gibt es nun eine Möglichkeit, dass das nicht passiert?

    Ich hoffe ihr versteht mich.

    Danke schon mal!
    Bilder
    • polygon.jpg

      4,1 kB, 180×180, 315 mal angesehen

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Bl@ckSp@rk ()

  • die form die du da gemalt hast, ist sehr wohl möglich. man muss die form nur in dreiecke zerlegen können. hier hab ich mal ein beispiel gebastelt:

    GML-Quellcode

    1. #define scr_form_draw
    2. // GML Code created with Smart Poly - Version: 1.30
    3. // © 2005 by VectorGames.de - All rights reserved!
    4. // Vertex Group 0
    5. draw_set_alpha(1);
    6. d3d_primitive_begin(5);
    7. d3d_vertex(x-140,y-100,z+0);
    8. d3d_vertex(x-100,y+60,z+0);
    9. d3d_vertex(x-60,y-20,z+0);
    10. d3d_vertex(x+100,y+60,z+0);
    11. d3d_vertex(x+60,y-20,z+0);
    12. d3d_vertex(x+138,y-90,z+0);
    13. d3d_primitive_end();
    Alles anzeigen
    Bilder
    • polygon.jpg

      6,41 kB, 160×160, 516 mal angesehen
    Battle Command - WeltraumEchtzeitStrategie | Meine GM Spiele auf Box.net
    GCM/FA/O d-(--)@>---xpu s-:- !a C++$@ U- P L+ E W++ N o K-- w++ O? M V PS PE-- Y PGP t 5 X R+++ tv+ b DI D G e+ h? r-- x
  • Ja WIN, das ist schon richtig. Ich wollte aber eigentlich einen Algorithmus, der mir das bei einem beliebigen Polygon automatisch macht. Das sowas möglich ist sieht man ja an Photoshop, da geht das ja auch automatisch, wenn man das Werkzeug dafür nimmt.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Bl@ckSp@rk ()

  • Ich bin mir nicht ganz sicher, aber ich glaube, das die Pfadfüllungs Routinen vom Photoshop ganz anders aufgebaut sind, als das was du vorhast. Auf jeden Fall bin ich mir ziemlich sicher, das es nicht auf Polygon Basis ist ... Splines währen nur mit Polygonen .... sehr beschränkt darstellbar, sofern du nicht vorhast die Anzahl der Polygone ins endlose zu drehen.
    ...
  • Original von Bl@ckSp@rk
    Ich wollte aber eigentlich einen Algorithmus, der mir das bei einem beliebigen Polygon automatisch macht.

    da gibts keine fertige funktion für, die musst du schon selber schreiben.
    Battle Command - WeltraumEchtzeitStrategie | Meine GM Spiele auf Box.net
    GCM/FA/O d-(--)@>---xpu s-:- !a C++$@ U- P L+ E W++ N o K-- w++ O? M V PS PE-- Y PGP t 5 X R+++ tv+ b DI D G e+ h? r-- x
  • An sich ist es recht einfach: Du zeichnest zuerst den gefüllten Grund, ganz normal mit den Primitive Funktionen, dann zeichnest du die außenlinie mit einem Primitve "pr_linelist_" oder so heisst der afaik^^
    Das einzige, was du vom ersten zum zweiten draw ändern musst, ist die Reihenfolge der Punkte.
  • Original von Agnahim
    An sich ist es recht einfach: Du zeichnest zuerst den gefüllten Grund, ganz normal mit den Primitive Funktionen, dann zeichnest du die außenlinie mit einem Primitve "pr_linelist_" oder so heisst der afaik^^
    Das einzige, was du vom ersten zum zweiten draw ändern musst, ist die Reihenfolge der Punkte.


    Das versteh ich nicht ganz.
    Mein Problem ist doch nicht, dass ich ein Polygon mit Kontur zeichnen will, sondern es geht mir allgemein darum ein Polygon richtig zeichnen zu können ohne dieses vorher zu kennen.
    Das Polygon im ersten Post hat WIN schon richtig in Dreiecke zerlegt. Was nun aber, wenn das Polygon bei Start des Programms nicht bekannt ist und man diese Zerlegung nicht selber machen kann. Dann braucht man einen Algorithmus der das tut oder das Polygon auf eine ander Art und weise zeichnet.
    Und genau sowas möchte ich.
  • da kommt mir gerade eine geniale idee.
    kennt jemand eine "planiemeter"? das arbeitet nach dem prinzip der polarkoordinaten-integration, will heißen: man umfährt eine fläche mit einer art zirkelspitze, und das ding gibt einem die umfahrende fläche wieder (fläche muss geschlossen sein).
    das müsste man auch aufs programm übertragen können.
    man zeichnet immer ein dreieck von einem fixpunkt, einem punkt und dem danachkommenden punkt. der fixpunkt bleibt immer gleich, dh. man nimmt zb. immer (0; 0).die punkte gibst du ja dan später von hand ein.
    so entstehen mehrere dreicke, die sich an manchen stellen überschneiden. die stellen müssen abgezogenwerden, und die anderen müssen gezeichnet werden, dan hättest du die gewünschte fläche.
    lösung gefunden, wer kann das programmieren? ich nicht... sry. ich kenne keinen befehl um sich überlappende flächen auszublenden.
    :) Nobody is perfect (-:

    "Dummköpfe sind Denkerköpfen weit überlegen. Zahlenmäßig." Ernst Ferstl
  • So, jetzt hab ich mich mal rangesetzt und so einen Algorithmus programmiert, der ein beliebiges Polygon trianguliert. Vielleicht kann das jemand gebrauchen. Mit dem Beispiel kann man Polygone mit der linken Maustauste zeichnen und mit der rechten Maustaste beenden (ausfüllen).

    Um es in eigenen Projekten zu verwenden einfach die Scripte exportieren.

    Wen der Algorithmus interessiert hier ist eine genaue Beschreibung:
    www2.in.tu-clausthal.de/~horma…PS.AlGeo.25.01.2005.b.pdf
    Dateien
    • polygon.rar

      (4,35 kB, 262 mal heruntergeladen, zuletzt: )
  • Original von Bl@ckSp@rk
    So, jetzt hab ich mich mal rangesetzt und so einen Algorithmus programmiert...

    der ist sehr gut geworden!
    was passiert mit vertexes, die sich innerhalb der form befinden? also komplett umrandet von anderen vertexes. bin da auf die schnelle nicht draus schlau geworden.
    Battle Command - WeltraumEchtzeitStrategie | Meine GM Spiele auf Box.net
    GCM/FA/O d-(--)@>---xpu s-:- !a C++$@ U- P L+ E W++ N o K-- w++ O? M V PS PE-- Y PGP t 5 X R+++ tv+ b DI D G e+ h? r-- x
  • Sowas ist nur indirekt möglich, weil man eine Reihe von Punkten angeben muss die in dieser Reihenfolge verbunden werden. Und weil Punkte, die sich komplett innen befinden, nicht mit den äußeren verbunden sind, geht das nur z.B. so (hab bewusst eine kleine stelle offen gelassen damit man sieht wie man das machen muss):
    Bilder
    • ring.gif

      998 Byte, 268×233, 239 mal angesehen