Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: Ruudunkäsittely C++:lla

Sivun loppuun

kala [18.12.2002 18:43:20]

#

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;
            }
    }
};

kala [19.12.2002 13:56:02]

#

ainiin, ja kommentteja saa antaa taas.

progo [19.12.2002 18:15:39]

#

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

kala [19.12.2002 18:40:10]

#

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.

uttumuttu [19.12.2002 22:54:34]

#

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.

Olli Vanhoja [12.02.2003 18:17:43]

#

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.

Olli Vanhoja [12.02.2003 18:17:44]

#

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.

toodles [11.06.2003 19:35:51]

#

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

freelove [25.02.2005 05:55:28]

#

"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;
};


Sivun alkuun

Vastaus

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

Tietoa sivustosta