Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Do Mär 28, 2024 22:10

Foren-Übersicht » Programmierung » Mathematik-Forum
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 8 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Bézier-Kurve mit Dicke raytracen
BeitragVerfasst: Sa Sep 19, 2015 11:16 
Offline
DGL Member
Benutzeravatar

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 networkmy 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


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Sa Sep 19, 2015 19:36 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Nov 08, 2010 18:41
Beiträge: 769
Programmiersprache: Gestern
Kuckst du hier. Band 1 müsste dir weiterhelfen.

_________________
Meine Homepage


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: So Sep 20, 2015 19:15 
Offline
DGL Member

Registriert: Do Dez 29, 2011 19:40
Beiträge: 421
Wohnort: Deutschland, Bayern
Programmiersprache: C++, C, D, C# VB.Net
Von den "Gems"-Büchern kenne ich folgenden Artikel:
http://http.developer.nvidia.com/GPUGems3/gpugems3_ch25.html

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.

Um deine Frage zu beantworten wie weit ein Punkt tatsächlich davon entfernt ist, benötigt man leider mindestens eine Gleichung dritten Grades. Für die Vorgehensweise kannst du hier mal schauen:
http://blog.gludion.com/2009/08/distance-to-quadratic-bezier-curve.html

Ich bin mir nicht sicher, ob es sinnvoll ist, diese Funktion in einem Fragmentshader auszuwerten.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: So Sep 20, 2015 20:18 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Nov 08, 2010 18:41
Beiträge: 769
Programmiersprache: Gestern
Nu in meinen link ist der entsprechende Source knapp 500 Zeilen.... also nicht wirklich Shader fähig ? :)

Wobei eine Menge davon sind halt die Helper-Funktionen für Vektor und Bezier-Kurve.

_________________
Meine Homepage


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mo Sep 21, 2015 11:47 
Offline
DGL Member
Benutzeravatar

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 networkmy 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


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Di Sep 22, 2015 12:39 
Offline
DGL Member

Registriert: Do Dez 29, 2011 19:40
Beiträge: 421
Wohnort: Deutschland, Bayern
Programmiersprache: C++, C, D, C# VB.Net
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.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi Sep 23, 2015 09:01 
Offline
DGL Member
Benutzeravatar

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 networkmy 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


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Fr Sep 25, 2015 08:26 
Offline
DGL Member
Benutzeravatar

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.

Random Access Rendering of Vector Graphics(das ist wohl was dich interessiert, weil hier der kram auch auf mesh effizienter projeziert wird)
Artikel zum effizienteren arbeiten mit der Technik
Resolution Independent Curve Rendering(darauf basiert die ganzen Artikel)

Nvidia hatte sich das ganze geschnappt und dann die Quadric Bezier Kurven Programmiererfreundlicher erklärt.

Ich hab mal die Suchfunktion vom Forum genutzt und hier ist der Treffer.
http://delphigl.com/forum/viewtopic.php?p=72371#p72371

_________________
"Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren"
Benjamin Franklin

Projekte: https://github.com/tak2004


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 8 Beiträge ] 
Foren-Übersicht » Programmierung » Mathematik-Forum


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 10 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.

Suche nach:
Gehe zu:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.095s | 17 Queries | GZIP : On ]