Kanyarok bezier a játékot bemutató bemutatóhoz

Kanyarok bezier a játékot bemutató bemutatóhoz

Mindannyian tudjuk, mi a görbe. Íme néhány példa.

Kanyarok bezier a játékot bemutató bemutatóhoz

Kanyarok bezier a játékot bemutató bemutatóhoz
Kanyarok bezier a játékot bemutató bemutatóhoz
Kanyarok bezier a játékot bemutató bemutatóhoz

A játékokban a Bezier-görbék néha hasznosak az útvonal leírásához: egy versenypályán egy versenypályán, vagy olyan vonalakban, ahol olyan rajzvonalak vannak, mint a Flight Control vagy a hurkolt pillangópálya, amely az RPG világában él.

Kanyarok bezier a játékot bemutató bemutatóhoz
Kanyarok bezier a játékot bemutató bemutatóhoz
Kanyarok bezier a játékot bemutató bemutatóhoz

A Bezier-görbék annyira népszerűek, mert matematikai leírásaik nagyon kompakt, intuitív és elegánsak. Ezek a könnyen kiszámítható, könnyen kezelhető magasabb dimenzióban (3D és magasabb), és köthető össze, hogy bármilyen alakú lehet képzelni.

Ebben a bemutatóban adom meg az algoritmusok végrehajtásához szükséges utasításokat, hogy használhassa Bezier görbékkel a játékodat.

Kezdjük a matematikával. Matematikailag leírhatjuk a Bezier-görbét egy függvényben. A függvény egy paramétert vesz fel. A függvény értéke a görbe egyik pontja; ez a paramétertől függ. és az ellenőrzési pontokból álló pontokból. Az első és az utolsó ellenőrzési pont a görbe végpontja. Általános szabályként a görbe nem halad át más vezérlőpontokon.

Az érték 0 és 1 között lehet. A 0 érték megfelel a görbe kezdőpontjának, az 1-es érték megfelel a görbe végpontjának. Az intervallumban szereplő értékek megfelelnek a görbe hátralévő pontjainak.

Íme egy példa a Bezier-görbe legegyszerűbb típusára, szegmensre:

De a két egyenlet rövidített jelölése, amely különálló koordinátákat ad:

Kanyarok bezier a játékot bemutató bemutatóhoz

A pontok ellenőrzési pontok. Amikor. az egyenlet jobb oldala megegyezik az első vezérlőponttal - a szegmens kezdetével. Amikor. kapunk egy pontot. a második vezérlőpont a szegmens vége.

További érdekes formákhoz több ellenőrzési pontra van szükségünk. A vezérlőpontok száma határozza meg a görbe mértékét. Két iránypont szükséges a lineáris (első fokú) görbékhez, például a fenti szegmenshez. A második fokozat vagy a négyzetes görbék esetében három vezérlőpontra van szükségünk.

Kanyarok bezier a játékot bemutató bemutatóhoz

A leggyakrabban használt kúp alakú görbék (vagy harmadik fokú görbék), ezért ebben a kézikönyvben a köbös görbéket tárgyaljuk. Ezek létrehozásához négy vezérlőpontra van szükséged, és talán már ismered a vektorgrafikus csomagok használatát (igen, ugyanazok a körök, amelyek megváltoztatják a görbék alakját a Freehand vagy az Inkscape programokban, és ezek a vezérlőpontok).

Kanyarok bezier a játékot bemutató bemutatóhoz

A sárga vonalak ugyanabba az irányba húzódnak, mint a görbe végein lévő érintőképernyők, a továbbiakban ezek a sárga szegmensek helyezkednek el, annál erősebb a "görbe" a tangensek irányában.

A köbös Bezier görbék formulája:

Nem valószínű, hogy nagyobb görbékre lenne szüksége. Ha igen, akkor a képlet egyszerű, de megköveteli a binomiális együtthatók ismereteit. A részletek a forrás végén találhatók.

A geometriában mindig több probléma merül fel, mint amire először gondolnánk, ami hosszadalmas hibakeresést eredményezhet.

Íme a megfelelő 2D Bezier görbék:

Kanyarok bezier a játékot bemutató bemutatóhoz

Minden végpont azonos távolságra van egymástól. 1. Hajlítás, görbület vagy hurok nélkül. 2. Hajlítási görbék, gyűrődések vagy hurkok nélkül. 3. Hajlított görbe. 4. Hurok görbülete. 5. Egyenes vonal (az inflexiós pontnál a görbe megváltoztatja a hajtás irányát)

Az 5 degenerált eset a legbonyolultabb. Lehetnek a következő lehetőségek:

  • nincs átfedés
  • a görbe kétszer megszakad egy vagy mindkét végén
  • a görbe háromszor eltörik, valahol a végek között

A 3D-ben a hurkok és a törések kevésbé problémásak, mivel csak akkor fordulnak elő, ha az összes pont azonos síkban helyezkedik el. A 3D-ben mindig megváltoztathatja az egyenes irányát (különösen olyan esetekben, mint a 2., 4. és 5. eset).

A matematikai képlet könnyen kódolható. Az alábbiakban egy olyan algoritmust hajtunk végre, amelyben bizonyos optimalizálást már elvégeztünk a köztes eredmények tárolásával és újrafelhasználásával.

A kód a C #-ben található, de a Java, a C ++ és a legtöbb más nyelvre történő fordítása nem okoz különösebb problémát.

(A következő funkciók 2D-ben fognak működni, ha a Vector3 helyett Vector2 van.)

Kapcsolódó cikkek