Your SlideShare is downloading. ×
0
Rudimenti di programmazione grafica in C con la libreria grafica WinBGIm
Rudimenti di programmazione grafica in C con la libreria grafica WinBGIm
Rudimenti di programmazione grafica in C con la libreria grafica WinBGIm
Rudimenti di programmazione grafica in C con la libreria grafica WinBGIm
Rudimenti di programmazione grafica in C con la libreria grafica WinBGIm
Rudimenti di programmazione grafica in C con la libreria grafica WinBGIm
Rudimenti di programmazione grafica in C con la libreria grafica WinBGIm
Rudimenti di programmazione grafica in C con la libreria grafica WinBGIm
Rudimenti di programmazione grafica in C con la libreria grafica WinBGIm
Rudimenti di programmazione grafica in C con la libreria grafica WinBGIm
Rudimenti di programmazione grafica in C con la libreria grafica WinBGIm
Rudimenti di programmazione grafica in C con la libreria grafica WinBGIm
Rudimenti di programmazione grafica in C con la libreria grafica WinBGIm
Rudimenti di programmazione grafica in C con la libreria grafica WinBGIm
Rudimenti di programmazione grafica in C con la libreria grafica WinBGIm
Rudimenti di programmazione grafica in C con la libreria grafica WinBGIm
Rudimenti di programmazione grafica in C con la libreria grafica WinBGIm
Rudimenti di programmazione grafica in C con la libreria grafica WinBGIm
Rudimenti di programmazione grafica in C con la libreria grafica WinBGIm
Rudimenti di programmazione grafica in C con la libreria grafica WinBGIm
Rudimenti di programmazione grafica in C con la libreria grafica WinBGIm
Rudimenti di programmazione grafica in C con la libreria grafica WinBGIm
Rudimenti di programmazione grafica in C con la libreria grafica WinBGIm
Rudimenti di programmazione grafica in C con la libreria grafica WinBGIm
Rudimenti di programmazione grafica in C con la libreria grafica WinBGIm
Rudimenti di programmazione grafica in C con la libreria grafica WinBGIm
Rudimenti di programmazione grafica in C con la libreria grafica WinBGIm
Rudimenti di programmazione grafica in C con la libreria grafica WinBGIm
Rudimenti di programmazione grafica in C con la libreria grafica WinBGIm
Rudimenti di programmazione grafica in C con la libreria grafica WinBGIm
Rudimenti di programmazione grafica in C con la libreria grafica WinBGIm
Rudimenti di programmazione grafica in C con la libreria grafica WinBGIm
Rudimenti di programmazione grafica in C con la libreria grafica WinBGIm
Rudimenti di programmazione grafica in C con la libreria grafica WinBGIm
Rudimenti di programmazione grafica in C con la libreria grafica WinBGIm
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Rudimenti di programmazione grafica in C con la libreria grafica WinBGIm

9,736

Published on

Introduzione alla programmazione di semplici applicazioni grafiche in C utilizzando la libreria grafica WinBGIm. …

Introduzione alla programmazione di semplici applicazioni grafiche in C utilizzando la libreria grafica WinBGIm.
Lucidi utilizzati in una lezione extra-curricolare on-line nel corso di Informatica del Politecnico di Torino http://bit.ly/informatica-corno

Published in: Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
9,736
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
61
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. 12BHD Informatica Rudimenti di programmazionegrafica in C con la libreria WinBGImInformatica (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 graficheProgrammazione 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 WinBGImProgrammazione 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) ; 810 circle(100,200,30);11 line (60, 60, 100, 200);12 ellipse (200, 300, 90, 150, 200,300);1314 while( !kbhit() )15 /*nop*/;1617 getch() ;1819 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) ; 810 circle(100,200,30);11 line (60, 60, 100, 200);12 ellipse (200, 300, 90, 150, 200,300);1314 while( !kbhit() )15 /*nop*/;1617 getch() ;1819 closegraph( );20 exit(0) ;21 } 12 12BHD - Informatica A.A. 2010/2011
  • 13. 12BHD Informatica Software necessarioProgrammazione 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::Blockshttp://codeblocks.codecutter.org/ 15 12BHD - Informatica A.A. 2010/2011
  • 16. 12BHD Informatica Modello di funzionamentoProgrammazione 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 Y18 12BHD - Informatica A.A. 2010/2011
  • 19. Finestra grafica Dimensione X (0, 0) A X ( 250, 100 ) B Dimensione Y ( getmaxx(), getmaxy() ) C Y19 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 funzioniProgrammazione 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 EsempiProgrammazione 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 questopera  di modificare questopera Alle seguenti condizioni:  Attribuzione — Devi attribuire la paternità dellopera agli autori originali e in modo tale da non suggerire che essi avallino te o il modo in cui tu usi lopera.  Non commerciale — Non puoi usare questopera per fini commerciali.  Condividi allo stesso modo — Se alteri o trasformi questopera, o se la usi per crearne unaltra, puoi distribuire lopera 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

×