Vektorgrafik mit PB

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
Benutzeravatar
Lebostein
Beiträge: 674
Registriert: 13.09.2004 11:31
Wohnort: Erzgebirge

Vektorgrafik mit PB

Beitrag 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
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Re: Vektorgrafik mit PB

Beitrag von bobobo »

‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Benutzeravatar
Lebostein
Beiträge: 674
Registriert: 13.09.2004 11:31
Wohnort: Erzgebirge

Re: Vektorgrafik mit PB

Beitrag von Lebostein »

hm.. alle Links in dem Thread führen ins Leere...
Benutzeravatar
Lebostein
Beiträge: 674
Registriert: 13.09.2004 11:31
Wohnort: Erzgebirge

Re: Vektorgrafik mit PB

Beitrag 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
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7032
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Vektorgrafik mit PB

Beitrag 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.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
Lebostein
Beiträge: 674
Registriert: 13.09.2004 11:31
Wohnort: Erzgebirge

Re: Vektorgrafik mit PB

Beitrag 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.
Antworten