ich schreibe gerade an meinem kleinen Paintprogramm und möchte nun gern, dass meine gezeichneten Linien glatter aussehen. Der Effekt wie auf dieser Webseite sieht einfach klasse aus und würde ich auch gern in meinem Programm haben. Allerdings ist der Code echt unübersichtlich und ich seh da leider nicht durch.
Aber kennt ihr vielleicht leichte Methoden wie ich den gleichen oder ähnlichen Effekt erzielen könnte? Besonders das mit dem Farbverlauf. Einfach klasse.
Ich denke mal ich muss eine Textur über die Linie legen. Will mich da im Moment einlesen. Hab noch nie mit Texturen gearbeitet. Aber bevor ich unnötig viel Energie verschwende und an der falschen Stelle suche, habt ihr vielleicht ein paar Tipps, Ideen und Vorschläge. Ich progge aufm Mac aber mein Programm sollte später auch auf anderen Plattformen laufen, falls es da irgendwelche Einschränkungen gibt.
Registriert: Di Apr 29, 2008 18:56 Beiträge: 1213
Programmiersprache: Delphi/FPC
Hey,
was meinst du mit "glatter"? Antialiasing? Da gabs schonma nen Thread dazu: HIER das mit dem Farbverlauf musst du nicht zwangsläufig mit einer Textur machen, da kannst du auch ainfach die Farbe mit glColor(r, g, b, a) für die Vertexs setzen. Wenn du allerdings so ne Art abgerundeten Pinsel haben willst, dann bietet sich eine Textur natürlich an. So schwer sollte das auch nicht sein, einfach eine leere Textur erstellen (in weiß mit alpha = 0) und dann einfach beim Malen an der Stelle des Stiftes den Alpha Wert erhöhen, oder auf 1 setzen. Dazu würd ich ein FrameBufferObject nehmen.
Also ich hab jetzt mal versucht mich in Framebufferobjekte einzulesen. So wie ich das verstanden habe, bieten diese eine Laufzeitverbesserung, wenn man mit Texturen arbeitet.
Außerdem unterstützen Framebufferobjekte kein AntiAliasing.
Aber wenn ich Texturen Benutze brauche ich doch kein Antialiasing mehr? Oder? Fand ich irgendwie komisch.
Weiterhin bin ich beim weiteren Recherchieren darauf gestoßen, dass man bei FBO glew nutzen sollte. Also so wie ich das verstanden habe, ist glew eine library, die extensions verwaltet. Aber mir wird nicht klar, wie man das gebrauchen könnte. Wozu? Viele Sachen sind mir immer noch ein Rätsel.
Also das ganze mit den schönen glatten Linien ist wohl doch nicht so einfach, wie ich gedacht habe.
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Naja, das mit glew zählt nur für C und konsorten. Für Delphi ist das alles schon durch dglOpenGL.pas abgedeckt.
Antialias hat erstmal nichts mit Texturen zu tun. Du zeichnest ja direkt in das FBO. Dabei wirst du im allgemeinen Treppeneffekte haben, weil kein Antialias geschieht. Du kannst das umgehen, indem du dein FBO größer machst, als es zum schluss gezeichnet wird. Dann wird der Effekt durch das runterskalieren reduziert.
greetings
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
Hm, je mehr ich zu dem Thema lese, umso mehr Fragezeichen entstehen.
Also ich hab mir jetzt folgendermaßen überlegt das zu machen:
Zunächst erstelle ich ein FBO, was ich zunächst größer als meine Linie mache, um Aliasing zu verhindern. Dort hinein lade ich die Textur, wobei ich zum Texturladen QT verwenden muss/möchte (Plattformunabhängigkeit) Dieses blöde glew lass ich einfach weg. Das hab ich irgendwie gar nicht gecheckt. Dann wird die Textur über die Linie beim Zeichnen gelegt.
Was meint ihr ist der Ablauf so korrekt?
Also wie gesagt es ist das erste mal dass ich mit FBOs und Texturen arbeite und da will ich nicht erst 3 Wochen um den Brei tanzen bevor ich ihn esse.
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Ok, zugegeben, ich hätte den Headpost nochmal lesen sollen. Antialiasing ist bei dir mit FBOs ohne eine passende Erweiterung denke ich nicht ohne großen Aufwand zu erlauben. Du wirst dich außerdem selber noch etwas in die Materie einlesen müssen, es sei denn es findet sich jemand, der das für dich raussucht und dir erklärt, mir fehlt dazu leider gerade die Zeit.
greetings
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
Registriert: Di Apr 29, 2008 18:56 Beiträge: 1213
Programmiersprache: Delphi/FPC
Hey,
mir ist immer noch nicht ganz klar, was du machen willst. Willst du einfach das Aliasing bei ner ganz normalen Linie (GL_LINE) weg haben? Dann benutzt ganz einfach das Hardware-Anti-Aliasing wie in dem Thread oben beschrieben. Wenn du nen runden Stift willst mit dem du nen Farbverlauf malen kannst, dann nimmst du ein FBO. Bei einem Klick wird der Kreis in das FBO gemalt (ohne glClear aufzurufen, das der alte Inhalt erhalten bleibt). Und dann zeichnest du den Inhalt des FBOs mit einem Farbverlauf. Sollte das bei dem FBO noch zu kantig sein (da du ja kein Hardware AA nutzen kannst) dann multiplizier sämtliche Größen und Variablen, die was mit dem FBO zu tun haben mit einer Konstante (normalerweiße 2, 4, 8, ...). Dadurch wird das FBO größer und feiner aufgelöst und beim Zeichnen (des FBO Inhaltes) rechnet OpenGL das ganze wieder runter.
Mitglieder in diesem Forum: Google [Bot], Majestic-12 [Bot] und 1 Gast
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.