Nyt alkaa C++:n salat pikkuhiljaa aueta. Kehittelin tämmöisen tietorakenteen ruudunkäsittelyä varten. Esimerkkinä olen toteuttanut TyhjennäRuutu-metodin, joka on kuin CLS. HUOM: Koodi ei toimi suoraan, vaan sinun täytyy siirtää tietorakenteen sisältämä kuva vielä erikseen näytölle. Tietorakenne tukee float-väriarvoja, joten tästä on hyötyä myös tulevaisuuden 3d-raudalla. Voit käyttää väriarvojen lukemiseen myös aiemmin esittelemäämi Pimp-patternia.
class Pixel { friend Screen; // friend Pimp; // Tämä siis jos haluat lukea pikseleitä muualtakin private: float mR; float mG; float mB; };
class Screen { private: Pixel mRuutu[320][200]; // Sama kuin QB:ssä public: void TyhjennaRuutu() { for(int i = 0; i < 320; i++) for(int k = 0; k < 200; k++) { mRuutu[i][k].mR = 0; mRuutu[i][k].mG = 0; mRuutu[i][k].mB = 0; } } };
ainiin, ja kommentteja saa antaa taas.
Eipä tuossa itse ruutua pääse käsittelemään, alkeellisimman ja hitaimman tavan taisit kehitellä, eh? :) Ei pahalla. Mutta minäpä tiedän - teepä laamatutin neuvoja hyväksikäyttäen luokkapohjainen grafiikkaengine, sellaisia ei liene kuin yksi.. hooh (lisää tarvitaan !)
No kyllähän tuo on tietenkin hitaampi kuin suora framebufferin käpistely, mutta pointtina tässä onkin, että tämä on objektiorientoitunut tapa tehdä asia. Sitäpaitsi nykyisissä koneissa on ihan riittävästi tehoja tähänkin, puhumattakaan tulevaisuuden 3d-korteista, joilla tämä suorastaan lentää. Tähän pystyy myös helposti lisäämään ominaisuuksia, esimerkiksi väriavaruuden muunnoksia vaikkapa RGB:stä YUV:hen. Pelkällä framebufferilla se on aika vaivalloista.
Mitä täällä höpistään? Tuo struktuurihan on itsessään framebuffer, softalla toteutettu sellainen. Tämä on hyvä tekniikka tehdä korkeatasoista grafiikkaa offlinenä. Jos reaaliaikaista taas halutaan, parempi käyttää kokonaislukuvärirakenteita tai suosiolla hardista.
hmm... vaik ne "tulevat" näyrrikset tukiski mitä vaan ni ei sitä silti tartte tehä hitaimman kautta. Sama logiikka ku Mikkisoftalla se käyttisten kans ku tulee nopeempii käyttiksii lisätään vähän hilavitkuttimii, et vaatimukset nousee.
hmm... vaik ne "tulevat" näyrrikset tukiski mitä vaan ni ei sitä silti tartte tehä hitaimman kautta. Sama logiikka ku Mikkisoftalla se käyttisten kans ku tulee nopeempii käyttiksii lisätään vähän hilavitkuttimii, et vaatimukset nousee.
Oon aloittelija ,joten miten käytän tota classia?
sain 6 errorii, pistin noi ennen main() ni tuli tälläsii
error C2433: 'Screen' : 'friend' not permitted on data declarations
...etc
"Eipä tuossa itse ruutua pääse käsittelemään, alkeellisimman ja hitaimman tavan taisit kehitellä, eh?"
miten yksi struct voi olla hidas tai nopea? kyllä floattien käyttö voi olla ihan perusteltua.
tosin ehkä kannattaisi lisätä myös alpha-arvo sekaan ja muuttujien pitäminen ei julkisena on kyllä aivan turhaa.
struct Pixel {
float Red;
float Green;
float Blue;
float Alpha;
};
Aihe on jo aika vanha, joten et voi enää vastata siihen.