Curves bezier pentru tutorialul tău de jocuri

Curves bezier pentru tutorialul tău de jocuri

Știm cu toții ce este o curbă. Iată câteva exemple.

Curves bezier pentru tutorialul tău de jocuri

Curves bezier pentru tutorialul tău de jocuri
Curves bezier pentru tutorialul tău de jocuri
Curves bezier pentru tutorialul tău de jocuri

În jocurile de curbe Bezier sunt uneori utile pentru a descrie modul: modul în care cursele pe pista într-un joc de curse, sau o linie într-o linie de desen jocuri, cum ar fi de control al zborului, sau fixat traiectoria fluturele creșterea că el trăiește în lumea RPG.







Curves bezier pentru tutorialul tău de jocuri
Curves bezier pentru tutorialul tău de jocuri
Curves bezier pentru tutorialul tău de jocuri

Curbele Bezier sunt atât de populare, deoarece descrierile lor matematice sunt foarte compacte, intuitive și elegante. Ele sunt ușor de calculat, ușor de utilizat în dimensiuni mai mari (3D și mai înalte) și pot fi conectate împreună pentru a reprezenta orice formă vă puteți imagina.

În acest tutorial vă voi da instrucțiunile necesare pentru implementarea algoritmilor, astfel încât să puteți utiliza curbele Bezier în jocurile dvs.

Să începem cu matematica. Din punct de vedere matematic, putem descrie curba Bezier pentru o funcție. Funcția are un parametru. Valoarea funcției este un punct pe curbă; depinde de parametru. și dintr-un set de puncte numite puncte de control. Primul și ultimul punct de control sunt punctele finale ale curbei. Ca regulă, curba nu trece prin alte puncte de control.







Valoarea poate varia de la 0 la 1. Valoarea 0 corespunde punctului de pornire al curbei, valoarea 1 corespunde punctului final al curbei. Valorile din interval corespund celorlalte puncte ale curbei.

Iată un exemplu de cel mai simplu tip de curbă Bezier, segment:

Dar notația abreviată pentru două ecuații care dau coordonate separate:

Curves bezier pentru tutorialul tău de jocuri

Punctele sunt puncte de control. Când. partea dreaptă a ecuației este egală cu primul punct de control - începutul segmentului. Când. obținem un punct. al doilea punct de control este sfârșitul segmentului.

Pentru forme mai interesante, avem nevoie de mai multe puncte de control. Numărul de puncte de control determină gradul de curbă. Două puncte de control sunt necesare pentru curbele liniare (de gradul I), cum ar fi segmentul de mai sus. Pentru gradul al doilea, sau pentru curbele patrate, avem nevoie de trei puncte de control.

Curves bezier pentru tutorialul tău de jocuri

Curba cilindrică (sau curbe gradul al treilea) sunt cele mai frecvent ispolzuyuemymi, și așa vom discuta curbele exact cubi în acest manual. Pentru construcția lor necesită patru puncte de control, și, probabil, sunteți deja familiarizați cu utilizarea lor în pachete de grafică vectorială (da, aceste cercuri sunt aceleași folosite pentru a modifica forma curbelor în programele Freehand sau Inkscape este punctele noastre de referință).

Curves bezier pentru tutorialul tău de jocuri

Liniile galbene sunt întinse în aceeași direcție ca și tangenta la capetele krivoy.Chem situate pe segmentele galbene, cu atât mai puternic „întins“, în direcția curbei tangenta.

Formula pentru curbe cubice Bezier:

Este puțin probabil să aveți nevoie de grade mai înalte ale curbei. Dacă este așa, atunci formula este simplă, dar necesită cunoașterea unor coeficienți binomiali. Puteți găsi detaliile într-una din sursele de la sfârșitul articolului.

În geometrie, există întotdeauna mai multe probleme decât vă puteți gândi la început, ceea ce poate duce la o căutare lungă de erori.

Iată curbele 2D Bezier corecte:

Curves bezier pentru tutorialul tău de jocuri

Toate punctele de capăt se află la aceeași distanță unele de altele. 1. Curba fără inflexiune, încrețire sau buclă. 2. Curbă cu o inflexiune, fără crestături sau bucle. 3. Curba cu creion. 4. Curba cu o buclă. 5. Linia dreaptă (la punctul de inflexiune, curba schimbă direcția de pliere)

Cazul degenerat 5 este cel mai complicat. Pot exista următoarele opțiuni:

  • nici o suprapunere
  • curba se rupe de două ori la unul sau la ambele capete
  • curba este ruptă de trei ori, undeva între capete

În 3D, buclele și fracturile sunt mai puțin problematice, deoarece ele apar doar atunci când toate punctele se află în același plan. În 3D, puteți schimba întotdeauna direcția liniei drepte (mai ales pentru astfel de cazuri ca 2, 4 și 5).

Formula matematică este ușor de tradus în cod. Mai jos este implementarea unui algoritm în care s-au făcut deja unele optimizări prin stocarea și reutilizarea rezultatelor intermediare.

Codul este în C #, dar traducerea în Java, C ++ și majoritatea altor limbi nu ar trebui să cauzeze probleme particulare.

(Următoarele funcții vor funcționa în 2D dacă Vector3 este înlocuit cu Vector2.)







Articole similare

Trimiteți-le prietenilor: