Page 1 of 2

Tie 3D-peliohjelmointiin (mistä liikkeelle?)

Posted: Wed Aug 15, 2012 7:26 pm
by pietari-poika
Pelasin jonkin aikaa sitten peliä nimeltä Deus Ex: Human Revolution, ja sen innoittamana aloin ideoimaan salainen agentti -peliä, joka muista poiketen olisi toteutettu täysin siten kuin minä haluan. No anyway. Coolbasic on lähestulkoon ainoa ohjelmointikieli, jolla olen ohjelmoinut. Se on oikeastaan ainoa kieli, jota voin sanoa osaavani. Olen koodannut sillä mm. yksinkertaisen tasohyppelyräiskinnän, jossa kokonainen kenttä voidaan tehdä yksinkertaisesti tilemappina laittamalla vihollisten paikat ym. tarvittavat jutut kartan datakerrokseen. Olen tehnyt myös joitakin ei-peli-projekteja, kuten pari funktiota, jotka tarkistavat onko sudoku täytetty oikein, sekä siihen liittyen ohjelman, joka pystyy generoimaan täytetyn sudokun. Eli aikalailla perusjuttuja. Coolbasicin lisäksi olen katsellut pythonin peruskomennot läpi, mutta ne toimivat suunnilleen samoin kuin basicitkin yleensä. Eli osaisin esimerkiksi tehdä tuon sudokuohjelman pythonilla, logiikka olisi tietenkin ihan sama, joten siinä ei olisi mitään ihmeellistä. Olio-ohjelmointiin en ole tutustunut juuri yhtään. Ainakaan en ole tajunnut siitä yhtään mitään. Koetin joskus opetella C++:aa, mutta homma kaatui lähinnä siihen, että missään ei ollut ohjeita alkuun pääsemiseksi. En siis saanut edes Hello Worldia suoritettua, koska missään ei ollut kunnon ohjeita käytännön jutuista. Coolbasicin kanssa pitää asentaa yksi ohjelma, avata se, ja voi alkaa kirjoittaa koodia. F5 suorittaa kirjoitetun ohjelman. C++-yritysten kanssa pääsin johonkin mystiseen editoriin, jossa en tiennyt minne koodi kirjoitetaan, tai miten ohjelma suoritetaan.

Asiaan. Haluaisin siis tietää, mikä olisi helpoin tapa opetella koodaamaan kolmiulotteinen peli. Pitäisi löytää ohjelmointikieli. Sen ei välttämättä tarvitsisi olla helpoin, mutta siihen pitäisi olla todella hyvät oppimateriaalit saatavilla (vrt. Coolbasic-dokumentaation hyvyys). Lisäksi sillä pitäisi pystyä tuottamaan 3D-juttuja järkevästi, siten että ne pyörisivät normaaleilla koneilla hyvin. Käytännössä siis jokin kieli, jonka oppimisen jälkeen ei olisi edessä siirtyminen toiseen kieleen, koska alkuperäinen kieli on liian vanhentunut ja huono haluttujen juttujen toteuttamiseen. Jos olen oikein käsittänyt, niin 3D:n toteutus ei kylläkään taida sisältyä mihinkään kieleen vakiona, joten käytännössä pitäisi opetella ensin jokin kieli, ja sitten löytää sille jonkun tekemä 3D-moottorilisäosa, joka olisi vielä tarpeeksi hyvä ja tarpeeksi helposti omaksuttava, ja opetella se.

Pythoniin on ilmeisesti jotain 3D-lisää saatavilla, ja pythoniin on ainakin paljon ohjeita. Jos aiotaan tehdä jotain kunnollista, olisiko python vaihtoehto? Mitä muita vaihtoehtoja on? Ja mielellään jos jollain on jotain ohjeistusta mihin kannattaa suuntautua jos peliohjelmointi kiinnostaa, niin antaa kuulua.

Re: Tie 3D-peliohjelmointiin (mistä liikkeelle?)

Posted: Wed Aug 15, 2012 7:40 pm
by Feuer
Kannattanee kulkea Javan (örr, JOGL?) tai C#:n (XNA) kautta C++:aan, ymmärtääkseni :P Itse taitan tällaista polkua parhaillaan.

Amazonilta löytyy kivasti kirjoja kaikista kolmesta. Allekirjoittaneella on parhaillaan tämä työn alla ja DirectX:stä kirja tulossa. Jos nettitutoriaaleista uskot jotain oppivasi, ohjelmointiputkassa on kiva C++-opas, joka pitää kädestä vähän enemmän kuin kuuluisa Hassun Hauska C++-opas, ja lopuista on materiaalia DICissä.

Re: Tie 3D-peliohjelmointiin (mistä liikkeelle?)

Posted: Wed Aug 15, 2012 7:51 pm
by Sami The Great
3D-ominaisuudet kannattaa toteuttaa opengl.llä tai directx:llä, koska ne ovat tarpeeksi nopeita ja laadukkaita. Suoraa en kuitenkaan niitä käyttäisi, vaan jokin kirjasto välissä olisi hyvä olla. C++ on tällä hetkellä se käytetyin kieli 3D peleissä, joten suosittelen sen harjoittelemista. Hyvä grafiikkakirjasto on Ogre3D, jolla onnistuu helposti todella hienotkin renderöinnit. Tarvitset myös jonkin fysiikkakirjaston. Vaikka physx tai newton. Ogrea muistaakseni voi myös käyttää ainakin javalla ja pythonilla. Kannattaa ladata kuitenkin ms visual studio express ilmaiseksi ja aloittaa harjoitella c++:aa. Hyviä oppaita kyllä löytyy netistä paljon.

Re: Tie 3D-peliohjelmointiin (mistä liikkeelle?)

Posted: Wed Aug 15, 2012 8:00 pm
by legend
Itse sousittelen kirottua Darkbasici:a. Hyvin yksinkertainen ja tarpeeksi tehokas. Huonona puolena on bugien määrä ja rahastava yhtiö =/
Coolbasicin syntaksi on hyvin samankaltainen. Lisäksi Darkbasic tukee esimerkiksi edellä mainittua Newton fysiikka kirjastoa!

Re: Tie 3D-peliohjelmointiin (mistä liikkeelle?)

Posted: Wed Aug 15, 2012 8:49 pm
by Dimple
Sinun tilanteessasi suosittelisin ehkä kokeilemaan basic-kieliä ennemmin kuin C++:aa. Ei se C++ ole mikään itseisarvo: sitä käytetään lähinnä sen takia, että sillä saa aikaan erittäin nopeaa koodia, jos osaa, ja lisäksi sille on paljon kirjastoja. Toisaalta jos ei osaa, niin sillä on aika helppo ampua itseään jalkaan.

Re: Tie 3D-peliohjelmointiin (mistä liikkeelle?)

Posted: Wed Aug 15, 2012 10:14 pm
by naputtelija
Itse olen kokenut että java on suhteellisen helppo kieli aloittelevalle olio-ohjelmoijalle, ja siihen kun vielä lyö jonkin graafisen kirjaston opengl:llä (vaikka LWJGL, itse ainakin käytän ja niin myös Notch/Jeb/Minecraftin devit) Editorina suosittelen Eclipseä. Pääset alkuun helposti tällä lwjgl+eclipse tutolla ja tässä esiintyvillä oppailla. Ei, helpompaa tietä olio-ohjelmoinnin maailmaan ei ole, mutta jos basicissa meinaat pysyä niin käytä BlizBasicia tai DarkBasicia.
Pöt Pöt. Java on hidas.

Re: Tie 3D-peliohjelmointiin (mistä liikkeelle?)

Posted: Wed Aug 15, 2012 10:53 pm
by Sami The Great
Olio-ohjelmointiin kyllä suosittelen tutustumaan, koska sen avulla saa tehtyä erittäin selkeää ja uudelleen käytettävää koodia, kunhan ensin opettelee sen käytön. Sen jälkeen, kun sen on oppinut niin ei enää tee mieli koodata ilman olioita. Javalla tosiaan voi myös aloittaa olio-ohjelmoinnin, vaikka kylläkin 3D-tuki peleille (jota ketjun aloittaja haki) on huomattavasti suppeampi, kuin C++:lla. Eclipse on hyvä IDE javalle, mutta LWJGL:n sijaa suosittelisin LibGDX:ää, joka pohjautuu LWJGL:n, mutta se sisältää paljon valmiita lisäominaisuuksia, kuten törmäystunnistuksen ja tilemapit jne.. DarkBasic:n ja BlitzBasic:n itse jätin väliin, koska kumpikin sisältää jo hyvin vanhentunutta tekniikkaa. Esim. DarkBasic käyttää edelleen renderöintiin DirectX 8.1 versiota, joka alkaa olemaan jo aikansa elänyt. Grafiikan laatu on ihan eri luokkaa, kuin esim. Ogressa.
Voit jo silmämääräisesti verrata miten hyvin eri versiot pystyy renderöimään 3D-kuvaa:

DarkBasic:
Image
BlitzBasic:
Image
OGRE3D
Image

Re: Tie 3D-peliohjelmointiin (mistä liikkeelle?)

Posted: Thu Aug 16, 2012 3:25 pm
by esa94
Sami The Great wrote:Voit jo silmämääräisesti verrata miten hyvin eri versiot pystyy renderöimään 3D-kuvaa:
>Yleistää screenshottien perusteella

DX8:n ja DX9:n ero on lähinnä se, että kasissa on heikompi shaderituki. Kyllähän Half-Life 2:a ynnä kumppaneita voi ajaa DX8-moodissa grafiikan laadun kummemmin kärsimättä.

Re: Tie 3D-peliohjelmointiin (mistä liikkeelle?)

Posted: Thu Aug 16, 2012 4:05 pm
by legend
Sami The Great wrote:Olio-ohjelmointiin kyllä suosittelen tutustumaan, koska sen avulla saa tehtyä erittäin selkeää ja uudelleen käytettävää koodia, kunhan ensin opettelee sen käytön. Sen jälkeen, kun sen on oppinut niin ei enää tee mieli koodata ilman olioita. Javalla tosiaan voi myös aloittaa olio-ohjelmoinnin, vaikka kylläkin 3D-tuki peleille (jota ketjun aloittaja haki) on huomattavasti suppeampi, kuin C++:lla. Eclipse on hyvä IDE javalle, mutta LWJGL:n sijaa suosittelisin LibGDX:ää, joka pohjautuu LWJGL:n, mutta se sisältää paljon valmiita lisäominaisuuksia, kuten törmäystunnistuksen ja tilemapit jne.. DarkBasic:n ja BlitzBasic:n itse jätin väliin, koska kumpikin sisältää jo hyvin vanhentunutta tekniikkaa. Esim. DarkBasic käyttää edelleen renderöintiin DirectX 8.1 versiota, joka alkaa olemaan jo aikansa elänyt. Grafiikan laatu on ihan eri luokkaa, kuin esim. Ogressa.
Voit jo silmämääräisesti verrata miten hyvin eri versiot pystyy renderöimään 3D-kuvaa:
Päätit ottaa sitten screenshotin, jossa ei ollut käytetty DirectX Shader tegnologia....
http://www.youtube.com/watch?v=HJEGUSGKF-w
http://www.youtube.com/watch?feature=en ... HH2fE&NR=1
Tiedän kyllä, että teknologia on vanhentunutta, mutta itse näyttämisi esimerkkissä ei ollut esimerkiksi käytetty ollenkaan Shader:ta.
Niiden avulla pelistä saa kohtalaisen näköisen.

Re: Tie 3D-peliohjelmointiin (mistä liikkeelle?)

Posted: Thu Aug 16, 2012 4:26 pm
by Sami The Great
esa94 wrote:
Sami The Great wrote:Voit jo silmämääräisesti verrata miten hyvin eri versiot pystyy renderöimään 3D-kuvaa:
>Yleistää screenshottien perusteella

DX8:n ja DX9:n ero on lähinnä se, että kasissa on heikompi shaderituki. Kyllähän Half-Life 2:a ynnä kumppaneita voi ajaa DX8-moodissa grafiikan laadun kummemmin kärsimättä.
Shadertuki nimenomaan on se asia joka on nykyään tärkeä, kun niillä saa tehtyä niin paljon graafisia toimenpiteitä. Kyllähän tuo 8.1-versio on oikeasti jo vanha, koska se on julkaistu vuonna 2002. Jos mietit minkä tasoista grafiikkaa sen ajan peleissä on ollut niin jää ne kyllä aika paljon jälkeen nykyisen ajan DX11-grafiikoista. Tietenkin DX9 on viimeisin versio, joka toimii vanhemmissa käyttiksissä. Kyllähän noilla vanhemillakin systeemeillä saa aikaan kaikkea kivaa, mutta itse en ainakaan 10 vuotta vanhaa tekniikkaa rupeisi turhaan käyttämään, kun tarjolla paljon uudempaakin. Kyllä minusta DarkBasic ja Blitz on jo aikansa elänyt, ellei niihin tule päivityksiä. Kannattaa muuten katsoa jMonkeyEngine, jos Java onnistuu.

Re: Tie 3D-peliohjelmointiin (mistä liikkeelle?)

Posted: Thu Aug 16, 2012 6:03 pm
by esa94
Sami The Great wrote:Jos mietit minkä tasoista grafiikkaa sen ajan peleissä on ollut niin jää ne kyllä aika paljon jälkeen nykyisen ajan DX11-grafiikoista.
Se nyt kuitenkin sattuu johtumaan raudan tehoista eikä softan. Vaikka kuinka porttaisit DX11:n vanhalle koneelle ei se silti jaksa pyörittää uusia pelejä, mutta toisaalta DX8-peli toimii vallan mainiosti uudella raudalla ja modeilla. Tessellaationkin voi tehdä DX8:ssa, sitä ei vaan satuttu em. tehosyistä sinä DX8:n aikana tekemään.

Lakkaa nyt syyllistämästä softaa ja keskity, Joni.

Re: Tie 3D-peliohjelmointiin (mistä liikkeelle?)

Posted: Sat Aug 18, 2012 3:43 pm
by pietari-poika
Katselin hieman C++:n perusteita ohjelmointiputkan oppaan kanssa. Muutama eka sivu oli ainakin helpon oloista. Päätin kuitenkin sitten suuntautua pythoniin, koska sillä pääsen luultavasti nopeammin "tositoimiin". Ja tosiaan mainittu http://www.python-ogre.org/ mahdollistaa sitten 3D-pelleilyt pythonilla. Ja sillä saa tehtyä linuxillekin, mikä on tietysti plussaa.

Kohta on ohjelmointiputkan python-opas läpäisty. Aikalailla alkeissa siis mennään, ehkä pitäisi etsiä lisää oppimateriaalia ennen kuin alan ihmetellä python-ogrea. Tosiaan ihan harrastuksena koodailen. Nyt vielä kesäloma menossa, mutta parin viikon päästä alkaa koulu (ei tietotekniikkaan liittyvä) joten sitten koodailuista tulee satunnaisempia. Postailen vaikka tähän threadiin joskus miten opetteluprojektini edistyy.

Re: Tie 3D-peliohjelmointiin (mistä liikkeelle?)

Posted: Sun Aug 19, 2012 9:37 pm
by mikeful
Screenshot-/video-vertailu on aika turhaa, koska kielen ominaisuuksilla ei ole suuremmin väliä opiskelun alkuvaiheessa. Perusasiat voi opiskella millä tahansa kielellä ja siirtyä sitten hienompiin kirjastoihin ja kieliin, kun taidot ja/tai tavoitteet kasvaa.

Re: Tie 3D-peliohjelmointiin (mistä liikkeelle?)

Posted: Thu Aug 23, 2012 11:00 pm
by vilQuri
Jos C++/C tai vastaava ei ole ennestään yhtään tuttu, niin ehkä sillä ei ainakaan ensimmäiseksi kannattaisi lähteä tekemään 3D-pelejä.

Mutta kuitenkin, noista edellämainituista kielistä/kirjastoista ei minulla ole muuta kokemusta kuin OGRE:sta ja sen lisäksi Irrlichtistä jonkin verran. Pidän ogrea periaatteessa suorituskykyisempänä kuin Irrlicht, mutta vaikeammin lähestyttävämpänä. Ja ehkä juurikin ensimmäisen projektin osalta menisin siitä missä opettelukynnys on matalin.
Toisaalta juuri sitä 3D-pelin tekemistä varten en ainakaan itse suosittelisi Irrlichtiä enkä OGRE:a koska kumpikin niistä on oikeastaan pääasiassa keskittynyt 3D-renderöintiin eikä suoraan tarjoa ainakaan kaikkia muita oleellisia asioita pelien tekemisessä. Niistä puuttu yleensä suurin osa muista pelissä tarvittavista ominaisuuksista kuten logiikka, fysiikat jne. Joten kannattaisi ehkä aloittaa jollain valmiimmalla ratkaisulla/pelimoottorilla.

Jos javasta sattuu pitämään niin ainakin mitä itse jonkin aikaan sitten kokeilin, niin jMonkeyEngine vaikuttaa ihan mielenkiintoiselta vaihtoehdolta.

Jos kuitenkin C++ puolella haluaa pysytäyttyä niin esim. muistaakseni OGRE:een pohjautuva NeoAxis tarjoaa aika vakuuttavan vaihtoehdon ja sen voi ladata harjoittelukäyttöön ilmaiseksi. Jos pelin jossain viraallisesti julkaiset tarvitset kyllä lisenssin.

Ja jos en ole väärässä niin Unity:lläkin on jonkin näköinen C++/C# rajapinta? Unity on kuintekin aika käytetty ja tarjoaa samalla mahdollisuuden julkaista peli helposti monellekin alustalle. Sen lisenssistä en sitten ole varma.

Se pitempi vaihtoehto on sitten hypätä vaikka jomman kumman, OGRE:n tai Irrlicht:n kelkkaan ja implementoida itse fysiikat jne joka tosin on suhteellisen vaivatonta koska noille molemmille löytyy varmaan parikin valmista wrapperia esim. Bullet-physics kirjastolle.

Mitä noihin yleisimpiin kieliin: Java, C/C++, C# jne. tulee niin niistä löytyy kyllä dokumentaatiota monilla kielillä pilvin pimein joten se tuskin on ongelma.

Re: Tie 3D-peliohjelmointiin (mistä liikkeelle?)

Posted: Fri Aug 24, 2012 11:15 am
by pietari-poika
Tossa Python-Ogressa oli kaikenmoista muutakin mukana. Käsitin, että niillä kaiken pitäisi onnistua:
http://www.python-ogre.com wrote:What do I get?

OGRE 1.6.0RC1
OIS 1.2
CEGUI 0.6.1
QuickGUI 0.9.7
ODE 0.10.1
OgreOde 1.0
OgreAL 0.3
betagui 1.7
OgreNewt 1.0
Opcode 1.3
PhysX 2.8.1
NxOgre 1.0-21
bullet 2.70
OgreBullet 1.0
theora 0.5.0
plib 1.8.4
ogreforests 0.1
et 2.2
caelum 0.2.1
noise 1.0
particleuniverse 0.8
cadunetree 0.6
ogrepcz 1.0
hydrax 0.3

Re: Tie 3D-peliohjelmointiin (mistä liikkeelle?)

Posted: Fri Aug 24, 2012 9:28 pm
by vilQuri
No tuohan vaikuttaa sitten erittäinkin varteenotettavalta vaihtoehdolta :) . Varsinkin hyvänä puolena on se, että pythonilla pääset tod. näköisesti paljon nopeammin liikkeelle. Ja varmasti tuon avulla voi sisäistää sen miten OGRE periaatteessa toimii joka taas helpottaa ehkä tulevaisuudessa siirtymistä C++ puolelle, pythonissa kun on omat rajoitteensa.

Re: Tie 3D-peliohjelmointiin (mistä liikkeelle?)

Posted: Sun Aug 26, 2012 4:19 pm
by Pettis
vilQuri wrote:pythonissa kun on omat rajoitteensa.
Kuten mitkä? Pythonilla voit halutessasi käyttää C ja C++ -palikoita.

Re: Tie 3D-peliohjelmointiin (mistä liikkeelle?)

Posted: Sun Aug 26, 2012 6:32 pm
by Latexi95
Pettis wrote: Kuten mitkä? Pythonilla voit halutessasi käyttää C ja C++ -palikoita.
No CB:ssähän ei olekkaan mitään rajoitteita kun voi käyttää DLL:iä. :lol:

Python ei ole kyllä raa'assa laskennassa kovinkaan vauhdikas (noin CB:n vauhtinen taitaa olla), mutta kyllä se on varsin näppärä kieli ja sillä saa nopeasti aikaan vaikka mitä.

Re: Tie 3D-peliohjelmointiin (mistä liikkeelle?)

Posted: Wed Aug 29, 2012 7:45 pm
by esa94
Latexi95 wrote:Python ei ole kyllä raa'assa laskennassa kovinkaan vauhdikas (noin CB:n vauhtinen taitaa olla), mutta kyllä se on varsin näppärä kieli ja sillä saa nopeasti aikaan vaikka mitä.
[citation needed]

Re: Tie 3D-peliohjelmointiin (mistä liikkeelle?)

Posted: Wed Aug 29, 2012 8:19 pm
by Latexi95
esa94 wrote: [citation needed]
En nyt muista kuka irkin puolella mainitsi tuosta pythonin nopeudesta, mutta tein sinulle testikoodin joka antaa tukea väitteelleni:

Code: Select all

startTime = Timer()
count = 0
For i = 1 To 10000
    For j = 1 To 10000
        count = count + i + 13 - 55*i / j
    Next j
Next i
endTime = Timer()
Print "Test took: "+(endTime - startTime) + "ms"
WaitKey

Code: Select all

from time import time

startTime = time()
count = 0
for i in range(1, 10000):
	for j in range(1, 10000):
		count += i + 13 - 55*i / j
	
endTime = time()
print "Test took: {0}s".format(endTime - startTime)
Itseasiassa tuolla koodilla python on CB:tä hitaampikin ainakin 2.7.3 versiolla. Python 42s ja CB: 35s.
EDIT:

Käyttämällä jotain toista ohjelmaa kuin "virallista" pythonia voidaan päästä parempiin nopeuksiin. Esimerkiksi PyPy suoriutui tuosta testistä 12s.

EDIT:

Vastauksena esan viestiin: No sanoinkin että python on aikalailla yhtänopea kuin CB, enkä maininnut että python olisi mitenkään reilusti CB:tä hitaampi (tai yleensäkkään hitaampi kaikissa tapauksissa).