Registriert: So Okt 16, 2011 12:25 Beiträge: 4
Programmiersprache: Java, C
Hallo zusammen
Ich muss (noch) folgende schwarze Fläche malen und bin mir nicht sicher wie ich das am schlausten anfange. Die Kugel ist nicht das Problem sondern die Kurve. Meine Idee: 2 Bezier Kurven und dann alle zwischenliegenden Punkte ausfüllen? Oder gehts einfacher? Habe bisher noch nicht mit Bezier Kurven in OpenGL gearbeitet.
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Also, Bézierkurven sind an sich nur ein Polynom 3. Grades. Das nur ist vielleicht etwas übertrieben, denn letztendlich reicht das schon, damit der Betrag nicht (analytisch) integrabel ist.
Prinzipiell müsstest du die Kurve in Stückchen teilen und dann ein Polygon daraus bauen (das dann ggf. noch triangulieren). Dazu würde ich die linke und die rechte Kurve „ablaufen“ und in regelmäßigen Abständen. Leider hängt es von der Kurve ab, wie klein deine Schritte sein müssen, damit es „rund“ wirkt. Was ich oben sagte bedeutet nämlich im Klartext, dass du keine einfache Funktion finden kannst, die von „Länge der Kurve“ auf „Parameter t“ abbildet, also du kannst nicht sagen: Ich möchte den Punkt, der 3cm vom Anfang der Kurve entfernt ist, ohne großen Rechenaufwand zu betreiben. Ich habe vor einiger Zeit dann mal Code (tt3d/master /modules/geometry/geometry.pas #L660) geschrieben, um die Länge der Kurve zu approximieren. Für Kurven, die sich nicht schneiden, bzw vorallem nicht zu dicht an sich selber herankommen (sowas wie ein kleines „e“ z.B. kommt bei der rechten Bogenspitze zu dicht an sich selbst als dass der Code noch sicher gut wirken würde). Anstatt da die Länge aufzuaddieren, könntest du die Koordinaten des Punktes nehmen und zu einer Liste hinzufügen. Das machst du mit beiden Kurven und daraus kannst du dir dann ein Polygon bauen (entweder, indem du die einfach nacheinander als Vertices hinzufügst oder, etwas schlauer, interleaved mit Triangle Strip. Eventuell musst du da aber aufpassen, dass du bei beiden Kurven gleichviele Punkte hast).
Viel Erfolg!
_________________ 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: 2623 Wohnort: Berlin
Programmiersprache: Go, C/C++
2. Möglichkeit ist es über ein Fragmentshader und 2 Triangle pro Bezierkurve zu rendern. Dieser Ansatzt ist Pixelferfekt benötigt aber neben den Shader mit ner approximation noch ein Preprocess, um die Stützpunkte und Kontrollpunkte in Eye Space zu transformieren. Diese Technik wurde von Microsoft entwickelt und im US-Markt Patentiert. MS nutzt es für das Rendern von SVG und TrueTypeFonts über die GPU, ohne Trianglemeshes zu tesselieren oder von der Auflösungs abhängig zu sein. Erfinder der Endgültigen Lösung ist Hugues Hoppe von Microsoft Research Programm, hier die Seite http://research.microsoft.com/en-us/um/people/hoppe .
Mitglieder in diesem Forum: 0 Mitglieder und 4 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.