Ensimmäinen viesti ei enää kuvaa projektin nykyistä tilaa tarkasti. Lue viimeisimpiä viestejä niin tiedät, missä mennään. Tästä viestistä löytyy kuitenkin edelleen vanhoja demoja.
Seuraavassa vähän alustusta hommalle. Todennäköisesti siinä ei ole mitään kiinnostavaa, joten hyppä vaikka yli.
Olen tässä taas käyttänyt aikaani johonkin ihan muuhun kuin olisi pitänyt, nimittäin lojunut koneen ääressä netin syövereissä tietoa janoamassa, sekä koodaamassa. Tällä(kin) kertaa tuloksena on (yllätys yllätys, taas) jotain fysiikkaan liittyvää. Projekti alkaa olla sillä asteella, että katsoin hyväksi laittaa tänne jotain (keskeneräistä)matskua ensinnäkin ihan teidän kiusaksenne, ja toiseksi, oman itseni potkimiseksi persuksille. Toisinsaoen, kun julkaisen nyt jotain demoa, joku todennäköisesti alkaa jonkun ajan päästä hätyytellä, että milloinkas se itse kirjasto julkaistaankaan, eli koko homma ei jää vain tyhjänpantiksi kiintolevyni pohjimmaisille sektoreille lojumaan. Tämän alustuksen jälkeen päästääkin sitten asiaan..
Projektin tarkoituksena olisi tarjota kohtuullisen helposti CB:llä käytettävä sekä haluttaessa edelleen laajennettava (ja CB:llä koodattu) kirjasto fysiikka-, ja erityisesti räsynukkehahmomallinnusta varten. Lisäksi saattaa tulla yksinkertainen polygonipohjainen törmäystentarkastusjärjestelmä ja jollain päästä vetäistylla yksinkertaisella kaavalla laskettaviin voimiin perustuva rasitus-systeemi, joka mahdollistaisi esimerkiksi sillanrakennuspelin tms. Muita pienempiäkin featureja pitäisi vielä tehdä, mutta niiden ymmärtämiseski pitää ensin selvittää koko moottorin toimintaa.
Simulaatio perustuu enemmän ja vähemmän löyhästi ihan klassiseen Newtonin mekaniikkaan. Koko homman perustana ovat verteksit, pisteet joilla on ominainen massa, ja joihin voidaan kohdistaa voimia, sekä verteksejä yhdistävistä jäykistä "tangoista", jotka rajoittavat ja ketjuttavat verteksien liikettä.
Ohjelmallisesti asian voi käytännössä jakaa kolmeen osaan:
1. Kappaleiden liiketilaa kuvaavien suureiden hallinta (F = ma)
2. Verlet-integraattori, joka ajaa simulaatiota. Lisätietoa googlesta tai englanniksi Wikipediasta. Algoritmin vahvuus on siinä, että se ei käsittele nopeutta erillisenä suureena ollenkaan (kuten esim. Euler-integraattori tekee), vaan approksimoi hetkellisen nopeuden pisteen nykyisen ja edellisen sijainnin avulla. Menetelmä on kohtalaisen tarkka lyhyellä aika-askeleella ja säilyttää tasapainon erittäin hyvin. Lisäksi laskentatehovaatimus ei ole kovinkaan suuri.
3. Ohjelmalohko, joka käsittelee verteksien välisten tankojen vaikutukset sekä pitää verteksin peliavaruuden sisällä.
Tässä vaiheessa simulaatio toimii mainituilla perusjutuilla jo ihan hienosti, mutta aikaisemmin mainitsemani featuret siihen vielä haluaisin. Lisäksi joustavat "tangot" olisivat ihan hyödyllinen asia. Tosin jo nyt tangoille voi asettaa pituusvälin, jolla ne voivat vapaasti liikkua, tai maksimi/minimipituuden. Törmäyksentunnistuksen kaveriksi olisi kiva ympätä kitkavoiman mallinnus, eli esimerkiksi pyörällä voisi ottaa vauhtia vaakasuorasta pinnasta.
Sitten sitä näytettävää. En toistaiseksi julkaise lähdekoodia. Se tulee aikanaan, kunhan saan ominaisuuksia valmiiksi. Siihen asti teille pari demoa joilla leikkiä:
1. Aavesoturin BONE WORM'a vastaava yksinkertainen ohjelma
2. Jotain sekalaista. Vähän monimutkaisempi, mutta perusidea ei kovin paljoa muutu.
3. Ihkaoikea tikku-ukkoräsynukke. Liikutellaan nuolinäppäimillä, käyttää kehittyneempää "tankojen pituuden säätöä".
Tarkoituksena olisi tehdä piakkoin paremmin interaktiivinen demo, jossa rakenteita voisi luoda itse hiirellä. Se kuitenkin vie hetken aikaa, joten älkääpä innostuko liikaa.