Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

10.01.2017, 11:12

Schraffur in 2D-Modell erstellen

Hi,

ich habe ein Programm, in dem Polygone ab und zu mal mit Schraffuren gefüllt werden müssen (so, wie das unter http://wiki.evilmadscientist.com/Hatch_fill beschrieben ist). Meine Lösung sieht dabei so aus:

  1. wiederholt Linien über das Polygon legen, die jeweils um den Schraffurabstand versetzt sind
  2. Schnittpunkte der Linien mit dem Polygon ermitteln
  3. Linien von diesen Schnittpunkten erzeugen, 1. bis 2. Punkt -> Linie, 2. bis 3. Punkt -> keine Linie, 3. bis 4. Punkt -> Linie,..., damit werden auch "Löcher" in den Polygonen korrekt gefüllt
Mein Problem: diese Methode funktioniert mehr schlecht als recht. Wenn z.B. bei konkaven Polygonen ein Polygoneckpunkt genau mit einer Linie zusammenfällt, so erzeugt das einen einzelnen Schnittpunkt, der eigentlich ignoriert werden müsste (das ist aber nicht von dem Fall zu unterschieden, wenn die Schraffurlinie mit einem "normalen" Kantenpunkt des Polygons zusammenfällt, der nicht ignoriert werden darf). Ähnliches passiert, wenn eine Kante des Polygons exakt parallel zu einer Schraffurlinie verläuft.

Der Eggbot scheint eine schöne Hatchfunktion zu haben. leider ist die in Python, womit ich mich gar nicht auskenne.

Deswegen meine Frage: kennt jemand eine gut gehende C/C++-Bibliothek, die so eine Funktion bietet?

Danke!

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

2

10.01.2017, 11:24

Anstatt wirklich einzelne Schraffurlinien zu konstruieren, gibt's da, abhängig davon, wie genau du deine Polygone zeichnest, sicher noch einige andere Möglichkeiten. Falls du z.B. OpenGL oder sowas verwendest, könntest du evtl. einfach auf jedes Polygon eine Texture anbringen. Eine andere Lösung wäre, den Stencil Buffer zu verwenden, indem du zuerst alle zu schraffierenden Polygone gefüllt in den Stencil Buffer zeichnest. In einem zweiten Pass renderst du dann eine bildschirmfüllende Schraffur und verwendest den Stencil Test um alle Pixel, die nicht innerhalb eines Polygons liegen, zu skippen...

3

10.01.2017, 12:47

Hm, leider nein - ich muss tatsächlich die einzelnen Schraffurlinien berechnen um sie am Ende als separate Vektordaten vorliegen zu haben. Der Monitor ist im Falle dieser Applikation nur ein Kontrollgerät, die eigentliche Ausgabe erfolgt letztenendes auf einem Plotter - und da helfen Textur-Tricks nichts, dort müssen die tatsächlichen Linien abgefahren werden.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

4

10.01.2017, 12:49

Ok, nun, ich bin kein Experte auf dem Gebiet, aber vielleicht hilft CGAL dir weiter...

Werbeanzeige