Opengl ES tunnel egy útvonalon

Opengl ES tunnel egy útvonalon
2012-03-20T16:28:07+01:00
2012-03-21T21:14:42+01:00
2022-11-25T02:55:39+01:00
jackinthebox
Van egy görbém, ami önmagába tér vissza (pl bezier)

azt szeretném, hogy ennek a görbének a pontjai legyenek egy tunnel (csatorna) alap pontjai

tehát: 2 pont között létrehozni 1-1 kört, aminek 8 csúcsa van pl. ez a 8-8 csúcs lesz az a 8-8 pont, amit összekötök, ezáltal létrejön 1 szegmens tunnel, és így tovább. minden egyes él-él közt tehát lesz 2 TRI, 2 db háromszög. azaz 1 szegmensnél lesz 16 TRI.

ezeknek a pontoknak a kiszámolása érdekelne elsőre.
a kör képletét tudom, menne is a 8 pont számítása, viszont ha jól sejtem kell normál, binormál, tangens, és ezek alapján kéne valahogy meghatározni őket.

remélem érthető kb mit szeretnék.
Hogyan kell ilyet?
Mutasd a teljes hozzászólást!

  • Szia,

    Legyen először a Bezier görbéd XY síkban lévő síkgörbe.
    Bezier(t) t=0..1

    1. érintő irányszöge:
    A görbe egy pontja Bezier(tP)=P(xp,yp,zp), ahol az érintő irányszögénektangense: tangensalfa=(Bezier(tP+dt)-Bezier(tP))/dt
    , ahol dt megfelelően kicsi érték (pl:1/1000000), tulajdonképpen dt=0 határértéket keressük.

    2. Koordinátarendszer elforgatás
    Az alfa szöggel el kell elforgatni Z tengely körül a koordináta rendszert.

    x=x*cosalfa+y*sinalfa
    y=-x*sinalfa+y*cosalfa
    z=z

    3. Koordinátarendszer P-pontba transzformálás

    X=xP+x*cosalfa+ysinalfa
    Y=yP-x*sinalfa+ycosalfa
    Z=zP+z

    4. ZX-síkban kiszámolod a kör pontjait, (x és z koordinátáid lesznek, nem x és y) , a kapott x, y=0, z koordinátákat behelyettesíted az előző egyenletbe. Megkapod a X,Y,Z koordinátákat, amikre felületet kell feszíteni.

    Ha térgörbéd van, lesz egy beta szöged (még egy differenciálás).
    Tovább bonyolódik a forgatás.
    Mutasd a teljes hozzászólást!
  • Kimaradt egy képlet

    1. érintő irányszöge:
    A görbe egy pontja Bezier(tP)=P(xp,yp,zp), ahol az érintő irányszögénektangense: tangensalfa=(Bezier(tP+dt)-Bezier(tP))/dt
    , ahol dt megfelelően kicsi érték (pl:1/1000000), tulajdonképpen dt=0 határértéket keressük.

    P(xp,yp,zp)=Bezier(tP) 0<tP<1
    P'(xp',yp',zp')=Bezier(tP+dt) dt elég kicsi érték dt=1/1000000

    tangensalfa=(yp'-yp)/(xp'-xp)

    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd