Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Grafiikka kirjastojen erot

Sivun loppuun

mika132 [21.04.2011 16:31:01]

#

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? =)

ankzilla [21.04.2011 17:13:54]

#

Kirjastot ovat vain läjiä funktioita ja luokkia.

Kahteen viimeiseen: Kyllä ja kyllä! :)

Triton [21.04.2011 18:37:42]

#

mika132 kirjoitti:

Koodataan kirjastoja ihan C++:lla? =)

Mikä sitä estää tekemästä muillakin kielillä...

mika132 [21.04.2011 19:06:00]

#

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ä.. =)

The Alchemist [21.04.2011 19:13:06]

#

Jos nyt vain keskittäisit intosi johonkin hyödylliseen? Et saa vuodessakaan aikaiseksi sellaista kirjastoa, jota voisit käyttää johonkin sovellukseesi.

Metabolix [21.04.2011 19:19:19]

#

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ä.

mika132 [21.04.2011 20:00:18]

#

ahaa?? Kertoisitko lisää tästä yhtenä käännösyksikkönä? Mitä se meinaa ja mikä on toinen tapa ja mitä se meinaa? =)

Metabolix [21.04.2011 20:16:40]

#

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.

jalski [21.04.2011 20:40:21]

#

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.

Jokotai [21.04.2011 22:22:49]

#

Vielä yksinkertaistettuna:
Koodaat .hpp tiedoston, johon tulee vain funktioita, olioita yms.
Kirjasto on valmis.
Lisätään ohjelmiin muiden kirjastojen kera includella.

Blaze [21.04.2011 22:47:10]

#

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.

Jokotai [21.04.2011 23:02:41]

#

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ä.

Metabolix [21.04.2011 23:31:56]

#

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ä.

Jokotai [22.04.2011 10:36:48]

#

Ohjelmoinnista ei ole hyviä sanakirjoja. Ei oikeian tuo ohjelmointisanasto ole hallussa. "määrittely" tosiaan pitäisi muuttaa "esittelyksi".

Metabolix [22.04.2011 11:53:34]

#

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".

Nanoputki [28.04.2011 00:51:43]

#

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.

Othnos [28.04.2011 01:25:09]

#

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.

Grez [28.04.2011 09:41:25]

#

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.

DumTom [28.04.2011 19:22:12]

#

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!:)

temu92 [29.04.2011 01:12:57]

#

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).


Sivun alkuun

Vastaus

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

Tietoa sivustosta