Eli kumpaa kannattais alkaa alotteleen? En ole vielä pahemmin kumpaakaan harjoitellut. Kumpi näistä olisi helpompaa ja onko jompikumpi jotenkin parempi?
No on OpenGL kyllä helpompaa. Mutta jos haluat parempaa grafiikkaa niin sitten DirectX. OpenGLään löytyy mielestäni enemmän oppaitakin. Ja DirectX:ssa on eri versioita joilla ohjelmoiminen on kullakin vähän erillaista.
Kokeile kumpaakin, ja valitse sen mukaan, kummasta pidät enemmän. Jos haluat ohjelmistasi portattavia, kannattaa valita OpenGL. DirectX taitaa sisältää enemmän kaikkea verrattuna OpenGL:ään mm. nettiin ja musiikkiin liittyviä juttuja. Itse en ole siihen tutustunut sen enempää, joten joku korjatkoon jos olen väärässä. Itse ainakin suosittelen OpenGL:ää ja SDL:ää, sillä näillä tehdyistä ohjelmista tulee portattavia ja niiden avulla ohjelmointi ei ole kovin vaikeaa.
EDIT: rndprogy: OpenGL:llä saa tehtyä kyllä yhtä hienoa grafiikkaa kuin DirectX:llä. En sitten tiedä, onko se sillä helpompaa.
OpenGL on kyllä helpompaa, mutta mä olen kuullut että dx:ssä on enemmän ominaisuuksia. Monimutkaisempaa mutta monipuolisempaa(?). Ite olen kanssa opettelemassa opengl:ää. Kokeilin dx:ää mutta näytti tosi vaikealta ogliin verrattuna ja tykkään kivoista NeHe:n tutoriaaleista.
OpenGL:ssä kutsutaan funktioita ilman mitään Direct3DDevice:n kaltaista objektia, jonka funktiolla piirtäminen tms. toteutetaan.
DirectX:ssä jokainen laite(device) pitää alustaa erikseen, ja sinun on luotava vertekseille(kolmion kärkipiste) aina oma tietorakenteensa.
Itse päädyin harkinnan jälkeen DirectX.ään, sillä sen ohjelmointityyli soveltui omaan tyyliini.
Esimerkiksi(kyseiset koodit piirtävät kolmion; OpenGL koodi on vapaasti NeHen tutoriaalia mukaillen; DirectX koodi on vpaasti DrunkenHyenan tutoriaalia mukaillen; Koodit ovat erittäin yksinkertaistettuja ja niistä näkee hieman rajapintojen eroista.):
// DirectX bool DrawScene() { static tri_vertex fan[]={ //väritetty kolmioviuhka {325,300,1,1,0xFFFFFFFF}, {250,175,1,1,0xFFFF0000},{300,165,1,1,0xFF7F7F00},{325,155,1,1,0xFF00FF00}, {375,165,1,1,0xFF007F7F},{400,185,1,1,0xFF0000FF} }; g_pDev->DrawPrimitiveUP(D3DPT_TRIANGLEFAN,4,fan, sizeof(tri_vertex) } // OpenGL bool DrawScene(GLvoid) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity(); glTranslatef(-1.5f,0.0f,-6.0f); glBegin(GL_TRIANGLES); glVertex3f( 0.0f, 1.0f, 0.0f); glVertex3f(-1.0f,-1.0f, 0.0f); glVertex3f( 1.0f,-1.0f, 0.0f); glEnd(); glTranslatef(3.0f,0.0f,0.0f); glBegin(GL_QUADS); glVertex3f(-1.0f, 1.0f, 0.0f); glVertex3f( 1.0f, 1.0f, 0.0f); glVertex3f( 1.0f,-1.0f, 0.0f); glVertex3f(-1.0f,-1.0f, 0.0f); glEnd(); return true; }
Edit: Jos joku huomaa koodeissa virheen, niin en pistäisi ilmoitusta pahakseni. En OpenGL:ää enää osaa juuri nimeksikään, joten koodissa saattaa olla virheitä.
Joo kyllä varmaan rupean tuota OpenGL:ää harjoitteleen. Siis kun joku puhui noista nettiominaisuuksista niin eikö sitten OpenGL:llä pysty tehdä esim. nettipelejä? Vai mitä tarkoititte noilla nettiominaisuuksilla?
OpenGL on grafiikkakirjasto, vastaava kuin directX:n yksi osat DirectDraw ja Direct3D. DirectX kokonaisuutena taas sisältää lisäksi ääniosan(SirectSound / DirectMusic), verkko-osan (DirectPlay) ja ohjaintenhallinnan (DirectInput).
Nettipelin tekemiseen voit käyttää vaikka Winsockia tai SDL Netiä, joka on portattava. Seuraavasta osoitteesta löydät itse paketin sekä dokumentaatiot: http://www.libsdl.org/projects/SDL_net/
Lue OpenGL tutoriaalini (OpenGL:n perusteet - osat: 1-3): http://www.suomipelit.com/nayta_artikkelit.php?
Mäkin suosittelen tota Markuksen tutoriaalia. Sen avulla on helppo päästä mukaan OpenGL:ään.
Nyt en oikeastaan tiedä että kumpaa tässä kannattaisi aloitella... DirectX tuntuu olevan monipuolisempi mutta jos nyt alan sitä harjoittelemaan ja sitten joskus vaikka Windows ja Microsoft luhistuvat niin sitten pitäisikin aloittaa taas OpenGL alusta. OpenGL tuntuisi helpommalta ja siihen löytyy enemmän oppaita ja tutoriaaleja(ainakin oman käsitykseni mukaan), mutta minua huolettaa esim. sellaset asiat kuin äänien liittäminen ohjelmiin/peleihin(kaikki hienot 3d äänet ja muut härpäkkeet), nettipelaaminen(millä sen sitten hoitaa..?) ja jos haluaa liittää esim. joystickin tai jotain muita ulkoisia laitteita(DirectInput...) niin miten ne onnistuisi laittamaan.
Sen takia tuota OpenGL:ää aloittaisin koska sen saa kaikille käyttöjärjestelmille. DirectX:n saa vain Windowsille ja jos joskus Windows vaikka luhistuu tai jotain.
DirectX on paketti, joka sisältää useita eri rajapintoja, joilla ei ole mitään tekemistä keskenään esim. directSound ääniä varten, direct3D grafiikka varten ja directPlay nettiä varten. Kaikki nämä rajapinnat ovat erilaisia ja ne on opeteltava erikseen! Voit siis huoletta käyttää esim. OpenGL:ää grafiikkaan ja DirectSoundia ääniin.
Kaikille DirectX:n osille (ehkä directInputtia lukuunottamatta) löytyy myös halutessa korvaava (parempi?) vastine. Esim:
Direct3D <--> OpenGL
DirectSound <--> OpenAL
DirectPlayer <--> Winsock
Juu, ajattelin ehkä kuitenkin sitä OpenGL:ää alkaa harjotteleen. Tuo DirectX on niin Windows-riippuvainen ja tuntuu hankalammalta kuin OpenGL(Direct3D siis).
Aihe on jo aika vanha, joten et voi enää vastata siihen.