Keresés

Bemutatkozás

A böngészők képesek webgl 3D tartalmak megjelenítésére is, de a kód megírása felkészült programozót igényel. Ezt az oldalt azért fejlesztem, hogy egyszerű utasításokkal könnyen, és gyorsan lehessen ilyen tartalmakat készíteni programozási tudás nélkül is. Az oldal ingyenes, ezért bármilyen támogatásnak örülök. (megosztás, reklámozás, anyagi támogatás.)

Niethammer Zoltán


PayPal azonosító:
niethammer.zoli@gmail.com 

AR marker

A marker egy olyan kép, amelyet a kamera 3D viszonyítási pontnak tekint, ha betöltesz egy AR tartalmat. Az oldalon található tartalmak a következő képet használják:

 

Ajánlott oldalak

Fizikai szimuláció

Sikerült integrálnom a webglbasic rendszerbe a oimo.js plugint. Ez lehetővé teszi, hogy a gömb, a téglatest, és a henger virtuális testeket valódi fizikai tulajdonságokkal egészítsük ki. 

Beállítható egy gravitációs mező vektor is, ami minden testre érvényes, illetve szimulálja a script az ütközéseket, a surlódást is.

Java script szinten elég összetett a kódolás, ezért itt is használtam a szokásos technikát, vagyis néhány basic szerű parancs beírásával generáljuk az összetett kódot.

A képre kattintva új ablakban indul a demo. A RESET gombbal minden gömb kap egy lefelé írányuló sebességvektort.

 

 

Gravitáció

Első lépés a gravitáció vektorának beállítása. A normál földi gravitáció az Y tengely irányában lefelé mutat: gravitáció(0,-10,0) A vektor hossza megadja a gravitáció erősségét is. A valóságtól eltérő, tetszőleges irányú gravitáció beállítható. A gravitáció(0,0,0) parancs esetén a testek szabadesése megszűnik, de az ütközések szimulációja nem!

Szimuláció bekapcsolása
Második lépésben csak be kell írni a fizika.start() parancsot, vagy röviden: fizika.start

 

Testek elhelyezése a virtuális térben

Ez pontosan úgy történik, mint a normál webglbasic kódolásnál. Használható a szín, a textúra, a hely, a forgás parancs. Geometriából csak a gömb, henger, téglatest! A példában 50 db téglatestet generálok, és a lefelé mutató gravitációs vektor miatt mind lefele zuhan.

 

Test mozgása

Alapesetben minden test elmozdulhat a gravitáció miatt. Ez kikapcsolható a test.mozgás(ki), vagy test.mozgás(off) paranccsal.

A példában egy nagyobb lapos téglatestből készítettem padlót. Kikapcsolva a mozgását, a lezuhanó téglák visszapattannak róla.


 

Sebességvektor

Minden testnek adható egy kezdeti sebességvektor, ami a jelenet betöltődésekor aktiválódik.

Fontos, hogy a testnek legyen egyéni neve, amit a DEF kulcsszóval lehet megadni. Ezután tudunk hivatkozni az adott testre a test.sebesség(NÉV, x,y,z) paranccsal.

A példában a PLANET1, és a PLANET2 gömbök azonos méretűek, de az első 4x nagyobb sebességet kap, mint a második. Ezért szinte lelöki a jobboldali gömböt a padlóról.

 

RUGALMASSÁG

A test rugalmassága meghatározza, hogy ütközéskor mennyi energiát veszít. Az 1-nél kisebb rugalmassági tényező esetén fokozatosan elveszti az összes mozgási energiáját, és egy idő múlva a sebessége nulla lesz. A szimuláció megengedi 1-nél nagyobb rugalmasság használatát, ami azzal jár, hogy minden ütközésnél nagyobb lesz az energiája.

A példában a falak 1-es rugalmassággal rendelkeznek, a baloldali gömb 0.8-as, a jobboldali 1.2-es értékű.

 

SÚRLÓDÁS

A súrlódási tényező 0..1 közötti szám. Minél kisebb, annál jobban „csúszik” a test egy másik testen. A példában a lejtő 0.5-es értékű, a kockák pedig 0.3, 0.6, 0.7 értékűek.

 

PERDÜLET

A sebességvektorhoz hasonlóan működik. A jelenet betöltésekor kaphat a test forgási energiát. A rugalmasság, és a súrlódási tényezők csökkenthetik majd a perdületet.

A példában viszont 0-ra állítottam a sutlódást, és a rugalmasság is 1. Ezért semmi sem csökkeni a perdületet, és a sebességet.

 

FELADATOK

Feladatnak neveztem el azt az interaktív lehetőséget, amikor a felhasználó egy gombra kattintva beleavatkozhat a test fizikai jellemzőibe.

A feladat utasítás argumentumában kell a gomb nevét megadni: feladat(Alaphelyzet - Gyors)

Ezután kell felsorolni a feladat egyes összetevőit:

  • hely megváltoztatása: feladat.hely(LABDA, -10,10,0)
  • sebesség módosítása: feladat.sebesség.x(LABDA, 10)
  • perdület módosítása: feladat.perdület.x(LABDA, 0)

Végül le kell zárni az adott feladatot: feladat.vége