Avatar billede cheater Nybegynder
17. november 2000 - 11:13 Der er 3 kommentarer og
1 løsning

Grafik i C++

Oki...

- Jeg sidder og leger med lidt grafik i Borland C++ 3.1, og jeg har det problem, at jeg skriver pixels imens at skærmen opdaterer... - det ser ud som om at der mangler nogle pixels, og det flimrer...

Grafik mode som jeg bruger er :

320x200x256

(
    asm  mov ax, 0X13;
    asm  int 0X10;
)

på forhånd tak,

/Cheater
Avatar billede borrisholt Novice
17. november 2000 - 11:17 #1
Kig lidt på det her de skulle bringe dig på sporet ....

#include \"picture.c\"

//////////////////////////////////////////////////////////////////

void vidmode(int);
#pragma aux vidmode =\\
    \"int 10h\"\\
    parm [ax] modify [ax];

//////////////////////////////////////////////////////////////////

void setpal(int c, int r, int g, int b)
{
    outp(0x3c8,c&255);
    outp(0x3c9,r&63);
    outp(0x3c9,g&63);
    outp(0x3c9,b&63);
} //setpal

//////////////////////////////////////////////////////////////////

void main(void)
{
    int i;

    // get into video mode 13 (320x200x256)
    vidmode(0x13);

    // set the palette to a greyscale palette
    // fading from 0,0,0 (black) to 63,63,63 (white)
    for (i=0; i<256; i++)
        setpal(i, i/4, i/4, i/4);

    // copy the object (in this case, an image) to
    // the vga memory (0xa0000)
    memcpy (0xa0000, picture_raw, 64000);

    // wait for a key
    getch();

    // switch back to txtmode
    vidmode(0x03);

} //main


Jens b
Avatar billede cheater Nybegynder
17. november 2000 - 11:46 #2
Hmmm... - jeg skal stadig skrive det på skærmen når den ikke er igang med at opdatere..

- Picture_raw = en slags buffer eller hvad?

Jeg gør følgende for at skrive en pixel...

int offs = (320)*y+x;

asm mov ax,0xa000;
asm mov es,ax;
asm mov di,offs;
asm mov al,color;
asm mov [es:di],al;

...

Istedet skal jeg lave et billede i en buffer, så skrive det hele til skærmen på een gang... - det er jeg med på, men jeg skal vel stadig flytte bufferen til skærmen mens at skærmen ikke bliver opdateret... eller hvad?
Avatar billede devia Nybegynder
17. november 2000 - 11:51 #3
Brug følgende funktion umiddelbart før du tegner din grafik. Dette sikrer at grafikken bliver tegnet før billedet bliver vist på din monitor. - Og ikke imellem to monitoropdateringer.


//WaitRetrace wait for Vertical Blanking to occur
void WaitRetrace(void)
{
    _DX = 0x03DA;

l1: asm {
        in  al,dx;
        and al,0x08;
        jnz l1;
    }

l2: asm {
        in  al,dx;
        and al,0x08;
        jz  l2;
    }
}
Avatar billede cheater Nybegynder
17. november 2000 - 14:10 #4
Oki! - Tak Devia... ;)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester