SlideShare uma empresa Scribd logo
1 de 35
Baixar para ler offline
12BHD Informatica




      Rudimenti di programmazione
grafica in C con la libreria WinBGIm
Informatica (DELS-FEQ) – F. Corno – A.A. 2010/2011
Argomenti
       Librerie grafiche
       La libreria WinBGIm
       Software necessario
       Modello di funzionamento
       Principali funzioni
       Esempi




    2                              12BHD - Informatica   A.A. 2010/2011
12BHD Informatica




                  Librerie grafiche

Programmazione grafica con libreria WinBGIm
Computer graphics, oggi
       Sistemi operativi basati su interfacce grafiche
           Alte risoluzioni, full color
           Applicazioni a più finestre
           “Widget” standard (menu, toolbar, bottoni, campi testo, …)
       Campi applicativi
           Applicazioni “office”
           Applicazioni grafiche (immagini, filmati, …)
           Video giochi
           Programmi scientifici (matematica, fisica, ingegneria, …)
       Però… elevata complessità di programmazione


    4                                       12BHD - Informatica   A.A. 2010/2011
Complessità di programmazione
       Necessità di interagire con il sistema operativo attraverso
        opportune API
       Solitamente le API sono pensate per linguaggi object-
        oriented (C++, Java, C#,VB.Net, python, …)
       Programmazione di tipo asincrono ed event-driven
           L’ordine di esecuzione delle operazioni dipende dalle azioni
            dell’utente e non è sotto il diretto controllo del programma
       Portabilità: API specifiche per un sistema operativo, o API
        “generiche” disponibili per più sistemi operativi
       Funzionalità della GPU: accelerazione, trasparenza, 3D,
        buffering, …

    5                                      12BHD - Informatica   A.A. 2010/2011
Librerie grafiche (API)
       A livello di Sistema operativo
           Windows GDI, Unix X-11, MacOs Aqua
       Soluzioni accelerate non portabili
           DirectX, Direct3D su Windows
       Librerie 2D/3D accelerate portabili
           OpenGL e decine di toolkit basati su OpenGl
           OpenCV
       Librerie per “applicazioni windowing”
           Portabili: GTK, Qt, wxWindows, …
           Windows: WPF (XAML+.NET)
       Librerie di più alto livello
    6                                    12BHD - Informatica   A.A. 2010/2011
…ma si può fare in C?
       Molte librerie espongono anche API per programmi scritti
        in C. Però:
           Forte uso di puntatori e memoria dinamica
           Funzioni spesso complesse e basate su strutture dati (struct,
            matrici, …) che richiedono un certo studio
           Paradigma di programmazione event-driven, da studiare e
            capire
           Hello world → 100-200 righe di programma
       …nulla che si possa imparare in ~un’ora
           …a meno di tornare indietro di 20 anni!



    7                                      12BHD - Informatica   A.A. 2010/2011
12BHD Informatica




            La libreria WinBGIm

Programmazione grafica con libreria WinBGIm
DOS e Borland
       Ai tempi di MS-DOS (prima di Windows 3.0)
       Non esistevano interfacce a finestre
           Console
           Grafica bitmapped
       La software house Borland vendeva favolosi compilatori
           TurboPascal, TurboC/TurboC++
       Nei compilatori Borland era inclusa una libreria grafica
           BGI: Borland Graphics Interface
           Semplice da usare, anche se poco potente (per gli standard
            odierni)
           Programmazione procedurale in C

    9                                     12BHD - Informatica   A.A. 2010/2011
BGI oggi
    La libreria BGI originale funziona:
        Con compilatori a 16 bit
        Con schede grafiche solo EGA/VGA/SVGA
        Nel sistema operativo DOS (non Windows)
    Esiste un “porting” su windows
        WinBGIm: Windows BGI con mouse
        Compatibile con il compilatore mingw
        Estende la “vecchia” BGI con funzioni più utili in ambiente
         windows (es. controllo del mouse)
        Mantiene la stessa modalità di programmazione
        Purtroppo non molto documentata e/o aggiornata
    Non funziona su Linux o Mac OS-X

    10                                   12BHD - Informatica   A.A. 2010/2011
Esempio programma winBGIm
 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <graphics.h>
 4
 5 int main(int argc, char *argv[])
 6 {
 7    initwindow(600, 400, "Demo", 100, 50) ;
 8
10     circle(100,200,30);
11     line (60, 60, 100, 200);
12     ellipse (200, 300, 90, 150, 200,300);
13
14     while( !kbhit() )
15         /*nop*/;
16
17     getch() ;
18
19     closegraph( );
20     exit(0) ;
21 }

 11                                             12BHD - Informatica   A.A. 2010/2011
Esempio programma winBGIm
 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <graphics.h>
 4
 5 int main(int argc, char *argv[])
 6 {
 7    initwindow(600, 400, "Demo", 100, 50) ;
 8
10     circle(100,200,30);
11     line (60, 60, 100, 200);
12     ellipse (200, 300, 90, 150, 200,300);
13
14     while( !kbhit() )
15         /*nop*/;
16
17     getch() ;
18
19     closegraph( );
20     exit(0) ;
21 }

 12                                             12BHD - Informatica   A.A. 2010/2011
12BHD Informatica




             Software necessario

Programmazione grafica con libreria WinBGIm
Installazione WinBGIm
    Composta da 2 file
        Libreria compilata: libbgi.a
        File da includere: graphics.h
    Necessario:
        Copiare tali file nelle directory di installazione di mingw
         (all’interno di codeblocks)
        Impostare opzioni di compilazione particolari nel progetto
            -x c++ -lbgi
    Oppure:
        Scaricare una versione “modificata” di Code::Blocks che
         include già tali modifiche


    14                                   12BHD - Informatica   A.A. 2010/2011
Distribuzione modificata di Code::Blocks


http://codeblocks.codecutter.org/




     15                             12BHD - Informatica   A.A. 2010/2011
12BHD Informatica




    Modello di funzionamento

Programmazione grafica con libreria WinBGIm
Modello di funzionamento
    Il programma può aprire una (o più) finestre grafiche
    Ogni finestra ha un sistema di coordinate in cui lavorare,
     corrispondente ai pixel dell’immagine
    All’interno delle finestre, è possibile disegnare con delle
     primitive grafiche (linee, punti, cerchi, scritte, …) in diversi
     colori
    È possibile leggere i caratteri della tastiera in modalità
     non bloccante




    17                               12BHD - Informatica   A.A. 2010/2011
Finestra grafica
                   Dimensione X




 Dimensione Y




18                   12BHD - Informatica   A.A. 2010/2011
Finestra grafica
                             Dimensione X


                (0, 0)
                         A
                                                                       X
                             ( 250, 100 )
                                  B



 Dimensione Y




                                                      ( getmaxx(), getmaxy() )
                                                                  C
                   Y
19                              12BHD - Informatica   A.A. 2010/2011
Creare una finestra
    La funzione                            int initwindow(int width,
     initwindow(…) crea una                  int height, const char*
     nuova finestra grafica                  title="...", int left=0, int
        Width, height: dimensioni           top=0);
         della finestra in pixel            void closegraph(void);
        Title: titolo (opzionale)
        Left, top: posizione iniziale
         (opzionale)
    Per chiudere la finestra
     usare closegraph()



    20                                   12BHD - Informatica   A.A. 2010/2011
Colori
    16 colori predefiniti                void setcolor(int color);
        Costanti da 0 a 15:                  setcolor(BLUE); // Change
        BLACK, BLUE, GREEN, CYAN,             drawing color to BLUE.
         RED, MAGENTA, BROWN,
         LIGHTGRAY, DARKGRAY,
                                              setcolor(COLOR(255,100,
         LIGHTBLUE, LIGHTGREEN,                0)); // Change drawing color
         LIGHTCYAN, LIGHTRED,                  to reddish-green.
         LIGHTMAGENTA, YELLOW
         WHITE                            void setbkcolor(int color);
    Un qualsiasi colore RGB
        COLOR(r, g, b) con r, g, b,
         compresi tra 0 e 255
        COLOR(255,100,0)


    21                                 12BHD - Informatica   A.A. 2010/2011
12BHD Informatica




               Principali funzioni

Programmazione grafica con libreria WinBGIm
Disegnare
    Punti
        void putpixel(int x, int y, int color);
    Linee
        void line(int x1, int y1, int x2, int y2);
            Segmento da (x1, y1) a (x2, y2) con il colore corrente
        void lineto(int x, int y);
            Segmento dall’ultimo punto tracciato a (x, y)
        void linerel(int dx, int dy);
            Segmento dall’ultimo punto, spostandosi di un vettore (±dx, ±dy)




    23                                         12BHD - Informatica   A.A. 2010/2011
Disegnare
    Curve
        void circle(int x, int y, int radius);
        void arc(int x, int y, int stangle, int endangle, int radius);
            /* angoli da 0 a 360 */
        void pieslice(int x, int y, int stangle, int endangle, int radius);
            /* arco ripieno */
        void ellipse(int x, int y, int stangle, int endangle, int xradius, int
         yradius);
        void fillellipse(int x, int y, int xradius, int yradius); /* pieno */
        void sector(int x, int y, int stangle, int endangle, int xradius, int
         yradius);
            /* arco di ellisse ripieno */

    24                                       12BHD - Informatica   A.A. 2010/2011
Disegnare
    Rettangoli
        void rectangle(int left, int top, int right, int bottom);
        void bar(int left, int top, int right, int bottom); /* riempita */
    Poligoni
        void drawpoly(int numpoints, int *polypoints);
            Polypoints è un vettore di 2N interi, in cui per ciascuno degli N punti
             sono riportare le coordinate X e Y
        void fillpoly(int numpoints, int *polypoints); /* riempito */
    Riempimento
        void floodfill(int x, int y, int border);
            Riempie del colore corrente l’area intorno al punto (x,y), fermandosi
             ai bordi di colore border

    25                                         12BHD - Informatica   A.A. 2010/2011
Scrivere
    “Disegnano” il testo specificato
        void outtextxy(int x, int y, char *textstring);
        void outtext(char *textstring);
    Il carattere si può speficicare con:
        void settextstyle(int font, int direction, int charsize);
            font = 0…10 (font predefiniti dalla BGI)
            direction = HORIZ_DIR
            charsize = 1 o 2




    26                                        12BHD - Informatica   A.A. 2010/2011
Tastiera
    Leggi un carattere senza aspettare l’invio
        int getch(void);
    L’utente ha premuto un tasto?
        int kbhit(void);
        Funzione non bloccante!
            if(kbhit()) { ch = getch() ; move_user(ch) ;} else { move_monsters(); }




    27                                         12BHD - Informatica   A.A. 2010/2011
Mouse
    Coordinate correnti del                  Parametro kind: tipo di
     mouse                                     evento che vogliamo
        int mousex(void);                     interrogare
        int mousey(void);                        WM_MOUSEMOVE
    C’è stato un click?                           WM_LBUTTONDOWN
                                                   WM_LBUTTONUP
        bool ismouseclick(int kind);              WM_RBUTTONDOWN
    Dove è stato il click?                        WM_RBUTTONUP …
        voud getmouseclick(int kind,
         int& x, int& y);
    Pulisci il buffer dei click
     precedenti
        void clearmouseclick(int kind);

    28                                     12BHD - Informatica   A.A. 2010/2011
Controllo del programma
    Piccolo ritardo di elaborazione
        void delay(int millisec);




    29                               12BHD - Informatica   A.A. 2010/2011
12BHD Informatica




                                Esempi

Programmazione grafica con libreria WinBGIm
Esercizio
    Creare una finestra grafica 400x300 e disegnare una
     “griglia” di linee a distanza regolare di 20 pixel
    Opzionalmente, le linee dovranno avere diversi colori
    Opzionalmente, i singoli quadretti dovranno essere
     riempiti con un motivo a scacchiera




    31                            12BHD - Informatica   A.A. 2010/2011
Esercizio
    Disegnare il grafico della funzione y=x^2 (con x ∈ [-2,2])
     in una finestra di dimensione 400x400
    Opzionalmente, disegnare anche gli assi cartesiani
    Nota: occorre rimappare il sistema di coordinate della
     finestra nel sistema di coordinate del grafico

         (0,0)                                                                          (x2, y2)
                                           Cosa
                 P (r, c)                   lega                P (x, y)
                                           (r,c) a
                                           (x,y)?
                            (dimx, dimy)             (x1, y1)



    32                                           12BHD - Informatica   A.A. 2010/2011
Esercizio
    Realizzare un gioco scemo nel quale l’utente può spostare
     un quadrato, spostandolo con i tasti freccia.
    I movimenti del quadrato dovranno essere vincolati
     all’interno della finestra
    Se l’utente preme H (hyperspace), il quadrato scompare e
     ricompare in un punto casuale.




    33                            12BHD - Informatica   A.A. 2010/2011
Riferimenti e link
    Code::Blocks EDU-Portable
        http://codeblocks.codecutter.org/
    Documentazione funzioni WinBGIm
        Introduzione: http://www.cs.colorado.edu/~main/cs1300-
         old/cs1300/doc/bgi/bgi.html
        Consultazione on-line:
         http://www.cs.colorado.edu/~main/cs1300/doc/bgi/index.html
        In formato PDF:
         http://www.stefansundin.se/programmering/proga/WINBGIM-
         %20MANUAL.pdf
    Dispensa sull’uso delle funzioni BGI
        http://web.tiscali.it/cervelli/dispense/Programmazione%20Grafic
         a%20V%200.3.pdf

    34                                  12BHD - Informatica   A.A. 2010/2011
Licenza d’uso
    Queste diapositive sono distribuite con licenza Creative
     Commons “Attribuzione - Non commerciale - Condividi allo
     stesso modo 2.5 Italia (CC BY-NC-SA 2.5)”
    Sei libero:
        di riprodurre, distribuire, comunicare al pubblico, esporre in pubblico,
         rappresentare, eseguire e recitare quest'opera
        di modificare quest'opera
    Alle seguenti condizioni:
        Attribuzione — Devi attribuire la paternità dell'opera agli autori
         originali e in modo tale da non suggerire che essi avallino te o il modo
         in cui tu usi l'opera.
        Non commerciale — Non puoi usare quest'opera per fini
         commerciali.
        Condividi allo stesso modo — Se alteri o trasformi quest'opera, o se
         la usi per crearne un'altra, puoi distribuire l'opera risultante solo con
         una licenza identica o equivalente a questa.
    http://creativecommons.org/licenses/by-nc-sa/2.5/it/
    35                                        12BHD - Informatica   A.A. 2010/2011

Mais conteúdo relacionado

Semelhante a Rudimenti di programmazione grafica in C con la libreria grafica WinBGIm

Lucidi relativi al DVD di Programmazione in C
Lucidi relativi al DVD di Programmazione in CLucidi relativi al DVD di Programmazione in C
Lucidi relativi al DVD di Programmazione in CFulvio Corno
 
Presentazione GstarCAD 2011
Presentazione GstarCAD 2011Presentazione GstarCAD 2011
Presentazione GstarCAD 2011cgaldini
 
Creazione di una stazione meteo con prodotti opensource. Linux day 2014 - Lin...
Creazione di una stazione meteo con prodotti opensource. Linux day 2014 - Lin...Creazione di una stazione meteo con prodotti opensource. Linux day 2014 - Lin...
Creazione di una stazione meteo con prodotti opensource. Linux day 2014 - Lin...Matteo Baccan
 
.Net 4.0 Preview @ UGIdotNet
.Net 4.0 Preview @ UGIdotNet.Net 4.0 Preview @ UGIdotNet
.Net 4.0 Preview @ UGIdotNetMauro Servienti
 
Ria (Rich Internet Application) : Autodesk Homestyler , Domus Planner
Ria (Rich Internet Application) : Autodesk Homestyler , Domus PlannerRia (Rich Internet Application) : Autodesk Homestyler , Domus Planner
Ria (Rich Internet Application) : Autodesk Homestyler , Domus PlannerNicola L
 
Ionic Cordova vs React Native
Ionic Cordova vs React NativeIonic Cordova vs React Native
Ionic Cordova vs React NativeAntonio Gallo
 
Introduzione al software libero - Giulio Fieramosca
Introduzione al software libero - Giulio FieramoscaIntroduzione al software libero - Giulio Fieramosca
Introduzione al software libero - Giulio FieramoscaLibreItalia
 
Responsive Web Design
Responsive Web DesignResponsive Web Design
Responsive Web DesignSimone Viani
 
Alessandro Forte - Piattaforma Android
Alessandro Forte - Piattaforma AndroidAlessandro Forte - Piattaforma Android
Alessandro Forte - Piattaforma AndroidAlessandro Forte
 
Dati, dati, dati! - Sfruttare le potenzialità delle XPages con Google Chart T...
Dati, dati, dati! - Sfruttare le potenzialità delle XPages con Google Chart T...Dati, dati, dati! - Sfruttare le potenzialità delle XPages con Google Chart T...
Dati, dati, dati! - Sfruttare le potenzialità delle XPages con Google Chart T...Dominopoint - Italian Lotus User Group
 
Iefficiency 2-bernasconi ibm power strategy
Iefficiency 2-bernasconi ibm power strategyIefficiency 2-bernasconi ibm power strategy
Iefficiency 2-bernasconi ibm power strategyAndrea Colombetti
 
Introduzione all’Iot e alle schede elettroniche
Introduzione all’Iot e alle schede elettronicheIntroduzione all’Iot e alle schede elettroniche
Introduzione all’Iot e alle schede elettronicheEnrico La Sala
 
Smau milano 2012 arena social media massimo-grava
Smau milano 2012   arena social media massimo-gravaSmau milano 2012   arena social media massimo-grava
Smau milano 2012 arena social media massimo-gravaSMAU
 
Hp presenta nuovi pc eleganti e convenienti
Hp presenta nuovi pc eleganti e convenientiHp presenta nuovi pc eleganti e convenienti
Hp presenta nuovi pc eleganti e convenientieboncimino
 
Mob04 best practices for windows phone ui design
Mob04   best practices for windows phone ui designMob04   best practices for windows phone ui design
Mob04 best practices for windows phone ui designDotNetCampus
 
Mobile platforms development overview
Mobile platforms development overviewMobile platforms development overview
Mobile platforms development overviewAlfredo Morresi
 

Semelhante a Rudimenti di programmazione grafica in C con la libreria grafica WinBGIm (20)

Lucidi relativi al DVD di Programmazione in C
Lucidi relativi al DVD di Programmazione in CLucidi relativi al DVD di Programmazione in C
Lucidi relativi al DVD di Programmazione in C
 
Presentazione GstarCAD 2011
Presentazione GstarCAD 2011Presentazione GstarCAD 2011
Presentazione GstarCAD 2011
 
Visual studio code
Visual studio codeVisual studio code
Visual studio code
 
Creazione di una stazione meteo con prodotti opensource. Linux day 2014 - Lin...
Creazione di una stazione meteo con prodotti opensource. Linux day 2014 - Lin...Creazione di una stazione meteo con prodotti opensource. Linux day 2014 - Lin...
Creazione di una stazione meteo con prodotti opensource. Linux day 2014 - Lin...
 
.Net 4.0 Preview @ UGIdotNet
.Net 4.0 Preview @ UGIdotNet.Net 4.0 Preview @ UGIdotNet
.Net 4.0 Preview @ UGIdotNet
 
Scheda video word
Scheda video wordScheda video word
Scheda video word
 
Ria (Rich Internet Application) : Autodesk Homestyler , Domus Planner
Ria (Rich Internet Application) : Autodesk Homestyler , Domus PlannerRia (Rich Internet Application) : Autodesk Homestyler , Domus Planner
Ria (Rich Internet Application) : Autodesk Homestyler , Domus Planner
 
Ionic Cordova vs React Native
Ionic Cordova vs React NativeIonic Cordova vs React Native
Ionic Cordova vs React Native
 
3rd 3DDRESD: VGA Core
3rd 3DDRESD: VGA Core3rd 3DDRESD: VGA Core
3rd 3DDRESD: VGA Core
 
Introduzione al software libero - Giulio Fieramosca
Introduzione al software libero - Giulio FieramoscaIntroduzione al software libero - Giulio Fieramosca
Introduzione al software libero - Giulio Fieramosca
 
Responsive Web Design
Responsive Web DesignResponsive Web Design
Responsive Web Design
 
Alessandro Forte - Piattaforma Android
Alessandro Forte - Piattaforma AndroidAlessandro Forte - Piattaforma Android
Alessandro Forte - Piattaforma Android
 
Dati, dati, dati! - Sfruttare le potenzialità delle XPages con Google Chart T...
Dati, dati, dati! - Sfruttare le potenzialità delle XPages con Google Chart T...Dati, dati, dati! - Sfruttare le potenzialità delle XPages con Google Chart T...
Dati, dati, dati! - Sfruttare le potenzialità delle XPages con Google Chart T...
 
Iefficiency 2-bernasconi ibm power strategy
Iefficiency 2-bernasconi ibm power strategyIefficiency 2-bernasconi ibm power strategy
Iefficiency 2-bernasconi ibm power strategy
 
Modulo 1 - Lezione 1
Modulo 1 - Lezione 1Modulo 1 - Lezione 1
Modulo 1 - Lezione 1
 
Introduzione all’Iot e alle schede elettroniche
Introduzione all’Iot e alle schede elettronicheIntroduzione all’Iot e alle schede elettroniche
Introduzione all’Iot e alle schede elettroniche
 
Smau milano 2012 arena social media massimo-grava
Smau milano 2012   arena social media massimo-gravaSmau milano 2012   arena social media massimo-grava
Smau milano 2012 arena social media massimo-grava
 
Hp presenta nuovi pc eleganti e convenienti
Hp presenta nuovi pc eleganti e convenientiHp presenta nuovi pc eleganti e convenienti
Hp presenta nuovi pc eleganti e convenienti
 
Mob04 best practices for windows phone ui design
Mob04   best practices for windows phone ui designMob04   best practices for windows phone ui design
Mob04 best practices for windows phone ui design
 
Mobile platforms development overview
Mobile platforms development overviewMobile platforms development overview
Mobile platforms development overview
 

Último

Quadrilateri e isometrie studente di liceo
Quadrilateri e isometrie studente di liceoQuadrilateri e isometrie studente di liceo
Quadrilateri e isometrie studente di liceoyanmeng831
 
case passive_GiorgiaDeAscaniis.pptx.....
case passive_GiorgiaDeAscaniis.pptx.....case passive_GiorgiaDeAscaniis.pptx.....
case passive_GiorgiaDeAscaniis.pptx.....giorgiadeascaniis59
 
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptx
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptxScienza Potere Puntoaaaaaaaaaaaaaaa.pptx
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptxlorenzodemidio01
 
descrizioni della antica civiltà dei sumeri.pptx
descrizioni della antica civiltà dei sumeri.pptxdescrizioni della antica civiltà dei sumeri.pptx
descrizioni della antica civiltà dei sumeri.pptxtecongo2007
 
Oppressi_oppressori.pptx................
Oppressi_oppressori.pptx................Oppressi_oppressori.pptx................
Oppressi_oppressori.pptx................giorgiadeascaniis59
 
Adducchio.Samuel-Steve_Jobs.ppppppppppptx
Adducchio.Samuel-Steve_Jobs.ppppppppppptxAdducchio.Samuel-Steve_Jobs.ppppppppppptx
Adducchio.Samuel-Steve_Jobs.ppppppppppptxsasaselvatico
 
Descrizione Piccolo teorema di Talete.pptx
Descrizione Piccolo teorema di Talete.pptxDescrizione Piccolo teorema di Talete.pptx
Descrizione Piccolo teorema di Talete.pptxtecongo2007
 
LE ALGHE.pptx ..........................
LE ALGHE.pptx ..........................LE ALGHE.pptx ..........................
LE ALGHE.pptx ..........................giorgiadeascaniis59
 
Aristotele, vita e opere e fisica...pptx
Aristotele, vita e opere e fisica...pptxAristotele, vita e opere e fisica...pptx
Aristotele, vita e opere e fisica...pptxtecongo2007
 
Scrittura seo e scrittura accessibile
Scrittura seo e scrittura accessibileScrittura seo e scrittura accessibile
Scrittura seo e scrittura accessibileNicola Rabbi
 
Vuoi girare il mondo? educazione civica.
Vuoi girare il mondo? educazione civica.Vuoi girare il mondo? educazione civica.
Vuoi girare il mondo? educazione civica.camillaorlando17
 
Esame di Stato 2024 - Materiale conferenza online 09 aprile 2024
Esame di Stato 2024 - Materiale conferenza online 09 aprile 2024Esame di Stato 2024 - Materiale conferenza online 09 aprile 2024
Esame di Stato 2024 - Materiale conferenza online 09 aprile 2024IISGiovanniVallePado
 
Una breve introduzione ad Elsa Morante, vita e opere
Una breve introduzione ad Elsa Morante, vita e opereUna breve introduzione ad Elsa Morante, vita e opere
Una breve introduzione ad Elsa Morante, vita e opereMarco Chizzali
 
Storia-CarloMagno-TeccarelliLorenzo.pptx
Storia-CarloMagno-TeccarelliLorenzo.pptxStoria-CarloMagno-TeccarelliLorenzo.pptx
Storia-CarloMagno-TeccarelliLorenzo.pptxteccarellilorenzo
 
Nicola pisano aaaaaaaaaaaaaaaaaa(1).pptx
Nicola pisano aaaaaaaaaaaaaaaaaa(1).pptxNicola pisano aaaaaaaaaaaaaaaaaa(1).pptx
Nicola pisano aaaaaaaaaaaaaaaaaa(1).pptxlorenzodemidio01
 
ProgettoDiEducazioneCivicaDefinitivo_Christian Tosone.pptx
ProgettoDiEducazioneCivicaDefinitivo_Christian Tosone.pptxProgettoDiEducazioneCivicaDefinitivo_Christian Tosone.pptx
ProgettoDiEducazioneCivicaDefinitivo_Christian Tosone.pptxlorenzodemidio01
 
CHIẾN THẮNG KÌ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN - PHAN THẾ HOÀI (36...
CHIẾN THẮNG KÌ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN - PHAN THẾ HOÀI (36...CHIẾN THẮNG KÌ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN - PHAN THẾ HOÀI (36...
CHIẾN THẮNG KÌ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN - PHAN THẾ HOÀI (36...Nguyen Thanh Tu Collection
 
Presentazioni Efficaci e lezioni di Educazione Civica
Presentazioni Efficaci e lezioni di Educazione CivicaPresentazioni Efficaci e lezioni di Educazione Civica
Presentazioni Efficaci e lezioni di Educazione CivicaSalvatore Cianciabella
 
Presentazione tre geni della tecnologia informatica
Presentazione tre geni della tecnologia informaticaPresentazione tre geni della tecnologia informatica
Presentazione tre geni della tecnologia informaticanico07fusco
 
discorso generale sulla fisica e le discipline.pptx
discorso generale sulla fisica e le discipline.pptxdiscorso generale sulla fisica e le discipline.pptx
discorso generale sulla fisica e le discipline.pptxtecongo2007
 

Último (20)

Quadrilateri e isometrie studente di liceo
Quadrilateri e isometrie studente di liceoQuadrilateri e isometrie studente di liceo
Quadrilateri e isometrie studente di liceo
 
case passive_GiorgiaDeAscaniis.pptx.....
case passive_GiorgiaDeAscaniis.pptx.....case passive_GiorgiaDeAscaniis.pptx.....
case passive_GiorgiaDeAscaniis.pptx.....
 
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptx
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptxScienza Potere Puntoaaaaaaaaaaaaaaa.pptx
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptx
 
descrizioni della antica civiltà dei sumeri.pptx
descrizioni della antica civiltà dei sumeri.pptxdescrizioni della antica civiltà dei sumeri.pptx
descrizioni della antica civiltà dei sumeri.pptx
 
Oppressi_oppressori.pptx................
Oppressi_oppressori.pptx................Oppressi_oppressori.pptx................
Oppressi_oppressori.pptx................
 
Adducchio.Samuel-Steve_Jobs.ppppppppppptx
Adducchio.Samuel-Steve_Jobs.ppppppppppptxAdducchio.Samuel-Steve_Jobs.ppppppppppptx
Adducchio.Samuel-Steve_Jobs.ppppppppppptx
 
Descrizione Piccolo teorema di Talete.pptx
Descrizione Piccolo teorema di Talete.pptxDescrizione Piccolo teorema di Talete.pptx
Descrizione Piccolo teorema di Talete.pptx
 
LE ALGHE.pptx ..........................
LE ALGHE.pptx ..........................LE ALGHE.pptx ..........................
LE ALGHE.pptx ..........................
 
Aristotele, vita e opere e fisica...pptx
Aristotele, vita e opere e fisica...pptxAristotele, vita e opere e fisica...pptx
Aristotele, vita e opere e fisica...pptx
 
Scrittura seo e scrittura accessibile
Scrittura seo e scrittura accessibileScrittura seo e scrittura accessibile
Scrittura seo e scrittura accessibile
 
Vuoi girare il mondo? educazione civica.
Vuoi girare il mondo? educazione civica.Vuoi girare il mondo? educazione civica.
Vuoi girare il mondo? educazione civica.
 
Esame di Stato 2024 - Materiale conferenza online 09 aprile 2024
Esame di Stato 2024 - Materiale conferenza online 09 aprile 2024Esame di Stato 2024 - Materiale conferenza online 09 aprile 2024
Esame di Stato 2024 - Materiale conferenza online 09 aprile 2024
 
Una breve introduzione ad Elsa Morante, vita e opere
Una breve introduzione ad Elsa Morante, vita e opereUna breve introduzione ad Elsa Morante, vita e opere
Una breve introduzione ad Elsa Morante, vita e opere
 
Storia-CarloMagno-TeccarelliLorenzo.pptx
Storia-CarloMagno-TeccarelliLorenzo.pptxStoria-CarloMagno-TeccarelliLorenzo.pptx
Storia-CarloMagno-TeccarelliLorenzo.pptx
 
Nicola pisano aaaaaaaaaaaaaaaaaa(1).pptx
Nicola pisano aaaaaaaaaaaaaaaaaa(1).pptxNicola pisano aaaaaaaaaaaaaaaaaa(1).pptx
Nicola pisano aaaaaaaaaaaaaaaaaa(1).pptx
 
ProgettoDiEducazioneCivicaDefinitivo_Christian Tosone.pptx
ProgettoDiEducazioneCivicaDefinitivo_Christian Tosone.pptxProgettoDiEducazioneCivicaDefinitivo_Christian Tosone.pptx
ProgettoDiEducazioneCivicaDefinitivo_Christian Tosone.pptx
 
CHIẾN THẮNG KÌ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN - PHAN THẾ HOÀI (36...
CHIẾN THẮNG KÌ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN - PHAN THẾ HOÀI (36...CHIẾN THẮNG KÌ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN - PHAN THẾ HOÀI (36...
CHIẾN THẮNG KÌ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN - PHAN THẾ HOÀI (36...
 
Presentazioni Efficaci e lezioni di Educazione Civica
Presentazioni Efficaci e lezioni di Educazione CivicaPresentazioni Efficaci e lezioni di Educazione Civica
Presentazioni Efficaci e lezioni di Educazione Civica
 
Presentazione tre geni della tecnologia informatica
Presentazione tre geni della tecnologia informaticaPresentazione tre geni della tecnologia informatica
Presentazione tre geni della tecnologia informatica
 
discorso generale sulla fisica e le discipline.pptx
discorso generale sulla fisica e le discipline.pptxdiscorso generale sulla fisica e le discipline.pptx
discorso generale sulla fisica e le discipline.pptx
 

Rudimenti di programmazione grafica in C con la libreria grafica WinBGIm

  • 1. 12BHD Informatica Rudimenti di programmazione grafica in C con la libreria WinBGIm Informatica (DELS-FEQ) – F. Corno – A.A. 2010/2011
  • 2. Argomenti  Librerie grafiche  La libreria WinBGIm  Software necessario  Modello di funzionamento  Principali funzioni  Esempi 2 12BHD - Informatica A.A. 2010/2011
  • 3. 12BHD Informatica Librerie grafiche Programmazione grafica con libreria WinBGIm
  • 4. Computer graphics, oggi  Sistemi operativi basati su interfacce grafiche  Alte risoluzioni, full color  Applicazioni a più finestre  “Widget” standard (menu, toolbar, bottoni, campi testo, …)  Campi applicativi  Applicazioni “office”  Applicazioni grafiche (immagini, filmati, …)  Video giochi  Programmi scientifici (matematica, fisica, ingegneria, …)  Però… elevata complessità di programmazione 4 12BHD - Informatica A.A. 2010/2011
  • 5. Complessità di programmazione  Necessità di interagire con il sistema operativo attraverso opportune API  Solitamente le API sono pensate per linguaggi object- oriented (C++, Java, C#,VB.Net, python, …)  Programmazione di tipo asincrono ed event-driven  L’ordine di esecuzione delle operazioni dipende dalle azioni dell’utente e non è sotto il diretto controllo del programma  Portabilità: API specifiche per un sistema operativo, o API “generiche” disponibili per più sistemi operativi  Funzionalità della GPU: accelerazione, trasparenza, 3D, buffering, … 5 12BHD - Informatica A.A. 2010/2011
  • 6. Librerie grafiche (API)  A livello di Sistema operativo  Windows GDI, Unix X-11, MacOs Aqua  Soluzioni accelerate non portabili  DirectX, Direct3D su Windows  Librerie 2D/3D accelerate portabili  OpenGL e decine di toolkit basati su OpenGl  OpenCV  Librerie per “applicazioni windowing”  Portabili: GTK, Qt, wxWindows, …  Windows: WPF (XAML+.NET)  Librerie di più alto livello 6 12BHD - Informatica A.A. 2010/2011
  • 7. …ma si può fare in C?  Molte librerie espongono anche API per programmi scritti in C. Però:  Forte uso di puntatori e memoria dinamica  Funzioni spesso complesse e basate su strutture dati (struct, matrici, …) che richiedono un certo studio  Paradigma di programmazione event-driven, da studiare e capire  Hello world → 100-200 righe di programma  …nulla che si possa imparare in ~un’ora  …a meno di tornare indietro di 20 anni! 7 12BHD - Informatica A.A. 2010/2011
  • 8. 12BHD Informatica La libreria WinBGIm Programmazione grafica con libreria WinBGIm
  • 9. DOS e Borland  Ai tempi di MS-DOS (prima di Windows 3.0)  Non esistevano interfacce a finestre  Console  Grafica bitmapped  La software house Borland vendeva favolosi compilatori  TurboPascal, TurboC/TurboC++  Nei compilatori Borland era inclusa una libreria grafica  BGI: Borland Graphics Interface  Semplice da usare, anche se poco potente (per gli standard odierni)  Programmazione procedurale in C 9 12BHD - Informatica A.A. 2010/2011
  • 10. BGI oggi  La libreria BGI originale funziona:  Con compilatori a 16 bit  Con schede grafiche solo EGA/VGA/SVGA  Nel sistema operativo DOS (non Windows)  Esiste un “porting” su windows  WinBGIm: Windows BGI con mouse  Compatibile con il compilatore mingw  Estende la “vecchia” BGI con funzioni più utili in ambiente windows (es. controllo del mouse)  Mantiene la stessa modalità di programmazione  Purtroppo non molto documentata e/o aggiornata  Non funziona su Linux o Mac OS-X 10 12BHD - Informatica A.A. 2010/2011
  • 11. Esempio programma winBGIm 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <graphics.h> 4 5 int main(int argc, char *argv[]) 6 { 7 initwindow(600, 400, "Demo", 100, 50) ; 8 10 circle(100,200,30); 11 line (60, 60, 100, 200); 12 ellipse (200, 300, 90, 150, 200,300); 13 14 while( !kbhit() ) 15 /*nop*/; 16 17 getch() ; 18 19 closegraph( ); 20 exit(0) ; 21 } 11 12BHD - Informatica A.A. 2010/2011
  • 12. Esempio programma winBGIm 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <graphics.h> 4 5 int main(int argc, char *argv[]) 6 { 7 initwindow(600, 400, "Demo", 100, 50) ; 8 10 circle(100,200,30); 11 line (60, 60, 100, 200); 12 ellipse (200, 300, 90, 150, 200,300); 13 14 while( !kbhit() ) 15 /*nop*/; 16 17 getch() ; 18 19 closegraph( ); 20 exit(0) ; 21 } 12 12BHD - Informatica A.A. 2010/2011
  • 13. 12BHD Informatica Software necessario Programmazione grafica con libreria WinBGIm
  • 14. Installazione WinBGIm  Composta da 2 file  Libreria compilata: libbgi.a  File da includere: graphics.h  Necessario:  Copiare tali file nelle directory di installazione di mingw (all’interno di codeblocks)  Impostare opzioni di compilazione particolari nel progetto  -x c++ -lbgi  Oppure:  Scaricare una versione “modificata” di Code::Blocks che include già tali modifiche 14 12BHD - Informatica A.A. 2010/2011
  • 15. Distribuzione modificata di Code::Blocks http://codeblocks.codecutter.org/ 15 12BHD - Informatica A.A. 2010/2011
  • 16. 12BHD Informatica Modello di funzionamento Programmazione grafica con libreria WinBGIm
  • 17. Modello di funzionamento  Il programma può aprire una (o più) finestre grafiche  Ogni finestra ha un sistema di coordinate in cui lavorare, corrispondente ai pixel dell’immagine  All’interno delle finestre, è possibile disegnare con delle primitive grafiche (linee, punti, cerchi, scritte, …) in diversi colori  È possibile leggere i caratteri della tastiera in modalità non bloccante 17 12BHD - Informatica A.A. 2010/2011
  • 18. Finestra grafica Dimensione X Dimensione Y 18 12BHD - Informatica A.A. 2010/2011
  • 19. Finestra grafica Dimensione X (0, 0) A X ( 250, 100 ) B Dimensione Y ( getmaxx(), getmaxy() ) C Y 19 12BHD - Informatica A.A. 2010/2011
  • 20. Creare una finestra  La funzione  int initwindow(int width, initwindow(…) crea una int height, const char* nuova finestra grafica title="...", int left=0, int  Width, height: dimensioni top=0); della finestra in pixel  void closegraph(void);  Title: titolo (opzionale)  Left, top: posizione iniziale (opzionale)  Per chiudere la finestra usare closegraph() 20 12BHD - Informatica A.A. 2010/2011
  • 21. Colori  16 colori predefiniti  void setcolor(int color);  Costanti da 0 a 15:  setcolor(BLUE); // Change  BLACK, BLUE, GREEN, CYAN, drawing color to BLUE. RED, MAGENTA, BROWN, LIGHTGRAY, DARKGRAY,  setcolor(COLOR(255,100, LIGHTBLUE, LIGHTGREEN, 0)); // Change drawing color LIGHTCYAN, LIGHTRED, to reddish-green. LIGHTMAGENTA, YELLOW WHITE  void setbkcolor(int color);  Un qualsiasi colore RGB  COLOR(r, g, b) con r, g, b, compresi tra 0 e 255  COLOR(255,100,0) 21 12BHD - Informatica A.A. 2010/2011
  • 22. 12BHD Informatica Principali funzioni Programmazione grafica con libreria WinBGIm
  • 23. Disegnare  Punti  void putpixel(int x, int y, int color);  Linee  void line(int x1, int y1, int x2, int y2);  Segmento da (x1, y1) a (x2, y2) con il colore corrente  void lineto(int x, int y);  Segmento dall’ultimo punto tracciato a (x, y)  void linerel(int dx, int dy);  Segmento dall’ultimo punto, spostandosi di un vettore (±dx, ±dy) 23 12BHD - Informatica A.A. 2010/2011
  • 24. Disegnare  Curve  void circle(int x, int y, int radius);  void arc(int x, int y, int stangle, int endangle, int radius);  /* angoli da 0 a 360 */  void pieslice(int x, int y, int stangle, int endangle, int radius);  /* arco ripieno */  void ellipse(int x, int y, int stangle, int endangle, int xradius, int yradius);  void fillellipse(int x, int y, int xradius, int yradius); /* pieno */  void sector(int x, int y, int stangle, int endangle, int xradius, int yradius);  /* arco di ellisse ripieno */ 24 12BHD - Informatica A.A. 2010/2011
  • 25. Disegnare  Rettangoli  void rectangle(int left, int top, int right, int bottom);  void bar(int left, int top, int right, int bottom); /* riempita */  Poligoni  void drawpoly(int numpoints, int *polypoints);  Polypoints è un vettore di 2N interi, in cui per ciascuno degli N punti sono riportare le coordinate X e Y  void fillpoly(int numpoints, int *polypoints); /* riempito */  Riempimento  void floodfill(int x, int y, int border);  Riempie del colore corrente l’area intorno al punto (x,y), fermandosi ai bordi di colore border 25 12BHD - Informatica A.A. 2010/2011
  • 26. Scrivere  “Disegnano” il testo specificato  void outtextxy(int x, int y, char *textstring);  void outtext(char *textstring);  Il carattere si può speficicare con:  void settextstyle(int font, int direction, int charsize);  font = 0…10 (font predefiniti dalla BGI)  direction = HORIZ_DIR  charsize = 1 o 2 26 12BHD - Informatica A.A. 2010/2011
  • 27. Tastiera  Leggi un carattere senza aspettare l’invio  int getch(void);  L’utente ha premuto un tasto?  int kbhit(void);  Funzione non bloccante!  if(kbhit()) { ch = getch() ; move_user(ch) ;} else { move_monsters(); } 27 12BHD - Informatica A.A. 2010/2011
  • 28. Mouse  Coordinate correnti del  Parametro kind: tipo di mouse evento che vogliamo  int mousex(void); interrogare  int mousey(void);  WM_MOUSEMOVE  C’è stato un click? WM_LBUTTONDOWN WM_LBUTTONUP  bool ismouseclick(int kind); WM_RBUTTONDOWN  Dove è stato il click? WM_RBUTTONUP …  voud getmouseclick(int kind, int& x, int& y);  Pulisci il buffer dei click precedenti  void clearmouseclick(int kind); 28 12BHD - Informatica A.A. 2010/2011
  • 29. Controllo del programma  Piccolo ritardo di elaborazione  void delay(int millisec); 29 12BHD - Informatica A.A. 2010/2011
  • 30. 12BHD Informatica Esempi Programmazione grafica con libreria WinBGIm
  • 31. Esercizio  Creare una finestra grafica 400x300 e disegnare una “griglia” di linee a distanza regolare di 20 pixel  Opzionalmente, le linee dovranno avere diversi colori  Opzionalmente, i singoli quadretti dovranno essere riempiti con un motivo a scacchiera 31 12BHD - Informatica A.A. 2010/2011
  • 32. Esercizio  Disegnare il grafico della funzione y=x^2 (con x ∈ [-2,2]) in una finestra di dimensione 400x400  Opzionalmente, disegnare anche gli assi cartesiani  Nota: occorre rimappare il sistema di coordinate della finestra nel sistema di coordinate del grafico (0,0) (x2, y2) Cosa P (r, c) lega P (x, y) (r,c) a (x,y)? (dimx, dimy) (x1, y1) 32 12BHD - Informatica A.A. 2010/2011
  • 33. Esercizio  Realizzare un gioco scemo nel quale l’utente può spostare un quadrato, spostandolo con i tasti freccia.  I movimenti del quadrato dovranno essere vincolati all’interno della finestra  Se l’utente preme H (hyperspace), il quadrato scompare e ricompare in un punto casuale. 33 12BHD - Informatica A.A. 2010/2011
  • 34. Riferimenti e link  Code::Blocks EDU-Portable  http://codeblocks.codecutter.org/  Documentazione funzioni WinBGIm  Introduzione: http://www.cs.colorado.edu/~main/cs1300- old/cs1300/doc/bgi/bgi.html  Consultazione on-line: http://www.cs.colorado.edu/~main/cs1300/doc/bgi/index.html  In formato PDF: http://www.stefansundin.se/programmering/proga/WINBGIM- %20MANUAL.pdf  Dispensa sull’uso delle funzioni BGI  http://web.tiscali.it/cervelli/dispense/Programmazione%20Grafic a%20V%200.3.pdf 34 12BHD - Informatica A.A. 2010/2011
  • 35. Licenza d’uso  Queste diapositive sono distribuite con licenza Creative Commons “Attribuzione - Non commerciale - Condividi allo stesso modo 2.5 Italia (CC BY-NC-SA 2.5)”  Sei libero:  di riprodurre, distribuire, comunicare al pubblico, esporre in pubblico, rappresentare, eseguire e recitare quest'opera  di modificare quest'opera  Alle seguenti condizioni:  Attribuzione — Devi attribuire la paternità dell'opera agli autori originali e in modo tale da non suggerire che essi avallino te o il modo in cui tu usi l'opera.  Non commerciale — Non puoi usare quest'opera per fini commerciali.  Condividi allo stesso modo — Se alteri o trasformi quest'opera, o se la usi per crearne un'altra, puoi distribuire l'opera risultante solo con una licenza identica o equivalente a questa.  http://creativecommons.org/licenses/by-nc-sa/2.5/it/ 35 12BHD - Informatica A.A. 2010/2011