Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Hallöchen,
Ich erinner mich dunkel, dass hier jemand schonmal Bézier-Kurven in einem Shader gerendert hat, daher hoffe ich, dass mich jemand mit den nötigen Quellen versorgen kann.
Mein Problem ist, ich möchte eine quadratische Bézier-Kurve mit gegebener Dicke in einem Fragmentshader rendern. Der Shader drapiert diese Kurve auf einem Terrain. Ich habe also sozusagen folgende Problemstellung:
Gegeben eine quadratische, zweidimensionale Bézier-Kurve C aus den Punkten p1, p2, p3 und einem Punkt p ist gesucht die kürzeste Distanz zur Kurve C.
Hat da jemand was zu?
viele Grüße, Horazont
_________________ 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
Allerdings wird dort scheinbar nur behandelt, ob ein Punkt auf einer Seite einer Bezierkurve liegt. Das geht deutlich einfacher, weil man dazu nur eine Gleichung zweiten Grades benötigt.
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Danke schonmal ihr beiden. Gleichung dritter Ordnung lösen kann man bestimmt im Fragmentshader machen, wenn man das geschickt baut. Man kann ja die Koeffizienten soweit wie möglich vorberechnen und dann braucht man nicht unendlich viel Präzision dafür, reicht sicher auf die 1. oder 2. Nachkommastelle genau.
Die Alternative wäre natürlich, das in eine Textur zu rendern, aber das pixelt dann halt beliebig rum, was ich recht unschön finde, oder ich brauche relativ hochauflösende Texturen.
viele Grüße, Horazont
_________________ 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
Wenn die Möglichkeit besteht es in eine Textur zu rendern, wären Signed Distance Fiel vlt. etwas für dich. Da pixelt jedenfalls gar nix und es lässt sich sehr gut stark skalieren.
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Richtig, Signed Distance Fields könnte ich mir mal anschauen zu dem Thema. Das könnte das Problem tatsächlich mehr oder minder elegant lösen.
viele Grüße, Horazont
_________________ 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 Mai 18, 2004 16:45 Beiträge: 2621 Wohnort: Berlin
Programmiersprache: Go, C/C++
Ich hatte kubische und quadratische bezierkurven im shader gerendert, vor vielen jahren mal. Man benutzt eine Approximation im Shader(die wird genauer, je näher man sich der Kurve nähert), man wandelt in einem preprocess die Stütz und Kontrollpunkte in den tangent space des meshes und packt sie z.B. in die 2.Texturkoordinaten bei OGL1-2 oder einfach so ins vertex layout bei OGL3-4. Entwickelt hat das Microsoft Research, mit Hoppe als Leiter.
Mitglieder in diesem Forum: 0 Mitglieder und 56 Gäste
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.