Mitä eroja on grafiikka kirjastoilla? Mitä erillaista eri kirjastolla voidaan saada aikaan?
Jos tekee oman grafiikka kirjaston onko mahdollista, että kuva jota käytetään on mahdollista "räjäyttää" pikseli mössömmäksi?
Koodataan kirjastoja ihan C++:lla? =)
Kirjastot ovat vain läjiä funktioita ja luokkia.
Kahteen viimeiseen: Kyllä ja kyllä! :)
mika132 kirjoitti:
Koodataan kirjastoja ihan C++:lla? =)
Mikä sitä estää tekemästä muillakin kielillä...
hmm.. koitin ettiä jotain opasta googlella mutta ei oikein löytynyt.. Eli onko kellään tiedossa hyvää opsta jolla tätä kirjastojen tekemistä voisi aloittaa opettelemaan? Tai sitten vinkkejä.. =)
Jos nyt vain keskittäisit intosi johonkin hyödylliseen? Et saa vuodessakaan aikaiseksi sellaista kirjastoa, jota voisit käyttää johonkin sovellukseesi.
Kirjaston tekeminen ei eroa mitenkään muun koodin tekemisestä. Voit siis kehittää kirjastoasi osana ihan tavallista ohjelmaa ja erottaa sitten myöhemmässä vaiheessa pari tiedostoa ohjelmasta erilliseksi kirjastoksi. Kirjaston paketointia koskevia ohjeita on netti pullollaan. (Jos et osaa koodata haluamaasi toimintoa tavalliseenkaan ohjelmaan, oman kirjaston tekeminen ei millään tavalla edistä asiaa.)
Ennen kirjaston aloittamista kannattaa kuitenkin opetella käyttämään otsikkotiedostoja ja useaa kooditiedostoa oikein. Muistaakseni olet tähän asti käyttänyt includea aivan väärin ja kääntänyt koko ohjelmasi yhtenä käännösyksikkönä.
ahaa?? Kertoisitko lisää tästä yhtenä käännösyksikkönä? Mitä se meinaa ja mikä on toinen tapa ja mitä se meinaa? =)
Ehkä nyt vihdoinkin kaivat esiin kaikki ne parin viime vuoden aikana kertyneet keskustelut, joissa sinulle on valitettu include-riveistäsi, ja luet sen paljon puhutun oppaan ja siinä mainitut koodivinkit.
Rautalangasta väännettynä:
yksinkertaisimmillaan kirjoitat nuo omat funktiosi omaan tiedostoonsa ja käännät objekti-tiedostoksi.
Ohjelmassa käytät "kirjastosi funktioita" aivan kuten muitakin funktioita. Kerrot vain kääntäjälle jossain fiksussa paikassa (esim. otsikkotiedosto tai vaikka pääohjelman alkuun esittely, jos pieni projekti), että käyttämäsi funktio on ulkoinen (normaali esittely, jonka eteen lisätään extern avainsana).
Linkkausvaiheessa sitten linkität vain kirjastosi objekti-tiedoston mukaan projektiin.
Vielä yksinkertaistettuna:
Koodaat .hpp tiedoston, johon tulee vain funktioita, olioita yms.
Kirjasto on valmis.
Lisätään ohjelmiin muiden kirjastojen kera includella.
Jokotai kirjoitti:
Koodaat .hpp tiedoston, johon tulee vain funktioita, olioita yms.
Et kai sinä oo headeritiedostoon laittamassa implementaatioita? .h*-päätteisissä tiedostoissa kuuluu olla vain esittelyt, toteutukset tulee niihin .c*-päätteisiin.
Blaze kirjoitti:
Jokotai kirjoitti:
Koodaat .hpp tiedoston, johon tulee vain funktioita, olioita yms.
Et kai sinä oo headeritiedostoon laittamassa implementaatioita? .h*-päätteisissä tiedostoissa kuuluu olla vain esittelyt, toteutukset tulee niihin .c*-päätteisiin.
Hupsistakeikkaa :O
Nyt tuli virhe. Tosiaan juu hpp:ssä määritellään, cpp:ssä toteutetaan. Pahoittelen mahdollisia väärinkäsityksiä.
Jokotai, ehkä sinunkin kannattaisi lukea se opas ennen selittämistä. Jopa korjauksesi meni suurelta osin väärin. Et ilmeisesti tiedä, mitä eroa on esittelyllä ja määrittelyllä.
Ohjelmoinnista ei ole hyviä sanakirjoja. Ei oikeian tuo ohjelmointisanasto ole hallussa. "määrittely" tosiaan pitäisi muuttaa "esittelyksi".
Tavallinenkin sanakirja riittää:
declaration – julistus, [virallinen] ilmoitus
definition – määritelmä
implementation – toteutus
Hieman hämäävästi toki luokan määrittely on se, jossa esitellään luokan sisältö, ja sellainen kuuluukin otsikkotiedostoon. Lisäksi inline-funktioiden määrittelyt kuuluvat otsikoihin. Vain muuttujien ja tavallisten funktioiden määrittelyt eivät kuulu, mutta juuri näitähän ne kirjastot yleensä suurimmaksi osaksi ovatkin.
Ei tämä niin mutkikasta ole, että kannattaisi yrittää "yksinkertaistaa".
Hei mihinkäs tämä keskustelu nyt karkasi? Käsitinkö oikein, että tilanne on seuraava:
Kysymys: "Olen ajatellut siirtymistä grafiikka ohjelmointiin. Mistä kirjastosta minun tulisi aloittaa?"
Vastaus: "... näin voit koodata oman ..."
Kannattaisi kenties aloittaa SFML:stä tai SDL:llä (itse olen ensimmäisen kannalla mutta siitä voidaan taas tapella ikuisuuteen asti kumpi on "parempi"). Nämähän eivät ole mitään pure grafiikka kirjastoja mutta eiköhän kaipaamaasi tarpeeseen riitä. Sitten kun/jos 3D:tä rupeet väsäämään niin OpenGL:ään. Siinä vaiheessa omat värkkäyksetkin saa olla jo varsin kehittyneitä että saat riittävän nopeaa jälkeä.
Kuvan räjäyttämiseen nyt tuskin on mitään kuva.explode() metodia mutta sen kuin teet itse piirto funktion joka halkoo kuvan pienenmpiin osiin ja piirtää ne erikseen sikin sokin.
Nanoputki kirjoitti:
Hei mihinkäs tämä keskustelu nyt karkasi? Käsitinkö oikein, että tilanne on seuraava:
Kysymys: "Olen ajatellut siirtymistä grafiikka ohjelmointiin. Mistä kirjastosta minun tulisi aloittaa?"
Vastaus: "... näin voit koodata oman ..."
Käsitit väärin.
mika132 kirjoitti:
Jos tekee oman grafiikka kirjaston onko mahdollista, että kuva jota käytetään on mahdollista "räjäyttää" pikseli mössömmäksi?
Koodataan kirjastoja ihan C++:lla? =)
Mika132 on jo koodannut vaikka minkälaista juuri mainitsemallasi SDL-kirjastolla.
Nanoputki kirjoitti:
Hei mihinkäs tämä keskustelu nyt karkasi? Käsitinkö oikein, että tilanne on seuraava:
Kysymys: "Olen ajatellut siirtymistä grafiikka ohjelmointiin. Mistä kirjastosta minun tulisi aloittaa?"
Vastaus: "... näin voit koodata oman ..."
:D
Kannattaa lukea se aloitusviesti ensimmäistä riviä pidemmälle.
Ja ensimmäisenkin rivin voi ottaa ihan sellaisena kuin se on kysytty eikä arvailla että mitä muuta se voisi tarkoittaa. Siis kukaanhan ei ole sanonut että olisi siirtymässä grafiikkaohjelmointiin, eikä kysynyt mistä kirjastosta kannattaisi aloittaa.
Suosittelen opettelemaan windowsin tavan piirtää grafiikkaa vaikka BlitzBasicilla ja siirtyä siitä sitten SDL:ään.
Mulla ei ainakaan suuria vaikeuksia ole ollut kun hyppäsin dos maailmasta blitzbasicin kautta ja nyt koodaan täyttä häkää SDL:llä.
Muutenkin grafiikan piirto,etenkin kuvien on aloittelijalle helpompaa BlitzBasicilla.
Suosittelen kirjaa Focus on SDL.
Sen kai saanee netistäkin,en ole varma.
Siinä käydään vaihe vaiheelta läpi kaikki SDL:än perusominaisuudet.
Lisäkirjastoja taas on vaikka kuinka ja niihin sitten löytyy ohjeita netistä ja itse lisäkirjastotkin löytyvät netistä.
Mutta jos ei ole hallussa includen käytöt ja funkioiden esittelyt ja määrittelyt niin olet tien alussa vasta ja suosittelen opettelemaan alkeen tekstipohjaisilla konsiliohjelmilla.
Mutta onnea,sitkeyttä,määrätietoisuutta ja periksiantamuutta sulle!:)
Jos C++:lla koodaa suosittelen kyllä ehdottomasti SFML:ään tutustumista. Monet asiat mihin SDL:llä tarvitsit lisäkirjastoja (SDL_gfx, SDL_image, SDL_net jne.) löytyy jo valmiina pakattuna. Lisäksi SFML:n spritesysteemi mahdollistaa paljon helpommin peliobjektien käsittelyn, eikä aikaa tarvitse kuluttaa erikseen apukirjastojen tekoon SDL:llä.
SFML:n rautapohjainen renderöinti verrattuna SDL:n softapohjaiseen renderöintiin on paljon nopeampi ja tehokkaampi. Jos OpenGL:ää haluaa käyttää, niin sekin onnistuu. SFML:llä onnistuu myös pixelshadereiden käyttö erikoisefektien tekoon GLSL:llä (SFML:n kakkosversiossa käytettävä kieli on aivan sama kuin alkuperäinen GLSL, 1.6 se on hieman erilainen).
Aihe on jo aika vanha, joten et voi enää vastata siihen.