Kirjautuminen

Haku

Tehtävät

Keskustelu: Projektit: nxPascal

Sivun loppuun

User137 [15.08.2011 18:08:23]

#

Aloittelin OpenGL ohjelmointia Delphillä vuosia sitten. Ajan myötä kehittyi pienimuotoinen pelimoottori joka nykyään kääntyy Delphillä ja Freepascal Lazaruksella. Delphi on tietty kaupallinen pääasiassa mutta Lazarus joka on open source, saa Windowsille ja Linuxille ilmaiseksi.

Kirjasto on suunniteltu tukemaan ja helpottamaan erityisesti pelien tekemistä mutta miksei se soveltuisi mihin tahansa muuhunkin. Tehokkuuden ja selkeyden vuoksi sisäinen rakenne on mennyt monta kertaa uusiksi, mutta nykyiseen olen jo itsekin varmaan lopullisesti tyytyväinen. Paljon käytän luokkia, eli "grafiikkamoottori" itse ei ole ollenkaan proseduraalinen, mutta matematiikkakirjastot on.

Sisältää mm.
- Matematiikkakirjastot erikseen 2D ja 3D:n. Paljon apufunktioita eri peliongelmiin.
- Tekstuurien hallinta (PNG, JPG, BMP)
- Renderöintiasetusten pino. (Add/Sub blend, polygonien piirtopuolet, valaistus)
- 2D-tila, johon sopivat piirtokäskyt. Osaa piirtää patterneihin jaetun kuvan skaalattuna tai pyöritettynä.
- Vertex array luokka.
- Frame buffer luokka.
- GLModel luokan mainihen vaan ohimennen kun siihen on tulossa isoja muutoksia. mm. OBJ tuki vasta tulossa, mutta käytännössä nykyinen osaa jo vertex-animoinnin jos datan osaa ladata.
- Käyttöliittymä johon on myös oma suunnittelutyökalu. Pystyy käyttämään siirrettäviä ikkunoita, frameja, nappeja, pudotuslistoja jne, mutta tuo työkalu on hieman vaiheessa vielä.
- Äänille käytännöllinen luokka joka hyödyntää OpenAL-kirjastoa.
- Verkkoluokka käyttää monisäikeistä Synapsea. Käyttäjän authentikointi, teksti ja binääridata salattuna tai ilman... ei testattu tuota demoa enempää, mutta siinä ei ole ollut ongelmia.

Tuosta on lähdekoodi ja demoja ulkona käännettynä sekä lähdekoodilla (ikkunan luonti kahdella tapaa, 3d-mallin käyttö, tcp- ja udp-verkko samassa ohjelmassa, reitinhaku ja framebuffer).

Lisätty google-codeen: http://code.google.com/p/nxpascal/
Siellä on tiedostot, demot, kuvat sun muut.

Alkuperäinen projektisivu: http://www.pascalgamedevelopment.com/showthread.php?8785-nxPascal

Metabolix [21.08.2011 17:09:27]

#

Hienoa, että joku yhä koodaa Pascalilla!

Mainitsemaltasi foorumilta lataaminen vaatisi tosiaan rekisteröitymisen. Suosittelen projektin laittamista näppärämmin esimerkiksi GitHubiin tai Google Codeen, ettei tarvitse kikkailla epämääräisillä tiedostolinkeillä. Samalla saa versionhallintatyökalut, bugtrackerin ja muuta kivaa. Parhaimmillaan voisit saada projektillesi lisää kehittäjiä.

User137 [15.10.2011 23:53:41]

#

Pakko laittaa taas linkki uusimpaan demoon:
http://www.youtube.com/watch?v=oa7vw20rcE8

Uusia asioita: partikkeli-engine, rautalankapiirto, musiikit käyttäen BASS-kirjastoa. Tukee mm. mp3, ogg, mod, xm ja monia muita muotoja.

Sitten myös QuadTexture-luokka jolla onnistuu pikselintarkkojen kuvien lataaminen epätavallisella kuvakoolla. Grafiikkakortit tukee tavallisesti kuvakooissa vain kakkosen potensseja (64, 128 jne), joten 600x600 kuvan joutuisi lataamaan 1024x1024 tekstuurikehykseen. QuadTexture lataa sen neljään pienempään tekstuuriin joiden yhteensä käyttämä muisti olisi optimaalisemmin 640x640. Tuo videodemo käyttää taustakuvana 800x600 QuadTexturea.

User137 [28.02.2012 18:42:36]

#

Projekti on nyt aloitettu Google Codessa:
http://code.google.com/p/nxpascal/

Sitten pitäis vielä saada SVN hässäkät tehtyä. TortoiseSVN on käytössä koneella. Lazarus ja ite freepascal kääntäjä kumpikin päivittyy SVN kautta, mutta uploadi on vieras homma.

esim. Mitä eroa on trunk/ ja branches/ hakemistoilla?

Metabolix [28.02.2012 19:44:11]

#

SVN ei ole minusta aivan nykyaikainen valinta versionhallinnaksi, vaikka vielä vuosi sitten suunnittelin itsekin sitä käyttäväni. Kyllä Git (tai Mercurial tai Bazaar) on opettelemisen arvoinen. Mutta ihan miten vain.

User137 kirjoitti:

esim. Mitä eroa on trunk/ ja branches/ hakemistoilla?

"Trunk" tarkoittaa projektin ensisijaista kehityssuuntaa. Pienessä projektissa yleensä käytetäänkin pelkästään tätä. Muihin haaroihin voi laittaa suuria muutoksia, joiden kohtalo on vielä epävarma, tai vaikka vanhoja versioita, joihin on tarkoitus vielä tehdä päivityksiä. Esimerkiksi PHP:n SVN-varastossa trunk on yleisesti kehitysversio ja versioilla 5.3 ja 5.4 on omat haaransa, joihin tulevat kyseisten versioiden tietoturvapäivitykset.

User137 [28.02.2012 20:29:18]

#

No sain kuitenkin laitettua trunkkiin melko helposti. TortoiseSVN->Add, ja SVN Commit.

User137 [03.05.2012 13:13:36]

#

Lisenssi muuttu just GPL -> LGPL. Enpäs tajunnu aiemmin että jos käyttää vaikka pelissään yhtä kirjastoa joka on GPL-lisenssillä, niin pelistä on pakko myös julkaista lähdekoodi. LGPL sallii ilmaiskirjaston käytön, mutta myös kaupallisen pelin tekemisen.

edit: LGPL -> MIT ... herranjestas. Ja LGPL ei sallinut lähdekoodin käyttöä muissa projekteissa.

User137 [11.08.2012 14:05:27]

#

Olis kiva jos joku muukin kiinnostuis projektista, olen edelleen ainut kehittäjä, ja kukaties ainut käyttäjä... ainakaan kukaan ei ole ilmoittanut itsestään :D

Viimeaikasia muutoksia mm.
- Wikiin lisätty pieni opas SVN-version asentamiseen Windowsille, mikäli tuntuu vaikealta lähteä liikkeelle.
- nxData: Tämä on se toisessa threadissä mainittu pakkaava ja monisäikeinen datavarasto. Soveltuu esim palikkapohjaisen maailman tehokkaaksi muistiksi.
- Tukee nyt oletuksena kaikenkokoisia tekstuureja, ei enää edes yritä skaalata kakkosen potensseja kuvista. Aiemmin oli pieni bugi joka aiheutti niissä ongelmia. (glTexImage2D internalformat ei saa olla 3/4, vaan GL_RGB/GL_RGBA jne. Tämä vanha tapa voi vielä löytyä jostain tutoriaaleista.)
- nxGame: Lisätty luokka joka pitää pelin rungon kasassa, hiiri (voi esim. lukita hiiren keskelle näyttöä, ja käyttää FPS-pelien tyyliin), näppäimistö, framerate:n hallinta jne. Lisätty uusi demo "game-template" jota voi käyttää pohjana tämän luokan käytölle. Kun peliprojektin eri osa-alueet on selkeästi omissa osissaan, niin kehitystyö on helpompaa.

Sitten joku viikko sitten harjottelin GLSL fragment-shaderillä normaalimappausta. Sillä saa aika näyttävää jälkeä aikaan, mutta ei ole vielä lisätty luokkaa grafiikkamoottoriin. Teen sen jossain vaiheessa.

Ja edelleen kaiken tuon pitäisi toimia kaikilla käyttöjärjestelmillä. Delphillä ja Lazaruksella.

lossi [22.07.2013 02:12:13]

#

Moi
Hieman hitaasti asioihin ehtivänä henkilönä huomasin aihepiirisi.
Sinänsä itse lopetin pelien ohjelmoinnin 80-luvulla, mutta 3-D on yhä lähellä. Erityisesti 3-D kiertojen käsittely oli hakusessa kunnes jotkut kertoivat Hamiltonin kvaternioista.(Turhaan tuli yritettyä olla matemaattisesti lahjakkaampi kuin on) Niiden avulla pystyy tekemään melko yksinkertaisen tulkin jolla voi helposti käsitellä tulkattavaa tekstiä. Puolalaista notaatiota käyttäen ohjelmakoodin pituus lienee tuhannen ja kahden välissä. Tätä kautta pelimoottorin ohjaus olisi jokaisen käyttäjän omissa käsissä.

Heikki Lossi
heikki.lossi@sepa.fi

User137 [22.07.2013 12:10:34]

#

En oikein ymmärrä viestisi sisältöä Puolalaiseen notaatioon liittyen... Tiedän kyllä että 3x3 matriisin voi ilmaista 4 luvun vektorina, kvaterniona. Nämä funktiot on lisätty nxPascaliin aikoja sitten.

Kun kerran nostit ketjua esille, niin mainihen yhden tärkeimmistä lisäyksistä; simplex-noise-luokka. Se on Perlin-noisen jälkeläinen, ja tukee helposti neliulotteistakin kohina-karttaa. Tällä tekniikalla siis voi generoida satunnaisia korkeuskarttoja tai pelimaailmoja, kuten Minecraft. Kunhan tiedossa on siemenluku, niin minkä tahansa koordinaatin arvo on aina sama (hallittu satunnaisuus).

User137 [12.08.2013 01:20:09]

#

Mistä lie repäisin idean, mutta tuli melko viihdyttävä demo tehtyä
http://www.youtube.com/watch?v=fS6Nb9UQBI8&list­=PLraemX84dJwUgp9IcXUS0U4lvdwLFumA7&index=1

Win32-version saa ladattua tuolta: https://www.dropbox.com/s/wm275cn89k8q1go/Walkers_demo.zip

lossi [09.09.2013 02:19:18]

#

Olen ilmiselvästi liian vanha tähän touhuun.
Olen kuitenkin ohjelmoinut tulkin Lazarukseen, joka tulkkaa yksikertaista koodia.
Ohjelma tuottaa svg-kuvan tekstitiedoston pohjalta.
Ohjelman käyttämän 2-ulotteisen osan voi helposti muuttaa 3 tai 4-ulotteiseen.
Kaksiulotteiset pisteet vain useampaan ulottuvuuteen.
Viivat muuttuvat helposti kolmioiksi.
Svg-muodon muunto ply-muotoon ei liene ongelma.

Ohjelma löytyy netistä:
www.saunalahti.fi/lossi/kotona/Ilmaisohjelmat.html
Kohdassa Tulkkikansio Lazarukseen.

Lisäys:

Ai niin
Se minun kotisivun viime vuosisadalla tekemäni taustakuva on kvasi-satunnainen kohinakartta päältäpäin.

Heikki

Lisäys:

Tarkennus

Kotisivu on
www.saunalahti.fi/lossi

Metabolix [09.09.2013 15:29:12]

#

lossi: Tällä sivulla keskustellaan nxPascal-projektista. Jos haluat keskustella muista asioista, ole hyvä ja avaa uusi keskustelu. Viestisi ovat myös erittäin epäselviä, aivan kuin välistä puuttuisi ainakin puolet tekstistä.

User137: Valitettavasti täytyy myöntää, että en oikein ymmärtänyt, mikä demossasi on viihdyttävää.

lossi [10.09.2013 01:54:50]

#

Hyvä Metabolix: Tarkoitukseni oli vain tuoda uusi ilmainen innovaatio projektiin. Pieniä avaruusgeometriaan sopivia ohjelmatulkkeja ei kyllä löydy hirveästi.
En myöskään rakasta tuottamani tekstin määrää vaan laatua.

User137 [10.09.2013 08:45:54]

#

Metabolix kirjoitti:

Valitettavasti täytyy myöntää, että en oikein ymmärtänyt, mikä demossasi on viihdyttävää.

Itse pidän fysiikan mallinnusta kiehtovana, erityisesti kun ne laskee itse. Tuossa demossa on satoja pikku-ukkoja jotka kävelee toisiaan päin. Perinteiset logiikat pätee, eli kun 3 kävelee jonossa peräkkäin, niin yksi heikompi vastaantulija työntyy voimalla niiden sivuun. Lähinnä se että matematiikka saa aikaan reaalimaailman tapahtumia ikäänkuin siinä sivussa, kun kaikki toimii samojen lakien mukaan.

Se mitä tuolla tekniikalla voi tehdä on sama miltä StarCraft 2:n yksikköjen liikuttelu näyttää. Esim tämän videon alussa:
http://www.youtube.com/watch?v=DgNVgXE1rZk

Metabolix [10.09.2013 11:01:03]

#

User137 kirjoitti:

Itse pidän fysiikan mallinnusta kiehtovana, erityisesti kun ne laskee itse. Tuossa demossa on satoja pikku-ukkoja jotka kävelee toisiaan päin. Perinteiset logiikat pätee, eli kun 3 kävelee jonossa peräkkäin, niin yksi heikompi vastaantulija työntyy voimalla niiden sivuun.

Ahaa, no tämä lainalaisuus ei ole ainakaan minulle videosta ilmeistä, kun kuitenkin törmäykset näköjään tapahtuvat ukko kerrallaan ja siis myös suurempi joukko väistää jonkin verran. Muutenkaan ei tunnu kovin ihmeelliseltä, että törmäyksessä noudatetaan jotain sääntöä. Ihan miten vain.

lossi kirjoitti:

En myöskään rakasta tuottamani tekstin määrää vaan laatua.

En kritisoinut tekstin määrää vaan laatua: sanoin, että tekstisi on epäselvää, aivan kuin siitä puuttuisi osia. Esimerkiksi millä ihmeen tavalla 3D-matematiikan ja kvaternioiden avulla pystyy mielestäsi tekemään tekstiä käsittelevän tulkin? Lisäksi koko tulkkiasia tuntuu menevän aiheen ohi, koska nxPascal ei sisällä mitään ohjailtavaa pelimoottoria; nxPascal on joukko apufunktioita mm. grafiikan piirtoon ja matematiikkaan, ja käyttäjän pitää joka tapauksessa itse ohjelmoida pelinsä Pascalilla.

Oman tulkin tekeminen on myös melko hyödytöntä, kun hyviä tulkkeja on jo monta. Esimerkiksi Lua-tulkin voi helposti liittää omaan projektiin, eikä ole mitään syytä, miksei se sopisi myös avaruusgeometrian laskemiseen.

lossi [13.09.2013 03:18:13]

#

Valitan käyttäessäni liian vähän tarkennuksia sisältävää kieltä kirjoituksissani.
Ajatukseni on mahdollistaa kaikkien näiden valmiiden apufunktioiden käyttö.
Muutamat tekstitiedoston rivit soisivat aikaisempaa helpomman pisteen määrittelyn.
Geometrian käsittelyssä LUA-tulkki ei hallise asiaa vaan putoaa aivan pihalle.
Esimerkki PSX 3000 200 25 6000 määrittelee pisteen kohdasta 3000 200 suuntaan
25 astetta kohtaan X=6000. Näin lyhyttä syntaksia ei löydy muualta.

Heikki Lossi

Lisäys:

Tarkennus:
Kvaternioita käyttävä tulkki on ajatus, jota tuon esille.
Eivät kvaterniot tulkkaa kai.

lossi [15.09.2013 00:56:25]

#

Huomaan tehneeni pahan kielioppivirheen edellisen viestin ensimmäisessä lauseessa.
Verbihän vallan puuttuu. Lauseen ensimmäisen sanan jälkeen pitää liittää:
virheestäni, erheestäni, tyhmyydestäni, vittumaisuudestani, ajattelemattomuudestani tai evvvk ja pilkku perään.

Heikki Lossi

User137 [15.09.2013 06:20:45]

#

Onhan noita tyylejä tallentaa geometrista dataa. Pelinkehityksen näkökulmasta on kuitenkin parasta käyttää 3D-formaatteja jotka tulee suoraan mallinnustyökaluista, kuten OBJ, 3DS, MD2 jne. Jos noilla työkaluilla (suosituimmista tulee mieleen 3DS-Max, Lightwave ja Blender) voi ladata ties mitä CAD-formaatteja niin ne voi muuntaa. OpenGL ei kuitenkaan ymmärrä muuta kuin raakaa verteksi-dataa, joten jossain vaiheessa ne pitää muuntaa siihen kuitenkin. Noille on tehty pluginejakin eri formaateille vaikka kuinka paljon.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta