Seite 1 von 1

Vektorgrafik mit PB

Verfasst: 19.07.2010 13:39
von Lebostein
Hallo,

mein Ziel ist es, geschlossene Polygone (und später vieleicht mal Beziergone) als einfarbige Flächen auf dem Bildschirm darzustellen. Der einfachste Weg ist mit LineXY das Polygon zu zeichnen und mit FillArea das ganze auszumalen (siehe Code). Da ich aber auf 2DDrawing verzichten möchte (da vermutlich langsam und für Bezierkurven nicht geeignet) und das ganze in Echtzeit verändert werden soll (Rotation und Verzerrung), würde ich gerne anhand der gegebenen Eckpunkte eine andere Herangehensweise (Pixel direkt im Bildschirmspeicher manipulieren o.ä.) vorziehen. Habt ihr Ideen oder interessante Links zum Thema? Letztendlich ist das ja nichts anderes als Vektorgrafik. Oder gibt es vielleicht eine in PB nutzbare Bibliothek, die so etwas kann?

Code: Alles auswählen

; ------------------------------------- Polygon erstellen

Structure poly
  x.l
  y.l
EndStructure

Global NewList poly.poly()

Procedure newpoint(x,y)
  LastElement(poly())
  AddElement(poly())
  poly()\x = x
  poly()\y = y
EndProcedure

newpoint(126,339)
newpoint(170,269)
newpoint(328,246)
newpoint(257,201)
newpoint(234, 43)
newpoint(190,114)
newpoint(32, 137)
newpoint(103,182)

; ------------------------------------- Polygon anzeigen

Procedure polydraw(farbe)
  StartDrawing(ScreenOutput())
  anzahl = ListSize(poly())
  For p1 = 0 To anzahl - 1
    p2 = (p1 + 1) % anzahl
    SelectElement(poly(), p1)
    x1 = poly()\x
    y1 = poly()\y
    SelectElement(poly(), p2)
    x2 = poly()\x
    y2 = poly()\y
    LineXY(x1, y1, x2, y2, farbe)
  Next p1
  FillArea(200, 200, farbe, farbe)
  StopDrawing()
EndProcedure

; ------------------------------------- Hauptprogramm

OpenWindow(0, 0, 0, 400, 400, "Polygon", #PB_Window_MinimizeGadget | #PB_Window_ScreenCentered)

InitKeyboard()
InitSprite()
OpenWindowedScreen(WindowID(0), 0, 0, 400, 400, 0, 0, 0)

Repeat

  Ereignis = WindowEvent() 
  ExamineKeyboard()
  ClearScreen(0)
  polydraw($FF0000)
  FlipBuffers()

Until KeyboardPushed(#PB_Key_Escape) Or Ereignis = #PB_Event_CloseWindow

Re: Vektorgrafik mit PB

Verfasst: 19.07.2010 13:58
von bobobo

Re: Vektorgrafik mit PB

Verfasst: 19.07.2010 14:08
von Lebostein
hm.. alle Links in dem Thread führen ins Leere...

Re: Vektorgrafik mit PB

Verfasst: 19.07.2010 14:34
von Lebostein
Cairo scheint schon mal eine interessante Alternative zu sein. Aber wahrscheinlich (konnte es noch nicht testen) für einen Echtzeit-Einsatz weniger geeignet. Kann man obiges Beispiel eigentlich auch mit OpenGL realisieren?

Das könnte vielleicht auch was taugen: http://de.wikipedia.org/wiki/OpenVG

Re: Vektorgrafik mit PB

Verfasst: 19.07.2010 14:37
von STARGÅTE
Du kannst das einfach und schnell mit DrawingBuffer erledigen.
http://www.purebasic.fr/german/viewtopi ... 31#p275731

Das "Plotten" der Polygone geht ja recht fix, nur das berechnen ist wohl in vielen komplizierten Flällen sehr langsam.

Ich selber bastel auch gerade an eine VectorGraphics Include (mit Verbindung zum SVG-Format)

Und wenn ich da halt eine gedrehte Ellipse mit AA zeichnen lassen will, ist nicht Plot langsam, sonden die ganzen berechnungen wo ein Pixel sein darf und in welcher intensität.

Von daher kannst du eigentlich ohne Probleme mit Plot() arbeiten und dich lieber um schnelle Berechnungen kümmern.
Zumal Fred selber sagte das Plot inzwischen schneller geworden ist.

Re: Vektorgrafik mit PB

Verfasst: 19.07.2010 17:30
von Lebostein
Danke für die Tipps.

Aber dieses OpenVG ist eigentlich genau dass, was ich brauche:
http://www.hu1.com/downloads/openvg_overview.pdf
http://www.khronos.org/openvg
Hohe Performance bei geringer CPU-Last (da primär für Kleingeräte entwickelt).

Hab nur noch nicht verstanden, wie und ob überhaupt man diese API in PB implementieren kann.