Jak rysować krzywe hermitów za pomocą OpenGL, czy są jakieś wbudowane funkcje? Widziałem kilka przykładów on-line, które pokazują, jak używać ewaluatorów do rysowania krzywych Beziera, ale nie mogłem znaleźć żadnych informacji dla krzywych Hermite'a.Rysowanie krzywych Hermitów w OpenGL
Odpowiedz
Możesz przekształcić dowolną krzywą Hermita w krzywą Beziera, a następnie narysować. Są one po prostu zdefiniowane przy użyciu dwóch różnych baz w C3. Google nie był zbyt użyteczny i wydaje się, że jest to typowe pytanie, więc powinniśmy postarać się, aby odpowiedź StackOverflow była ostateczna, może z pewnym przykładowym kodem. Wrócę jutro z więcej.
Jak wspomniał Steven, możesz przekształcić sześcienną krzywą Hermita w sześcienną krzywą Beziera. To całkiem proste.
Typowa krzywa sześcienny Hermite'a jest zdefiniowana dwoma punktami i dwa wektory:
P0
- punkt początkowyV0
- pochodna zP0
P1
- punkt końcowyV1
- pochodna:P1
Konwersja do Baziera jest prosta:
B0 = P0
B1 = P0 + V0/3
B2 = P1 - V1/3
B3 = P1
Następnie można narysować krzywą Beziera używania i oceniający lub jakikolwiek inny sposób chcesz.
Niech wektor punktów kontrolnych dla twojego Beziera będzie [b0 b1 b2 b3] a wektor dla twojego Hermite'a [h0 h1 v0 v1] (v0 i v1 są pochodną/styczną w punktach h0 i h1). Wtedy możemy użyć postaci macierzowej pokazać konwersje:
Hermite'a do Beziera
[b0] = 1 [ 3 0 0 0] [h0] [b1] - [ 3 0 1 0] [h1] [b2] 3 [ 0 3 0 -1] [v0] [b3] [ 0 3 0 0] [v1]
(jest to dokładnie tak, jak w odpowiedzi Naaff jest powyżej).
Bézier do Hermite'a
[h0] = [ 1 0 0 0] [b0] [h1] [ 0 0 0 1] [b1] [v0] [-3 3 0 0] [b2] [v1] [ 0 0 -3 3] [b3]
Tak więc w matrycy tworząc to może nieznacznie bardziej skomplikowane niż w razie potrzeby (po kodzie wszystkie Naaff była krótka i punkt). Jest to przydatne, ponieważ możemy teraz bardzo łatwo wyjść poza Hermity.
W szczególności możemy wprowadzić inną klasyczną, sześcienną krzywą parametryczną: krzywą Catmull-Rom. Ma punkty kontrolne [c_1 c0 c1 c2] (w przeciwieństwie do krzywych Beziera krzywa przebiega od drugiego do trzeciego punktu kontrolnego, stąd zwyczajowa numeracja od -1). Konwersje do Beziera są następnie:
Catmull-Rom do Beziera
[b0] = 1 [ 0 6 0 0] [c_1] [b1] - [-1 6 1 0] [c0] [b2] 6 [ 0 1 6 -1] [c1] [b3] [ 0 0 6 0] [c2]
Beziera do Catmull-Rom
[c_1] = [ 6 -6 0 1] [b0] [c0] [ 1 0 0 0] [b1] [c1] [ 0 0 0 1] [b2] [c2] [ 1 0 -6 6] [b3]
mogę zrobić Hermite'a do pary Catmull-Rom też, ale oni są rzadko używane, ponieważ Bezier jest zwykle główną reprezentacją.
- 1. Rysowanie krzywych strzałek w płótnie HTML5
- 2. Rysowanie krzywych Beziera moim palcem w iOS?
- 3. Rysowanie krzywych Beziera między zestawem danych punktów
- 4. Rysowanie prostokąta prostokątnego OpenGL
- 5. Rysowanie sferyczne w OpenGL bez użycia gluSphere()?
- 6. Rysowanie punktów za pomocą nowoczesnego OpenGL
- 7. Rysowanie bufora renderowania poza ekranem w OpenGL ES (iPhone)
- 8. Szybsze rysowanie bitmap na kanwie Android lub OpenGL
- 9. Wygładzanie krzywych grafiki rdzenia
- 10. OpenCV Identyfikowanie linii i krzywych
- 11. libsvm do wykreślania krzywych ROC
- 12. punkt przecięcia 2 normalnych krzywych
- 13. Wykreślanie krzywych przeżycia w R z ggplot2
- 14. Chart.js: linie proste zamiast krzywych
- 15. Rysowanie wielokątów w formacie XML z Androidem
- 16. Rysowanie prostokąta w UIView
- 17. Rysowanie wielokątów w Swift
- 18. OpenGL lub OpenGL ES
- 19. Rysowanie trójkąta
- 20. Biblioteka krzywych JavaScript z operacjami boolowskimi
- 21. Wiele krzywych ROC na jednym wykresie ROCR
- 22. Rysowanie "otworów" w obszarze roboczym
- 23. Rysowanie drzew w Common Lisp
- 24. Rysowanie kształtu w UIImageView IOS
- 25. Rysowanie animacji strzałki w SVG
- 26. Rysowanie wielu prostokątów w GDI +
- 27. Rysowanie wykresu w rogu innego
- 28. Rysowanie klastrowanych wykresów w Pythonie
- 29. Rysowanie półokręgu w tle widoku
- 30. OpenGL: tworzenie złożonych i wygładzonych wielokątów