Κεφάλαιο 2 ο Είσοδος/Έξοδος ιαχείριση γεγονότων - Αποκοπή στις δύο διαστάσεις

Μέγεθος: px
Εμφάνιση ξεκινά από τη σελίδα:

Download "Κεφάλαιο 2 ο Είσοδος/Έξοδος ιαχείριση γεγονότων - Αποκοπή στις δύο διαστάσεις"

Transcript

1 Κεφάλαιο 2 ο Είσοδος/Έξοδος ιαχείριση γεγονότων - Αποκοπή στις δύο διαστάσεις Εισαγωγή Στο Κεφάλαιο αυτό παρουσιάζουµε τις εντολές µέσω των οποίων εκτελούνται στην OpenGL διαδικασίες εισόδου/εξόδου. Σε ότι αφορά τις διαδικασίες εξόδου, αναλύονται οι ρουτίνες που χρησιµοποιούνται για τη δηµιουργία παραθύρων, αλλά και για την επιλογή πιο σύνθετων ρυθµίσεων (όπως λ.χ. για την εφαρµογή διαφορετικών χρωµατικών µοντέλων ή για τη δηµιουργία κινουµένων γραφικών). Αναλύεται η αρχή λειτουργίας των προγραµµάτων στην OpenGL ως µια συνεχής διαδικασία ακρόασης και ανταπόκρισης σε γεγονότα. Με τον όρο γεγονότα, αναφερόµαστε σε ειδοποιήσεις που εγείρονται, είτε από το λειτουργικό σύστηµα, είτε από το χρήστη µέσω συσκευών εισόδου. Συνεπώς, η διαχείριση γεγονότων παρέχει ένα µηχανισµό µέσω του οποίου µπορούν να σχεδιαστούν αλληλεπιδραστικές εφαρµογές. Επιπλέον επεξηγούνται οι διαδικασίες που εµπλέκονται στη διαδικασία αναπαράστασης µιας σκηνής σε συσκευές εξόδου και αναλύονται οι αλγόριθµοι αποκοπής και µετασχηµατισµού παρατήρησης (οι οποίοι αντιστοιχούν τις θέσεις των σηµείων της σκηνής στις αντίστοιχες θέσεις τους στη συσκευή εξόδου). 2.1 Σχηµατισµός παραθύρων Η δηµιουργία παραθύρων, η απεικόνιση γραφικών σκηνών και γενικότερα οι διεργασίες εισόδουεξόδου, είναι διαδικασίες που εξαρτώνται από την αρχιτεκτονική του συστήµατος (platform-dependent). Όπως αναφέρθηκε στην Εισαγωγή, οι εντολές που εκτελούν τις συγκεκριµένες διαδικασίες περιλαµβάνονται στη βιβλιοθήκη GLUT. Για τη χρήση εντολών της βιβλιοθήκης GLUT αρχικά πρέπει να δώσουµε την εντολή αρχικοποίησής της glutinit: void glutinit(int argc, char **argv); όπου argc και argv το πλήθος και οι τιµές των ορισµάτων που περνάµε στο πρόγραµµα µέσω της γραµµής εντολών (command line arguments). Το πρώτο όρισµα (argv[0]) επιστρέφει το όνοµα του εκτελέσιµου αρχείου. 63

2 Π.χ. εάν το εκτελέσιµο αρχείο έχει το όνοµα MyOpenGLApp και δώσουµε στη γραµµή εντολών DOS: MyOpenGLApp someargument1 someargument2 Τότε το όρισµα argv[1] θα έχει την τιµή someargument1 και το όρισµα argv[2] θα έχει την τιµή someargument2. Η θέση στην οθόνη, στην οποία θα εµφανιστεί το παράθυρο της εφαρµογής µας, καθορίζεται µε την εντολή glutinitwindowposition. void glutinitwindowposition(int x, int y); όπου x,y οι συντεταγµένες του άνω αριστερού άκρου του παραθύρου. Το σηµείο ( 0, 0) 0,0 αντιστοιχεί στην άνω αριστερή γωνία της οθόνης. Η θετική φορά του οριζόντιου άξονα είναι προς τα δεξιά και του κατακόρυφου άξονα προς τα κάτω. Οι διαστάσεις της επιφάνειας σχεδίασης καθορίζονται αρχικά µε την εντολή glutinitwindowsize void glutinitwindowsize(int width, int height); όπου width και height το πλάτος και ύψος της επιφάνειας σχεδίασης της εφαρµογής σε pixels. Επισηµαίνουµε ότι οι διαστάσεις της επιφάνειας σχεδίασης µπορούν να µεταβληθούν από το χρήστη σε κάθε χρονική στιγµή κατά την εκτέλεση του προγράµµατος µε τη χρήση του ποντικιού. Το παράθυρο σχηµατίζεται δίνοντας την εντολή glutcreatewindow: int glutcreatewindow(const char *title); η οποία επιστρέφει µια ακέραιη τιµή που λειτουργεί ως αναγνωριστικό του παραθύρου (χρήσιµη παράµετρος στην περίπτωση δηµιουργίας πολλαπλών παραθύρων). Η παράµετρος title αντιστοιχεί στον τίτλο του παραθύρου. Η επίδραση των εντολών glutinitwindowposition και glutinitwindowsize και glutcreatewindow φαίνεται στο Σχήµα

3 Σχ. 2.1: Παράµετροι σχηµατισµού παραθύρου Παράδειγµα: Αρχικοποίηση παραθύρου εφαρµογής και ρύθµιση των διαστάσεών του από τη γραµµή εντολών #include <glut.h> #include <stdlib.h> int width; int height; void display() glclearcolor(1,1,1,0); glclear(gl_color_buffer_bit); glflush(); int main(int argc, char** argv) //The application demands two command-line arguments which //define the width and height of its window. //argv[0] returns the name of the application //argv[1] is the window width //argv[2] is the window height if (argc!=3) 65

4 printf("bad arguments"); exit(0); //Converting command-line string arguments to integers // Converting ASCII characters to integers // Using function: int atoi(const char //*string) width=atoi(argv[1]); height=atoi(argv[2]); glutinit(&argc,argv); glutinitwindowposition(50,50); glutinitwindowsize(width,height); glutinitdisplaymode(glut_single GLUT_RGB); glutcreatewindow("window initialization"); glmatrixmode(gl_projection); gluortho2d(0,30,0,30); glutdisplayfunc(display); glutmainloop(); return 0; 2.2 Παράµετροι λειτουργίας παραθύρων Κατά την αρχικοποίηση του παραθύρου ορίζουµε αν αυτό προορίζεται να περιέχει στατικές σκηνές ή κινούµενα γραφικά όπως και το χρωµατικό µοντέλο που θα χρησιµοποιηθεί. Οι ρυθµίσεις αυτές δίνονται µε την εντολή glutinitdisplaymode: void glutinitdisplaymode(unsigned int mode); όπου mode προκαθορισµένες αριθµητικές σταθερές που παίρνουν τις παρακάτω τιµές: GLUT_SINGLE: Για την απεικόνιση χρησιµοποιείται η τεχνική της απλής ενταµίευσης (χρησιµοποιείται ένας ενταµιευτής χρωµατικών τιµών). Αυτή η ρύθµιση επιλέγεται για τη σχεδίαση στατικών σκηνών. GLUT_DOUBLE: Χρησιµοποιείται η τεχνική της διπλής ενταµίευσης (double buffering) χρησιµοποιούνται δηλαδή δύο ενταµιευτές χρωµατικών τιµών. Η επιλογή αυτή ενδείκνυται για την παρουσίαση κινούµενων γραφικών, για λόγους που θα εξηγηθούν στο Κεφάλαιο Κινούµενα γραφικά. GLUT_RGB: Τα χρώµατα ορίζονται µε την περιγραφή τους στο χρωµατικό µοντέλο RGB. Κάθε χρώµα δηλαδή περιγράφεται από τους συντελεστές βάρους της κόκκινης, της πράσινης και µπλε χρωµατικής συνιστώσας του. GLUT_RGBA: Τα χρώµατα ορίζονται στο µοντέλο RGBA. GLUT_INDEX: Χρήση του µοντέλου χρωµατικών πινάκων (colour tables). 66

5 Οι παραπάνω σταθερές µπορούν να συνδυαστούν στο όρισµα της glutinitdisplaymode µε τη χρήση τελεστών OR, υπό την προϋπόθεση βέβαια ότι εκφράζουν διαφορετικές ιδιότητες. Π.χ. για τη χρήση του χρωµατικού µοντέλου RGB και την εφαρµογή διπλής ενταµίευσης, δίνουµε την εντολή glutinitdisplaymode(glut_double GLUT_RGB); Στην περίπτωση που δεν δίνεται εντολή glutinitdisplaymode στον κώδικα, η OpenGL θεωρεί ως προκαθορισµένη κατάσταση τη χρήση του χρωµατικού µοντέλου RGB και την τεχνική της απλής ενταµίευσης. 2.3 Γεγονότα Ως γεγονός ορίζουµε την καταγραφή κάποιας δραστηριότητας του συστήµατος, συνήθως µιας δραστηριότητας από κάποια συσκευή εισόδου όπως ένα πληκτρολόγιο ή ένα ποντίκι. Ωστόσο υπάρχουν και γεγονότα που εγείρονται από το λειτουργικό σύστηµα υπό ορισµένες συνθήκες. Μία καταγραφή γεγονότος περιέχει πληροφορίες που το προσδιορίζουν επακριβώς. Π.χ. µία καταγραφή γεγονότος από το πληκτρολόγιο περιέχει την ταυτότητα του πλήκτρου που πιέστηκε και τη θέση του δείκτη όταν αυτό πατήθηκε. Μία καταγραφή γεγονότος από το ποντίκι περιέχει πληροφορίες για το πλήκτρο του ποντικιού που πιέστηκε και την τοποθεσία του δείκτη στην οθόνη όταν πιέστηκε. Τα γεγονότα καταγράφονται σε µια σειρά, την οποία διαχειρίζεται το λειτουργικό σύστηµα. Αυτό, τηρεί ένα αρχείο µε όλα τα γεγονότα, παρακολουθεί τη σειρά µε την οποία εγείρονται και αναθέτει τη διαχείριση κάθε γεγονότος σε ένα τµήµα κώδικα το οποίο έχει προκαθοριστεί να εκτελείται κατά την εµφάνιση του γεγονότος. Προφανώς, αυτό το προγραµµατιστικό µοντέλο της ανταπόκρισης σε γεγονότα παρέχει τη δυνατότητα υλοποίησης αλληλεπιδραστικών εφαρµογών (event-driven programg). 2.4 Κατηγορίες γεγονότων στην OpenGL Οι κατηγορίες γεγονότων που ορίζονται στην OpenGL είναι οι εξής: α) Γεγονός σχεδίασης: Εµφανίζεται κάθε φορά που το σύστηµα θα διαπιστώσει ότι απαιτείται σχεδίαση ή επανασχεδιασµός της σκηνής. Γεγονότα σχεδίασης εγείρονται: κατά τη µετακίνηση του παραθύρου στην οθόνη 67

6 κατά την επαναφορά του παραθύρου της εφαρµογής στο προσκήνιο (restore) όταν δοθεί εντολή επανασχεδιασµού της σκηνής από τον προγραµατιστή Η τελευταία περίπτωση βρίσκει εφαρµογή όταν ο προγραµµατιστής έχει τροποποιήσει τη σκηνή και θέλει να ανανεώσει το αποτέλεσµα και στην οθόνη. Στην περίπτωση αυτή, θα πρέπει να δοθεί εντολή (και συνεπώς να εµφανιστεί το γεγονός) σχεδιασµού της οθόνης. Ρητή εντολή επανασχεδιασµού της σκηνής από το χρήστη δίνεται χρησιµοποιώντας τη συνάρτηση glutpostredisplay: void glutpostredisplay( ); β) Γεγονός αλλαγής διαστάσεων παραθύρου (reshape): Εγείρεται την πρώτη φορά που σχεδιάζεται το παράθυρο (κατά την εκκίνηση της εφαρµογής) καθώς και κάθε φορά που ο χρήστης µεταβάλλει χειροκίνητα τις διαστάσεις του παραθύρου. γ) Γεγονότα πληκτρολογίου (keyboard events): Εµφανίζονται κάθε φορά που πιέζουµε ένα από τα πλήκτρα του πληκτρολογίου. εδοµένου ότι τα πλήκτρα διαχωρίζονται σε δύο κατηγορίες, τα πλήκτρα χαρακτήρων και τα ειδικά πλήκτρα (Function keys, Insert, Page Up, Page Down κλπ.), οµοίως ορίζονται και δύο κατηγορίες γεγονότων πληκτρολογίου. δ) Γεγονότα ποντικιού: Εµφανίζονται κατά τη χρήση του ποντικιού. Στην κατηγορία αυτή ανήκει η πίεση των πλήκτρων του ποντικιού, η ενεργή κίνηση του δείκτη (κίνηση του δείκτη του ποντικιού µε ένα από τα πλήκτρα του πιεσµένο) και η παθητική κίνηση (κίνηση του δείκτη του ποντικιού χωρίς πιεσµένο πλήκτρο). ε) Γεγονότα χρονισµού: Στην κατηγορία αυτή ανήκουν γεγονότα που εγείρονται σε συγκεκριµένη χρονική στιγµή. Η έγερσή τους στη συγκεκριµένη αυτή στιγµή ενεργοποιεί την εκτέλεση κάποιου κώδικα. Πρακτικά, τα γεγονότα χρονισµού λειτουργούν ως µετρητές (timers) για τον προγραµµατισµό εργασιών (scheduling). στ) Γεγονός αδρανείας : Υπάρχουν περιπτώσεις στις οποίες επιθυµούµε την επ άπειρον εκτέλεση κάποιου τµήµατος κώδικα, ανεξαρτήτως της εµφάνισης γεγονότων, όπως λ.χ. σε εφαρµογές κινούµενων γραφικών. Στην περίπτωση αυτή, θεωρούµε ότι αυτό το τµήµα κώδικα θα εκτελείται κατά την εµφάνιση ενός γεγονότος αδράνειας του συστήµατος. Το σύστηµα θεωρείται αδρανές όταν δεν εγείρονται γεγονότα. 68

7 2.5 Κύκλος διαχείρισης γεγονότων Στην OpenGL, προκειµένου ένα πρόγραµµα να ανταποκρίνεται σε γεγονότα, θα πρέπει να ενεργοποιηθεί ο κύκλος διαχείρισης γεγονότων (event processing loop). Η ενεργοποίηση του κύκλου διαχείρισης γεγονότων γίνεται δίνοντας την εντολή glutmainloop: void glutmainloop( ); Μετά την ενεργοποίηση του κύκλου διαχείρισης γεγονότων η εφαρµογή θα αναµένει επ άπειρον και θα ανταποκρίνεται σε γεγονότα που θα εγερθούν και στα οποία θα έχει καταχωρηθεί κώδικας προς εκτέλεση. Ουσιαστικά, η ανταπόκριση µιας εφαρµογής σε γεγονότα συνίσταται στην ανάθεση ενός κώδικα προς εκτέλεση ανά είδος γεγονότος. Ο κώδικας που θα εκτελείται κατά την εµφάνιση κάθε γεγονότος ορίζεται στις συναρτήσεις διαχείρισης γεγονότων ή αλλιώς συναρτήσεις κλήσης (callback functions). Προφανώς, γεγονότα για οποία δεν έχει καταχωρηθεί συνάρτηση διαχείρισης δεν έχουν καµία επίδραση στην εκτέλεση του προγράµµατος. Ο παρακάτω ψευδοκώδικας περιγράφει τον κύκλο διαχείρισης γεγονότων while(1) //Εκτέλεση βρόχου επ άπειρον if (γεγονός σχεδιασµού/επανασχεδιασµού) εκτέλεση κώδικα διαχείρισης γεγονότος σχεδιασµού/επανασχεδιασµού; if (αλλαγή διαστάσεων παραθύρου) εκτέλεση κώδικα διαχείρισης του γεγονότος αλλαγής διάστασης παραθύρου; if (εµφάνιση γεγονότος πληκτρολογίου/ποντικιού) εκτέλεση κώδικα διαχείρισης γεγονότων πληκτρολογίου/ποντικιού.. εκτέλεση κώδικα διαχείρισης γεγονότος αδρανείας ; 69

8 2.6 Συναρτήσεις διαχείρισης γεγονότων Η αντιστοίχιση συναρτήσεων διαχείρισης σε κατηγορίες γεγονότων γίνεται µε τη χρήση συγκεκριµένων εντολών. Ανάλογα µε το γεγονός που θα καλούνται να διαχειριστούν, οι συναρτήσεις κλήσης θα πρέπει να έχουν και συγκεκριµένη δοµή, σε ό,τι αφορά το πλήθος και τον τύπο των ορισµάτων τους. Μέσω των ορισµάτων που ορίζονται σε κάθε συνάρτηση κλήσης, το λειτουργικό σύστηµα παρέχει στον προγραµµατιστή πληροφορίες που προσδιορίζουν το εκάστοτε γεγονός, όπως πχ το χαρακτήρα του πλήκτρου που πιέστηκε ή τις συντεταγµένες της θέσης όπου πιέστηκε ένα πλήκτρο του ποντικιού. Εποµένως ο προγραµµατιστής έχει τη δυνατότητα να διαχειριστεί το κάθε γεγονός ανάλογα µε τις τιµές που ανακτά. Στη συνέχεια δίνονται ορισµένες εντολές που χρησιµοποιούνται για την καταχώρηση συναρτήσεων κλήσης σε συνήθεις τύπους γεγονότων. 1) void glutdisplayfunc(void display()): Στην εντολή glutdisplayfunc δίνουµε ως όρισµα τη συνάρτηση, η οποία θα εκτελείται όποτε εγείρεται γεγονός απαίτησης σχεδιασµού/επανασχεδιασµού της σκηνής (έστω display( )). Ουσιαστικά, όλες οι ρουτίνες σχεδίασης που αναφέραµε στο Κεφάλαιο 1, καθώς και οι κλήσεις των display lists, συνήθως τοποθετούνται στο εσωτερικό της συνάρτησης display. Η συνάρτηση κλήσης display πρέπει να έχει συγκεκριµένη δοµή: δεν επιστρέφει τιµή και δε δέχεται ορίσµατα. Η display θα εκτελείται στις περιπτώσεις µετακίνησης του παραθύρου σχεδίασης, της επαναφοράς του στο προσκήνιο και στην περίπτωση που ο προγραµµατιστής απαιτεί τον επενασχεδιασµό της σκηνής, χρησιµοποιώντας την εντολή glutpostredisplay. Παράδειγµα: ιαχείριση γεγονότων σχεδιασµού #include <glut.h> GLsizei width=640; GLsizei height=480; GLuint x1=10,y1=10; GLuint x2=20,y2=20; void display() printf("display event detected.\n"); glclearcolor(1,1,1,0); glclear(gl_color_buffer_bit); glcolor3f(1,0,0); 70

9 glrecti(x1,y1,x2,y2); glflush(); int main(int argc, char** argv) glutinit(&argc,argv); glutinitwindowposition(50,50); glutinitwindowsize(width,height); glutinitdisplaymode(glut_single GLUT_RGB); glutcreatewindow("display events"); glmatrixmode(gl_projection); gluortho2d(0,30,0,30); glutdisplayfunc(display); glutmainloop(); return 0; 2) void glutreshapefunc(void reshape(int width, int height)) Καταχωρεί τη συνάρτηση κλήσης reshape για τη διαχείριση γεγονότων γεγονός αλλαγής των διαστάσεων του παραθύρου. Η συνάρτηση reshape µέσω των ακεραίων ορισµάτων width και height, δίνει στον προγραµµατιστή τις νέες διαστάσεις της επιφάνειας σχεδίασης (πλάτος και ύψος σε pixels). Η συνάρτηση κλήσης reshape είναι χρήσιµη για να επαναπροσδιορίσουµε το εύρος της επιφάνειας σχεδίασης που θα αξιοποιηθεί µετά από αλλαγές των διαστάσεων του παραθύρου. Εάν δεν ορίσουµε συνάρτηση διαχείρισης του γεγονότος, η µηχανή της OpenGL αυτοµάτως επεκτείνει τη σχεδίαση της σκηνής σε όλη τη διαθέσιµη επιφάνεια που προσφέρει το παράθυρο σχεδίασης. Αυτό σηµαίνει ότι εάν θελήσουµε να επιβάλλουµε κάποιους περιορισµούς - όπως λ.χ. να χρησιµοποιήσουµε διαφορετική αναλογία πλάτους-ύψους από αυτή που έχει η επιφάνεια σχεδίασης στο σύνολό της θα πρέπει να καταχωρήσουµε µια συνάρτηση κλήσης που ορίζει το παράθυρο σχεδίασης. Παράδειγµα χρήσης της reshapefunc θα παρουσιαστεί στη συνέχεια του κεφαλαίου, στην ενότητα Παράθυρο παρατήρησης. 3) void glutkeyboardfunc(void keyboard(unsigned char key, int x, int y)): Καταχωρεί τη συνάρτηση κλήσης keyboard ως συνάρτηση διαχείρισης γεγονότων πληκτρολόγησης χαρακτήρων (character keys). Το όρισµα key (τύπου unsigned char) περιέχει τον χαρακτήρα που αντιστοιχεί στο πλήκτρο που πιέστηκε. Tα ορίσµατα x, y προσδιορίζουν τη θέση στην επιφάνεια σχεδίασης, όπου βρισκόταν ο δείκτης του ποντικιού, όταν πιέστηκε το πλήκτρο. Οι τιµές x,y ορίζονται 71

10 σε σύστηµα συντεταγµένων µε ακέραιες τιµές συντεταγµένων, µε αρχή την πάνω αριστερή γωνία της επιφάνειας σχεδίασης και θετική φορά στην οριζόντια και κατακόρυφη διεύθυνση προς τα δεξιά και κάτω αντίστοιχα. Προφανώς, ανάλογα µε την τιµή (είδος) του πλήκτρου που πιέστηκε, υπάρχει η δυνατότητα εκτέλεσης διαφορετικού κώδικα, χρησιµοποιώντας στο εσωτερικό της συνάρτησης keyboard δοµές τύπου switch, if/else κλπ. Παράδειγµα: ιαχείριση πληκτρολόγησης χαρακτήρων #include <glut.h> GLuint x1=10,y1=10; GLuint x2=20,y2=20; void display() glclearcolor(1,1,1,0); glclear(gl_color_buffer_bit); glcolor3f(1,0,0); glrecti(x1,y1,x2,y2); glflush(); void keyboard(unsigned char key,int x, int y) printf("keyboard event detected.\n"); if (key=='t') y1++; y2++; if (key=='g') y1--; y2--; if (key=='f') x1--; x2--; if (key=='h') x1++; x2++; glutpostredisplay(); 72

11 int main(int argc, char** argv) glutinit(&argc,argv); glutinitwindowposition(50,50); glutinitwindowsize(640,480); glutinitdisplaymode(glut_single GLUT_RGB); glutcreatewindow("keyboard events"); glmatrixmode(gl_projection); gluortho2d(-5,35,-5,30); glutdisplayfunc(display); glutkeyboardfunc(keyboard); glutmainloop(); return 0; 4) void glutspecialfunc(void specialkey(int key, int x, int y)): Καταχωρεί τη συνάρτηση specialkey ως συνάρτηση διαχείρισης γεγονότων πληκτρολόγησης ειδικών πλήκτρων (special keys). Το όρισµα key (τύπου int) περιέχει την αριθµητική τιµή που καθορίζει το ειδικό πλήκτρο που πατήθηκε. Στην OpenGL, σε κάθε ειδικό πλήκτρο αντιστοιχεί µια συγκεκριµένη αριθµητική σταθερά, όπως φαίνεται στον Πίνακα 1. Tα ορίσµατα x, y προσδιορίζουν τη θέση στην επιφάνεια σχεδίασης όπου βρισκόταν ο δείκτης του ποντικιού όταν πιέστηκε το πλήκτρο. Οι συντεταγµένες x, y ορίζονται σε σύστηµα µε ακέραιες τιµές συντεταγµένων, µε αρχή την πάνω αριστερή γωνία της επιφάνειας και θετική φορά στην οριζόντια και κατακόρυφη διέυθυνση προς τα δεξιά και κάτω αντίστοιχα. Όπως και στην προηγούµενη περίπτωση, ανάλογα µε το πλήκτρο που πιέστηκε, υπάρχει η δυνατότητα εκτέλεσης διαφορετικού κώδικα. 73

12 Κατηγορία Function keys Πλήκτρα κατεύθυνσης (arrow keys) ιάφορα πλήκτρα Πίνακας 1: Κατηγορίες ειδικών πλήκτρων Σύµβολο στο πληκτρολόγιο Αντίστοιχη αριθµητική σταθερά στην OpenGL GLUT_KEY_F1 F1- F2 - - F12. GLUT_KEY_F12 GLUT_KEY_UP,,, GLUT_KEY_DOWN GLUT_KEY_LEFT GLUT_KEY_RIGHT Page Up GLUT_KEY_PAGE_UP Page Down GLUT_KEY_PAGE_DOWN Home GLUT_KEY_HOME End GLUT_KEY_END Insert GLUT_KEY_INSERT Παράδειγµα: ιαχείριση πληκτρολόγησης ειδικών πλήκτρων #include <glut.h> GLuint x1=10,y1=10; GLuint x2=20,y2=20; void display() glclearcolor(1,1,1,0); glclear(gl_color_buffer_bit); glcolor3f(1,0,0); glrecti(x1,y1,x2,y2); glflush(); void specialkeys(int key,int x, int y) printf("special key event detected.\n"); if (key==glut_key_up) y1++; y2++; if (key==glut_key_down) y1--; y2--; if (key==glut_key_left) 74

13 x1--; x2--; if (key==glut_key_right) x1++; x2++; glutpostredisplay(); int main(int argc, char** argv) glutinit(&argc,argv); glutinitwindowposition(50,50); glutinitwindowsize(640,480); glutinitdisplaymode(glut_single GLUT_RGB); glutcreatewindow("special key events"); glmatrixmode(gl_projection); gluortho2d(-5,35,-5,30); glutdisplayfunc(display); glutspecialfunc(specialkeys); glutmainloop(); return 0; 5) void glutmousefunc(void mouseclicked(int button, int state, int x, int y)): Καταχωρεί τη συνάρτηση mouseclicked ως συνάρτηση διαχείρισης γεγονότων πίεσης πλήκτρων ποντικιού. Η τιµή του ορίσµατος button που επιστρέφει το λειτουργικό σύστηµα εξαρτάται από το κουµπί του ποντικιού που πιέστηκε: GL_LEFT_BUTTON: Πιέστηκε το αριστερό κουµπί του ποντικιού. GL_MIDDLE_BUTTON: Πιέστηκε το µεσαίο κουµπί του ποντικιού. GL_RIGHT_BUTTON: Πιέστηκε το το δεξί κουµπί του ποντικιού. Η τιµή του ορίσµατος state εξαρτάται από το αν το κουµπί του ποντικιού πιέστηκε ή απελευθερώθηκε (Η πίεση και η απελευθέρωση ενός κουµπιού του ποντικιού µπορούν να αντιµετωπιστούν ως διαφορετικά γεγονότα.): GLUT_DOWN: Πίεση του πλήκτρου του ποντικιού. GLUT_UP: Απελευθέρωση του πλήκτρου του ποντικιού. 75

14 Τα ορίσµατα x, y εκφράζουν τη θέση του δείκτη του ποντικιού όταν πιέστηκε το κουµπί (ακέραιες τιµές µε τη θέση ( 0, 0) στην πάνω αριστερή γωνία της επιφάνειας σχεδίασης της εφαρµογής). Παράδειγµα: ιαχείριση mouse clicks #include <glut.h> //Clipping window limits float xw=-50, xw=50, yw=-50, yw=50; //Application window dimensions int windowwidth=640, windowheight=480; GLfloat xw1,yw1,xw2,yw2; void display() glclearcolor(1,1,1,0); glclear(gl_color_buffer_bit); glrectf(xw1,yw1,xw2,yw2); glflush(); void mousebuttonclicked(int button,int state,int x, int y) if(state==glut_down) printf("mouse click event detected (button down).\n"); //Converting coordinates captured by event handler to world coordinates xw1=(float)(xw+(float)(x)*(xw-xw)/(float)(windowwidth)); yw1=(float)(yw+(float)(windowheight-y)*(ywyw)/(float)(windowheight)); xw2=xw1+20; yw2=yw1+20; if (button==glut_left_button) glcolor3f(1,0,0); else if (button==glut_middle_button) glcolor3f(0,1,0); else if (button==glut_right_button) glcolor3f(0,0,1); //Generate a display event glutpostredisplay(); int main(int argc, char** argv) glutinit(&argc,argv); glutinitwindowposition(50,50); 76

15 glutinitwindowsize(windowwidth,windowheight); glutinitdisplaymode(glut_single GLUT_RGB); glutcreatewindow("mouse click events"); glmatrixmode(gl_projection); gluortho2d(xw,xw,yw,yw); glutdisplayfunc(display); glutmousefunc(mousebuttonclicked); glutmainloop(); return 0; 6)void glutmotionfunc(void activemousemotion( int x, int y ) ): Η glutmotionfunc θέτει την activemousemotion ως συνάρτηση διαχείρισης του γεγονότος της ενεργής µετακίνησης του δείκτη του ποντικιού (µετακίνηση του ποντικιού µε πιεσµένο πλήκτρο) Η συνάρτηση κλήσης περιέχει ως ορίσµατα τις συντεταγµένες x, y (ορισµένες ως προς το σύστηµα συντεταγµένων που υιοθετούν οι συναρτήσεις διαχείρισης γεγονότων) του σηµείου όπου σύρεται ο δείκτης. Παράδειγµα: ιαχείριση ενεργής κίνησης ποντικιού #include <glut.h> //Clipping window limits float xw=-50, xw=50, yw=-50, yw=50; //Application window dimensions int windowwidth=640, windowheight=480; GLfloat xw1=0,yw1=0; GLfloat xw2=xw1+20,yw2=yw1+20; void display() glclearcolor(1,1,1,0); glcolor3f(0,0,1); glclear(gl_color_buffer_bit); glrectf(xw1,yw1,xw2,yw2); glflush(); void mouseactivemotion(int x, int y) printf("mouse active motion detected.\n"); xw1=(float)(xw+(float)(x)*(float)(xwxw)/(float)(windowwidth)); 77

16 yw1=(float)(yw+(float)(windowheight-y)*(float)(ywyw)/(float)(windowheight)); xw2=xw1+20; yw2=yw1+20; //Generate a display event glutpostredisplay(); int main(int argc, char** argv) glutinit(&argc,argv); glutinitwindowposition(50,50); glutinitwindowsize(windowwidth,windowheight); glutinitdisplaymode(glut_single GLUT_RGB); glutcreatewindow("mouse active motion events"); glmatrixmode(gl_projection); gluortho2d(xw,xw,yw,yw); glutdisplayfunc(display); glutmotionfunc(mouseactivemotion); glutmainloop(); return 0; 7) glutpassivemotionfunc(void passivemousemotion( int x, int y ) ): Οµοίως µε την προηγούµενη περίπτωση, µε τη διαφορά ότι, η συνάρτηση εκτελείται κατά την παθητική µετακίνηση του δείκτη του ποντικιού (κίνηση ποντικιού χωρίς πιεσµένο πλήκτρο). Παράδειγµα: ιαχείριση παθητικής κίνησης ποντικιού #include <glut.h> int windowwidth=640, windowheight=480; int xw=-50; int yw=-50; int xw=50; int yw=50; GLfloat xw1=10,yw1=10; GLfloat xw2=xw1+100,yw2=yw1+100; void display() glclearcolor(1,1,1,0); glcolor3f(0,0,1); glclear(gl_color_buffer_bit); 78

17 glrectf(xw1,yw1,xw2,yw2); glflush(); void mousepassivemotion(int x, int y) printf("mouse passive motion detected.\n"); //Converting device coordinates to world coordinates xw1=(float)(xw+(float)(x)*(float)(xwxw)/(float)(windowwidth)); yw1=(float)(yw+(float)(windowheight-y)*(float)(ywyw)/(float)(windowheight)); xw2=xw1+20; yw2=yw1+20; glutpostredisplay(); int main(int argc, char** argv) glutinit(&argc,argv); glutinitwindowposition(50,50); glutinitwindowsize(640,480); glutinitdisplaymode(glut_single GLUT_RGB); glutcreatewindow("mouse passive motion events"); glmatrixmode(gl_projection); gluortho2d(xw,xw,yw,yw); glutdisplayfunc(display); glutpassivemotionfunc(mousepassivemotion); glutmainloop(); return 0; 8) void glutidlefunc( void animate( ) ): Καταχωρεί τη συνάρτηση animate ως συνάρτηση διαχείρισης του γεγονότος αδράνειας. Ουσιαστικά η συνάρτηση animate θα εκτελείται επαναληπτικά σε κάθε κύκλο διαχείρισης γεγονότων. Είναι ιδιαίτερα χρήσιµη σε περιπτώσεις που εκτελούµε συνεχείς µεταβολές και επιθυµούµε τακτικό επανασχεδιασµό της σκηνής, όπως στην περίπτωση των κινούµενων γραφικών (animation). Η συνάρτηση animate δε δέχεται ορίσµατα και δεν επιστρέφει τιµή. 79

18 Παράδειγµα: #include <glut.h> GLuint x1=10; GLuint y1=10; GLuint x2=x1+100; GLuint y2=y1+100; void display() glclearcolor(1,1,1,0); glclear(gl_color_buffer_bit); glcolor3f(1,0,0); glrecti(x1,y1,x2,y2); glflush(); void idle() printf("idle event detected.\n"); if (x2>640) x1=0; x2=x1+100; else x1++; x2++; glutpostredisplay(); int main(int argc, char** argv) glutinit(&argc,argv); glutinitwindowposition(50,50); glutinitwindowsize(640,480); glutinitdisplaymode(glut_single GLUT_RGB); glutcreatewindow("idle events (A low-quality animation)"); glmatrixmode(gl_projection); gluortho2d(0,640,0,480); glutdisplayfunc(display); //Register an idle callback function. glutidlefunc(idle); glutmainloop(); return 0; 80

19 9) void gluttimerfunc(unsigned int exectime, void timed(int val), value): Καταχωρεί ως συνάρτηση κλήσης την timed στο γεγονός χρονισµένης εκτέλεσης. Αυτό σηµαίνει ότι η συνάρτηση timed θα εκτελεστεί µία µόνο φορά και σε προγραµµατισµένο χρονικό διάστηµα τουλάχιστον exectime msec από τη στιγµή της έναρξης του κύκλου διαχείρισης γεγονότων. Η τιµή value δίνεται ως όρισµα στην συνάρτηση timed. Παράδειγµα: Προγραµµατισµός εκτέλεσης συνάρτησης #include <glut.h> GLuint x1=10; GLuint y1=10; GLuint x2=x1+100; GLuint y2=y1+100; void display() glclearcolor(1,1,1,0); glclear(gl_color_buffer_bit); glcolor3f(1,0,0); glrecti(x1,y1,x2,y2); glflush(); void timerfunction(int value) printf("timer event detected.\nvaluepassed: %d\n",value); x1+=100; x2+=100; y1+=100; y2+=100; glutpostredisplay(); int main(int argc, char** argv) glutinit(&argc,argv); glutinitwindowposition(50,50); glutinitwindowsize(640,480); glutinitdisplaymode(glut_single GLUT_RGB); glutcreatewindow("timer event"); glmatrixmode(gl_projection); gluortho2d(0,640,0,480); glutdisplayfunc(display); //Register a timer callback function. //It will be executed in 5 seconds. and passes the value of //10 to the timer function gluttimerfunc(5000,timerfunction,10); glutmainloop(); return 0; 81

20 Παρατήρηση: Θα πρέπει να έχουµε υπόψη ότι, εάν χρησιµοποιούµε µια συνάρτηση κλήσης για να τροποποιήσουµε το περιεχόµενο της σκηνής, αυτό δε συνεπάγεται ότι µε το πέρας της εκτέλεσης της συνάρτησης κλήσης, οι αλλαγές θα εµφανιστούν και στην οθόνη. Στην περίπτωση αυτή, θα πρέπει επιπρόσθετα να παραγάγουµε ένα γεγονός απαίτησης επανασχεδιασµού δίνοντας την εντολή glutpostredisplay µέσα στον κώδικα της εκάστοτε συνάρτησης κλήσης. 2.7 Απεικονίσεις στις 2 διαστάσεις - Συντεταγµένες σκηνής - Συντεταγµένες συσκευής Όταν δηλώνουµε τη θέση ενός σηµείου χρησιµοποιώντας τις εντολές σχεδίασης glvertex που περιγράψαµε στο Κεφάλαιο 1, οι συντεταγµένες που αποδίδουµε στα σηµεία, δεν αντιστοιχούν στις θέσεις των pixels στην οθόνη. Αντίθετα ορίζονται σε ένα σύστηµα µε απεριόριστο εύρος και αναλυτικότητα στις τιµές του, το σύστηµα συντεταγµένων σκηνής (world coordinate system). Πρακτικά, τo εύρος στο οποίο εκτείνονται οι τιµές των δηλούµενων σηµείων επιλέγεται αυθαίρετα από τον εκάστοτε προγραµµατιστή. Συνήθως επιλέγεται ένα εύρος τιµών που επιτρέπει µια βολική από πλευράς αναλυτικότητας απεικόνιση στην εκάστοτε περίπτωση. Ωστόσο, όταν τα δηλούµενα σηµεία προωθούνται προς απεικόνιση στην οθόνη, λόγω της πεπερασµένης αναλυτικότητάς της τελευταίας, για κάθε σχεδιαζόµενο σηµείο, θα πρέπει να υπολογιστούν οι ακέραιες συντεταγµένες που καθορίζουν την αντίστοιχή του θέση στην επιφάνεια σχεδίασης. Υπολογίζουµε δηλαδη τις λεγόµενες συντεταγµένες συσκευής. Η διαδικασία της εύρεσης των συντεταµένων συσκευής που αντιστοιχούν σε κάθε σηµείο (το οποίο ορίζεται σε συντεταγµένες σκηνής) χωρίζεται σε δύο στάδια. Στο στάδιο της αποκοπής και στο στάδιο του µετασχηµατισµού παρατήρησης. Στη συνέχεια του Κεφαλαίου θα αναλύσουµε την αποκοπή και το µετασχηµατισµό παρατήρησης στις δύο διαστάσεις. 2.8 Αποκοπή στις δύο διαστάσεις Με τον όρο αποκοπή εννοούµε τη διαδικασία κατά την οποία αποµονώνουµε ένα τµήµα της σκηνικού για την αναπαράστασή του στη συσκευή εξόδου. Ουσιαστικά η αποµόνωση αυτή στις δύο διαστάσεις επιτελείται ορίζοντας ως προς το σύστηµα συντεταγµένων σκηνής τα όρια του παραθύρου αποκοπής (clipping window). Με τον όρο παράθυρο αποκοπής εννοούµε ένα ορθογώνιο, µέσα στο οποίο 82

21 περικλείεται το τµήµα της σκηνής που θέλουµε να αποµονώσουµε. Ο καθορισµός του παραθύρου αποκοπής σε δύο διαστάσεις γίνεται χρησιµοποιώντας την εντολή gluortho2d της βιβλιοθήκης GLU: void gluortho2d(gldouble left, GLdouble right, GLdouble bottom, GLdouble top); όπου left, right, bottom και top το αριστερό, δεξιό, κάτω και άνω όριο του παραθύρου αποκοπής. Τα όρια του παραθύρου αποκοπής ορίζονται στο σύστηµα συντεταγµένων σκηνής. Όπως θα δούµε στο κεφάλαιο Προβολές, ο καθορισµός του παραθύρου αποκοπής είναι µια διαδικασία που συνδέεται µε τον ορισµό του µητρώου προβολής. Ουσιαστικά, µε τη χρήση της εντολής gluortho2d, ορίζουµε ταυτόχρονα ένα παράθυρο αποκοπής και την επιβολή παράλληλης προβολής στο επίπεδο ΧΥ. (περισσότερα για το συσχετισµό αποκοπής και προβολής στο Κεφάλαιο «Προβολές».) Συνεπώς πριν τον ορισµό του παραθύρου αποκοπής πρέπει να µεταβούµε στην κατάσταση επεξεργασίας του µητρώου προβολής. Η µετάβαση αυτή γίνεται µε την έντολή glmatrixmode : void glmatrixmode(glenum mode); Μεταβαίνουµε στην κατάσταση επεξεργασίας του µητρώου προβολής δίνοντας την παράµετρο GL_PROJECTION. glmatrixmode(gl_projection); Εαν στην εφαρµογή µας δεν καθοριστεί παράθυρο αποκοπής, η OpenGL θεωρεί προκαθορισµένο παράθυρο αποκοπής που εκτείνεται µεταξύ των ορίων [ 1,1 ] και στις δύο διαστάσεις (κανονικοποιηµένο τετράγωνο). 2.9 Παράθυρο παρατήρησης Στην OpenGL, αντί να χρησιµοποιήσουµε ολόκληρη τη διαθέσιµη επιφάνεια σχεδίασης της συσκευής εξόδου για την αναπαράσταση µιας σκηνής, µπορούµε να καθορίσουµε το τµήµα της επιφάνειας σχεδίασης (τα όρια των ακεραίων συντεταγµένων συσκευής [ ] [ ] xu, xu και yu, yu ) µέσα στο οποίο θέλουµε να σχεδιαστούν τα περιεχόµενα του παραθύρου αποκοπής Ο καθορισµός του εύρους των συντεταγµένων συσκευής που θα διατεθούν για τη σχεδιάση της αποκοµµένης σκηνής γίνεται µε τον καθορισµό ενός παραθύρου παρατήρησης (viewport). Ο καθορισµός των διαστάσεων ενός παραθύρου παρατήρησης γίνεται χρησιµοποιώντας την εντολή glviewport: 83

22 void glviewport(glint x, GLint y, GLsizei width, GLsizei height); όπου οι παράµετροι x και y δηλώνουν το κάτω αριστερό άκρο του παραθύρου παρατήρησης. Οι παράµετροι width, height δηλώνουν το πλάτος και ύψος που θα καταλάβει στην επιφάνεια σχεδίασης το παράθυρο παρατήρησης. Η glviewport καθορίζει τη θέση του παραθύρου παρατήρησης στην επιφάνεια σχεδίασης και δηλώνεται πάντοτε µέσα στον κώδικα της συνάρτησης κλήσης που διαχειρίζεται το γεγονός reshape (και που καταχωρείται στην glutreshapefunc). Oι συντεταγµένες που δίνουµε ως ορίσµατα στην glviewport είναι ακέραιες συντεταγµένες συσκευής. Σε περίπτωση που δεν χρησιµοποιείται η εντολή glviewport στο πρόγραµµα, η OpenGL δηµιουργεί ένα προκαθορισµένο παράθυρο παρατήρησης που εκτείνεται σε ολόκληρη τη διαθέσιµη επιφάνεια σχεδίασης. Σε περίπτωση χειροκίνητης αλλαγής των διαστάσεων της επιφάνειας σχεδίασης (reshape), οι διαστάσεις του προκαθορισµένου παραθύρου παρατήρησης αναπροσαρµόζονται, ούτως ώστε αυτό να εξακολουθεί καταλαµβάνει ολόκληρη την επιφάνεια σχεδίασης Μετασχηµατισµός παρατήρησης xw, xw και Θεωρούµε ένα παράθυρο αποκοπής που εκτείνεται µεταξύ των τιµών [ ] στο σύστηµα συντεταγµένων σκηνής. Επίσης, θεωρούµε στην επιφάνεια σχεδίασης της συσκευής εξόδου ένα διαθέσιµο εύρος τιµών (συντεταγµένες συσκευής) που εκτείνεται µεταξύ των ορίων και [ yu, yu ] Αναζητούµε το µετασχηµατισµό που αντιστοιχίζει το παραπάνω εύρος συντεταγµένων σκηνής στο διαθέσιµο εύρος συντεταγµένων συσκευής. [ ] yw, yw [ ] xu, xu εδοµένου ότι οι αναλογίες µεταξύ των αποστάσεων ενός σηµείου από τα άκρα των παραθύρων διατηρούνται, έχουµε 84

23 xw xw xw xw yw yw yw yw = = xu xu xu xu yu yu yu yu οπότε επιλύοντας ως προς x και y προκύπτει u u xu = s x yu = s y xw + t x yw + t µε τις παραµέτρους s, s, t και t να προκύπτουν από τις σχέσεις: x y x y y και σε µορφή µητρώου έχουµε s s t t x x y y xu = xw yu = yw xu = yu = xu xw yu yw xw xw yw yw xv yv = M 1 xu xw yu yw xw y 1 w, v w xw yw 85

24 µε M sx = s 0 t x t 1 w, v y y 2.11 Κανονικοποίηση συντεταγµένων Στην OpenGL, µετά τη διαδικασία της αποκοπής και πριν την απόδοση συντεταγµένων συσκευής, εκτελείται µια διαδικασία κανονικοποίησης των αποκοµµένων συντεταγµένων σε ένα προκαθορισµένο εύρος τιµών. Αυτό γίνεται ούτως ώστε η αναπαράσταση των συντεταγµένων των αποµονωµένων σχηµάτων να είναι ανεξάρτητη της χρησιµοποιούµενης ανάλυσης της συσκευής εξόδου. Οι συντεταγµένες των σχηµάτων που περιέχονται στο παράθυρο αποκοπής κανονικοποιούνται στο εύρος τιµών [ 1, 1] (κανονικοποιηµένο τετράγωνο). Προφανώς, το µητρώο του µετασχηµατισµού κανονικοποίησης προκύπτει από τους τύπους µετασχηµατισµού παρατήρησης, εάν θέσουµε: x x u u = y = y u u = 1 = 1 οπότε προκύπτει το µητρώο µετασχηµατισµού παρατήρησης M w, ns x = w 2 x 0 0 w y w 0 2 y 0 w x x y y w w w w + x x + y y 1 w w w w Κατόπιν, οι κανονικοποιηµένες συντεταγµένες, µετατρέπονται σε συντεταγµένες συσκευής βάσει του µητρώου µετασχηµατισµού: M ns, v xu = x u y u 0 y 2 0 u x y u u + x 2 + y 2 1 u u 86

25 Παράδειγµα: Καθορισµός τετραγώνου παραθύρου παρατήρησης σε επιφάνεια αυθαίρετης αναλογίας πλάτους-ύψους #include <glut.h> GLsizei width=640; GLsizei height=480; GLuint x1=10,y1=10; GLuint x2=20,y2=20; void display() printf("display event detected.\n"); glclearcolor(1,1,1,0); glclear(gl_color_buffer_bit); glcolor3f(1,0,0); glrecti(x1,y1,x2,y2); glflush(); void reshape(int newwidth,int newheight) printf("reshape event detected.\n"); //Defining a square viewport if (newwidth<newheight) width=newwidth; height=width; else height=newheight; width=height; glviewport(0,0,width,height); int main(int argc, char** argv) glutinit(&argc,argv); glutinitwindowposition(50,50); glutinitwindowsize(width,height); glutinitdisplaymode(glut_single GLUT_RGB); glutcreatewindow("reshape events"); glmatrixmode(gl_projection); gluortho2d(0,30,0,30); glutdisplayfunc(display); glutreshapefunc(reshape); glutmainloop(); return 0; 87

26 ΠΡΟΣΟΧΗ!!! Στην περίπτωση διαχείρισης γεγονότων: Αν θεωρήσουµε ένα pixel της επιφάνειας σχεδίασης, η έκφρασή του µε συντεταγµένες συσκευής διαφέρει από την εκφρασή του σε συντεταγµένες που λαµβάνουµε από τα ορίσµατα των συναρτήσεων κλήσης, αν κάνουµε λ.χ. κλικ σε αυτό. Συγκεκριµένα, οι συντεταγµένες-ορίσµατα που λαµβάνουµε από τις συναρτήσεις κλήσης ορίζονται θεωρώντας την αρχή των αξόνων στην πάνω αριστερή γωνία της επιφάνειας σχεδίασης. Το ίδιο σηµείο εκφράζεται µε διαφορετικές τιµές στο σύστηµα συντεταγµένων συσκευής, λόγω της διαφοράς σύµβασης ως προς την αρχή των αξόνων. ηλαδή, εάν κάνουµε click µε το ποντίκι σε ένα σηµείο που η συνάρτηση κλήσης θα χαρακτηρίσει µε το ζεύγος τιµών (x,y),το σηµείο αυτό, στο σύστηµα συντεταγµένων συσκευής, θα εκφράζεται µε τις τιµές (x, height-y). Επίσης στην περίπτωση που θέλουµε, κάνοντας κλικ σε ένα pixel, να σχεδιάσουµε ένα σηµείο στη θέση που θα δοθεί, τότε, στην αντίστοιχη εντολή σχεδίασης, το σηµείο θα πρέπει να εκφράστεί ως προς το σύστηµα συντεταγµένων σκηνής. Θα πρέπει δηλαδή να βρούµε οι συντεταγµένες συσκευής του pixel που επιλέξαµε σε ποιες συντεταγµένες σκηνής αντιστοιχούν. Η αντιστοιχία αυτή υπολογίζεται αντιστρέφοντας το µετασχηµατισµό παρατήρησης που προαναφέρθηκε Επιδράσεις των παραθύρων αποκοπής και παρατήρησης Στο σηµείο αυτό είναι χρήσιµο να επισηµάνουµε και να διαχωρίσουµε το ρόλο που παίζουν το παράθυρο αποκοπής και το παράθυρο παρατήρησης. 88

27 Το παράθυρο αποκοπής καθορίζει ποιο τµήµα της σκηνής επιθυµούµε θα αποµονώσουµε, ενώ το παράθυρο παρατήρησης καθορίζει το εύρος της επιφάνειας στο οποίο θα σχεδιαστεί το αποκοµµένο τµήµα της σκηνής. Μεταβάλλοντας το έυρος του παραθύρου αποκοπής µπορούµε να δηµιουργήσουµε εφφέ µεγέθυνσης ή σµίκρυνσης (zoom in zoom out). Μεταβάλλοντας τη σχετική αναλογία πλάτους ύψους των παραθύρων αποκοπής και παρατήρησης επιτυγχάνουµε ή συµπίεση ή το τέντωµα της σκηνής ως προς µία από τις δύο διαστάσεις (stretching/skewing). Η επιλογή των διαστάσεων των παραθύρων αποκοπής και παρατήρησης είναι σηµαντική παράµετρος, όταν ο προγραµµατιστής θέλει να αποδώσει το αποκοµµένο τµήµα της σκηνής χωρίς ανεπιθύµητες παραµορφώσεις. Στην περίπτωση αυτή, θα πρέπει να ρυθµίσει προσεκτικά την αναλογία πλάτους-ύψους (aspect ratio) του παραθύρου αποκοπής και του παραθύρου παρατήρησης. Στην περίπτωση λ.χ. που ορίζουµε ένα κύκλο, προκειµένου να σχεδιαστεί στην οθόνη ως κύκλος, θα πρέπει η αναλογία πλάτουςύψους και των δύο παραθύρων να είναι η ίδια. Στην αντίθετη περίπτωση, θα σχεδιαστεί έλλειψη. Είναι επίσης σηµαντικό να κατανοήσουµε ως προς ποιο σύστηµα συντεταγµένων ορίζεται το κάθε παράθυρο. Συγκεκριµένα: Το παράθυρο αποκοπής ορίζεται σε συντεταγµένες σκηνής. Το παράθυρο παρατήρησης ορίζεται σε συντεταγµένες συσκευής. Οι διαφορές µεταξύ των παραθύρων αποκοπής και παρατήρησης συνοψίζονται στον ακόλουθο πίνακα. Καθορίζει: Παράθυρο αποκοπής (gluortho2d) τι θα σχεδιαστεί [ xw, xw ][, yw yw ], Παράθυρο παρατήρησης (glviewport) πού θα σχεδιαστεί [ xu, xu ], [ yu yu ], Ορίζεται σε: συντεταγµένες σκηνής συντεταγµένες συσκευής 89

28 90

Είσοδος Έξοδος ιαχείριση γεγονότων Απόδοση 2 σκηνών

Είσοδος Έξοδος ιαχείριση γεγονότων Απόδοση 2 σκηνών Είσοδος Έξοδος ιαχείριση γεγονότων Απόδοση 2 σκηνών Περιεχόµενα ενότητας: ηµιουργία παραθύρων γραφικών ιαχείριση γεγονότων - Αλληλεπιδραστικές εφαρµογές Αποκοπή - Μετασχηµατισµός παρατήρησης Εκκίνηση βιβλιοθήκης

Διαβάστε περισσότερα

Εισαγωγή στην OpenGL

Εισαγωγή στην OpenGL Εισαγωγή στην OpenGL Ε.1 Τι είναι η OpenGL; Ένας νέος χρήστης θα υποθέσει ότι η OpenGL είναι µια βιβλιοθήκη σχεδίασης γραφικών. Ωστόσο, µε τον όρο OpenGL δεν αναφερόµαστε σε µια συγκεκριµένη βιβλιοθήκη

Διαβάστε περισσότερα

Εισαγωγή στην OpenGL

Εισαγωγή στην OpenGL Εισαγωγή στην OpenGL Περιεχόµενα εισαγωγικής ενότητας: Γενικά χαρακτηριστικά της OpenGL Βιβλιοθήκες που της OpenGL Ένα τυπικό πρόγραµµα Τι είναι η OpenGL; Η OpenGL δεν είναι µια συγκεκριµένη βιβλιοθήκη

Διαβάστε περισσότερα

OpenGL. Εισαγωγή στην OpenGL Βασικά Γεωμετρικά Σχήματα Παράλληλη (ορθογραφική) προβολή. Μάθημα: Γραφικά Υπολογιστών και Εικονική Πραγματικότητα

OpenGL. Εισαγωγή στην OpenGL Βασικά Γεωμετρικά Σχήματα Παράλληλη (ορθογραφική) προβολή. Μάθημα: Γραφικά Υπολογιστών και Εικονική Πραγματικότητα OpenGL Εισαγωγή στην OpenGL Βασικά Γεωμετρικά Σχήματα Παράλληλη (ορθογραφική) προβολή Κατερίνα Παπαδοπούλου / pakate@unipi.gr Μάθημα: Γραφικά Υπολογιστών και Εικονική Πραγματικότητα OpenGL Εισαγωγή Είναι

Διαβάστε περισσότερα

Συσκευές εισόδου. Φυσικές συσκευές εισόδου Λογικές συσκευές εισόδου

Συσκευές εισόδου. Φυσικές συσκευές εισόδου Λογικές συσκευές εισόδου Αλληλεπίδραση Project sketchpad: πρώτο αλληλεπιδραστικό πρόγραµµα γραφικών Αλληλεπίδραση βασικό συστατικό προγραµµάτων γραφικών Η OpenGL δεν υποστηρίζει άµεσα αλληλεπίδραση (συναρτήσεις διαχείρισης παραθύρων

Διαβάστε περισσότερα

Εισαγωγή στην C. Μορφή Προγράµµατος σε γλώσσα C

Εισαγωγή στην C. Μορφή Προγράµµατος σε γλώσσα C Εισαγωγή στην C Μορφή Προγράµµατος σε γλώσσα C Τµήµα Α Με την εντολή include συµπεριλαµβάνω στο πρόγραµµα τα πρότυπα των συναρτήσεων εισόδου/εξόδου της C.Το αρχείο κεφαλίδας stdio.h είναι ένας κατάλογος

Διαβάστε περισσότερα

Απόδοση 3D σκηνών - Κινούµενα γραφικά

Απόδοση 3D σκηνών - Κινούµενα γραφικά Απόδοση 3D σκηνών - Κινούµενα γραφικά Περιεχόµενα ενότητας Καταστολή κρυµµένων επιφανειών - Αλγόριθµος z-buffer Τρισδιάστατες επιφάνειες: Κύβος Σφαίρα Κώνος - Κύλινδρος - Κυκλικός δίσκος ακτύλιος Τοµέας

Διαβάστε περισσότερα

OpenGL. Εισαγωγή. Εξάμηνο: 2014Β. Διδάσκουσα: Κανελλοπούλου Χριστίνα_ΠΕ19 Πληροφορικής Ηλεκτρονική Τάξη: http://moodleforall.ictlab.edu.

OpenGL. Εισαγωγή. Εξάμηνο: 2014Β. Διδάσκουσα: Κανελλοπούλου Χριστίνα_ΠΕ19 Πληροφορικής Ηλεκτρονική Τάξη: http://moodleforall.ictlab.edu. Τεχνικός Εφαρμογών Πληροφορικής Εισαγωγή OpenGL Εξάμηνο: 2014Β Διδάσκουσα: Ηλεκτρονική Τάξη: http://moodleforall.ictlab.edu.gr/ Περιεχόμενα 1. Τι είναι η OpenGL 2. Μηχανή καταστάσεων 3. Η εξέλιξη της 4.

Διαβάστε περισσότερα

Προγραμματισμός γραφικών

Προγραμματισμός γραφικών Προγραμματισμός γραφικών Εισαγωγή ελάχιστου συνόλου συναρτήσεων Οχι αλληλεπίδραση από τον χρήστη Δισδιάστατα γραφικά: ειδική περίπτωση τρισδιάστατων γραφικών Παράδειγμα-εφαρμογή: η ταινίατου Sierpinski

Διαβάστε περισσότερα

4 ο Εργαστήριο Τυχαίοι Αριθμοί, Μεταβλητές Συστήματος

4 ο Εργαστήριο Τυχαίοι Αριθμοί, Μεταβλητές Συστήματος 4 ο Εργαστήριο Τυχαίοι Αριθμοί, Μεταβλητές Συστήματος Μεταβλητές Συστήματος Η Processing χρησιμοποιεί κάποιες μεταβλητές συστήματος, όπως τις ονομάζουμε, για να μπορούμε να παίρνουμε πληροφορίες από το

Διαβάστε περισσότερα

Προγραμματισμός Η/Υ (ΤΛ2007 )

Προγραμματισμός Η/Υ (ΤΛ2007 ) Τμήμα Ηλεκτρονικών Μηχανικών Τ.Ε.Ι. Κρήτης Προγραμματισμός Η/Υ (ΤΛ2007 ) Δρ. Μηχ. Νικόλαος Πετράκης (npet@chania.teicrete.gr) Ιστοσελίδα Μαθήματος: https://eclass.chania.teicrete.gr/ Εξάμηνο: Εαρινό 2014-15

Διαβάστε περισσότερα

Μετασχηµατισµοί συντεταγµένων

Μετασχηµατισµοί συντεταγµένων Μετασχηµατισµοί συντεταγµένων Περιεχόµενα ενότητας: Έννοια και χρησιµότητα του µετασχηµατισµού συντεταγµένων Μητρώα µετασχηµατισµού Συντεταγµένες µοντέλου Μετασχηµατισµός µοντέλου Στοιχειώδεις µετασχηµατισµοί

Διαβάστε περισσότερα

Επεξεργασία Αρχείων Κειµένου

Επεξεργασία Αρχείων Κειµένου Επεξεργασία Αρχείων Κειµένου Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: Αρχεία Κειµένου Γενικά Συναρτήσεις Επεξεργασίας Αρχείων Κειµένου ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 1 Αρχεία Γενικά

Διαβάστε περισσότερα

Εισαγωγή στην OpenGL: μέρος 1ο

Εισαγωγή στην OpenGL: μέρος 1ο Εισαγωγή στην OpenGL: μέρος 1ο Τι είναι η OpenGL Η OpenGL είναι ένα σύνολο εντολών (Application Programming Interface API) που μας επιτρέπει την δημιουργία τριδιάστατων γραφικών. Δεν είναι γλώσσα προγραμματισμού

Διαβάστε περισσότερα

Αντικειµενοστρεφής Προγραµµατισµός

Αντικειµενοστρεφής Προγραµµατισµός 16 η διάλεξη Π. Σταθοπούλου pstath@ece.upatras.gr ή pstath@upatras.gr Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7 Φροντιστήριο : ευτέρα 11πµ-12πµ ΗΛ4 Προηγούµενη ιάλεξη

Διαβάστε περισσότερα

3 ο Εργαστήριο Μεταβλητές, Τελεστές

3 ο Εργαστήριο Μεταβλητές, Τελεστές 3 ο Εργαστήριο Μεταβλητές, Τελεστές Μια μεταβλητή έχει ένα όνομα και ουσιαστικά είναι ένας δείκτης σε μια συγκεκριμένη θέση στη μνήμη του υπολογιστή. Στη θέση μνήμης στην οποία δείχνει μια μεταβλητή αποθηκεύονται

Διαβάστε περισσότερα

> μεγαλύτερο <= μικρότερο ή ίσο < μικρότερο == ισότητα >= μεγαλύτερο ή ίσο!= διαφορετικό

> μεγαλύτερο <= μικρότερο ή ίσο < μικρότερο == ισότητα >= μεγαλύτερο ή ίσο!= διαφορετικό 5 ο Εργαστήριο Λογικοί Τελεστές, Δομές Ελέγχου Λογικοί Τελεστές > μεγαλύτερο = μεγαλύτερο ή ίσο!= διαφορετικό Οι λογικοί τελεστές χρησιμοποιούνται για να ελέγξουμε

Διαβάστε περισσότερα

Κεφάλαιο 3ο Μετασχηµατισµοί συντεταγµένων

Κεφάλαιο 3ο Μετασχηµατισµοί συντεταγµένων Κεάλαιο 3ο Μετασχηµατισµοί συντεταγµένων Εισαγωγή Στο ο Κεάλαιο αναλύσαµε βασικές εντολές σχεδίασης, µέσω των οποίων ο προγραµµατιστής µπορεί να να καθορίσει τις συντεταγµένες της σκηνής στις οποίες επιθυµεί

Διαβάστε περισσότερα

ΕΡΓΑΣΙΑ ΕΞΑΜΗΝΟΥ - ΜΕΡΟΣ Γ'

ΕΡΓΑΣΙΑ ΕΞΑΜΗΝΟΥ - ΜΕΡΟΣ Γ' ΕΡΓΑΣΙΑ ΕΞΑΜΗΝΟΥ - ΜΕΡΟΣ Γ' ΕΡΓΑΣΤΗΡΙΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ I, ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ 2009-2010 Προθεσµία : ΚΥΡΙΑΚΗ 22/11/09, 23:59 Στόχοι Οι στόχοι αυτού του τµήµατος της εργασίας είναι: Εισαγωγή κίνησης Αλληλεπίδραση

Διαβάστε περισσότερα

Κεφάλαιο 4 ο Προβολές

Κεφάλαιο 4 ο Προβολές Κεφάλαιο 4 ο Προβολές Εισαγωγή Στο Κεφάλαιο 2 αναλύσαµε τις τεχνικές σχεδίασης στις δύο διαστάσεις. Σε αυτό το κεφάλαιο θα επεκταθούµε σε τεχνικές αναπαράστασης τρισδιάστατων σκηνών στο επίπεδο του παρατηρητή.

Διαβάστε περισσότερα

Προγραµµατιστικές Τεχνικές

Προγραµµατιστικές Τεχνικές Εθνικό Μετσόβιο Πολυτεχνείο Σχολή Αγρονόµων Τοπογράφων Μηχανικών Προγραµµατιστικές Τεχνικές Βασίλειος Βεσκούκης ρ. Ηλεκτρολόγος Μηχανικός & Μηχανικός Υπολογιστών ΕΜΠ v.vescoukis@cs.ntua.gr Ρωµύλος Κορακίτης

Διαβάστε περισσότερα

Κεφάλαιο 5 Απόδοση τρισδιάστατων σκηνών Κινούµενα γραφικά

Κεφάλαιο 5 Απόδοση τρισδιάστατων σκηνών Κινούµενα γραφικά Κεφάλαιο 5 Απόδοση τρισδιάστατων σκηνών Κινούµενα γραφικά Εισαγωγή Στο Κεφάλαιο αυτό αναλύονται τεχνικές ορθής απόδοσης τριαδιάστατων σκηνών καθώς και κινουµένων σκηνών. Για την ορθή αναπαράσταση τρισδιάστατων

Διαβάστε περισσότερα

A3.3 Γραφικά Περιβάλλοντα Επικοινωνίας και Διαχείριση Παραθύρων

A3.3 Γραφικά Περιβάλλοντα Επικοινωνίας και Διαχείριση Παραθύρων A3.3 Γραφικά Περιβάλλοντα Επικοινωνίας και Διαχείριση Παραθύρων Τι θα μάθουμε σήμερα: Να αναφέρουμε τα κύρια χαρακτηριστικά ενός Γραφικού Περιβάλλοντος Επικοινωνίας Να εξηγούμε τη χρήση των κουμπιών του

Διαβάστε περισσότερα

είκτες και Πίνακες (2)

είκτες και Πίνακες (2) είκτες και Πίνακες (2) Στην ενότητα αυτή θα µελετηθούν τα εξής θέµατα: Πολυδιάστατοι πίνακες Πέρασµα παραµέτρων σε προγράµµατα C ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 1-1 Πίνακες εικτών Πίνακας δεικτών είναι

Διαβάστε περισσότερα

Σχεδίαση με Ηλεκτρονικούς Υπολογιστές

Σχεδίαση με Ηλεκτρονικούς Υπολογιστές ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ ΑΝΟΙΧΤΑ ΑΚΑΔΗΜΑΙΚΑ ΜΑΘΗΜΑΤΑ Σχεδίαση με Ηλεκτρονικούς Υπολογιστές Ενότητα # 13: Τεχνικές απεικόνισης στην οθόνη του ΗΥ Καθηγητής Ιωάννης Γ. Παρασχάκης Τμήμα Αγρονόμων

Διαβάστε περισσότερα

ΠΑΝΕΠΙΣΤΗΜΙΟ AΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. Τμήματα Ναυτιλίας και Επιχειρηματικών Υπηρεσιών & Μηχ. Αυτοματισμού ΤΕ. Εισαγωγή στη Python

ΠΑΝΕΠΙΣΤΗΜΙΟ AΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. Τμήματα Ναυτιλίας και Επιχειρηματικών Υπηρεσιών & Μηχ. Αυτοματισμού ΤΕ. Εισαγωγή στη Python ΠΑΝΕΠΙΣΤΗΜΙΟ AΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. Τμήματα Ναυτιλίας και Επιχειρηματικών Υπηρεσιών & Μηχ. Αυτοματισμού ΤΕ ΠΛΗΡΟΦΟΡΙΚΗ ΤΕΧΝΟΛΟΓΙΑ ΚΑΙ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Εισαγωγή στη Python Νικόλαος Ζ. Ζάχαρης Αναπληρωτής

Διαβάστε περισσότερα

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7 Π. Σταθοπούλου pstath@ece.upatras.gr ή pstath@upatras.gr Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7 Φροντιστήριο : ευτέρα 11πµ-12πµ ΗΛ4 Προηγούµενη ιάλεξη Εισαγωγικά

Διαβάστε περισσότερα

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7 Π. Σταθοπούλου pstath@ece.upatras.gr ή pstath@upatras.gr Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7 Φροντιστήριο : ευτέρα 11πµ-12πµ ΗΛ4 Προηγούµενη ιάλεξη Προτάσεις,

Διαβάστε περισσότερα

Συσκευές εισόδου. Φυσικές συσκευές εισόδου Λογικές συσκευές εισόδου

Συσκευές εισόδου. Φυσικές συσκευές εισόδου Λογικές συσκευές εισόδου Αλληλεπίδραση Project sketchpad: πρώτο αλληλεπιδραστικό πρόγραμμα γραφικών Αλληλεπίδραση βασικό συστατικό προγραμμάτων γραφικών Η OpenGL δεν υποστηρίζει άμεσα αλληλεπίδραση (συναρτήσεις διαχείρισης παραθύρων

Διαβάστε περισσότερα

ΚΕΦΑΛΑΙΟ 5: ΑΠΕΙΚΟΝΙΣΗ ΚΑΙ ΑΠΟΚΟΠΗ

ΚΕΦΑΛΑΙΟ 5: ΑΠΕΙΚΟΝΙΣΗ ΚΑΙ ΑΠΟΚΟΠΗ ΚΕΦΑΛΑΙΟ 5: ΑΠΕΙΚΟΝΙΣΗ ΚΑΙ ΑΠΟΚΟΠΗ Ένα γεωμετρικό μοντέλο είναι μια αριθμητική περιγραφή ενός αντικειμένου, που περιλαμβάνει το μέγεθος, το σχήμα, καθώς και άλλες ιδιότητές του. Η περιγραφή του μοντέλου

Διαβάστε περισσότερα

Κεφάλαιο 3.1, : Συναρτήσεις I. ( ιάλεξη 11) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Κεφάλαιο 3.1, : Συναρτήσεις I. ( ιάλεξη 11) ιδάσκων: ηµήτρης Ζεϊναλιπούρ Κεφάλαιο 3.1,3.3-3.4: Συναρτήσεις I ( ιάλεξη 11) ιδάσκων: ηµήτρης Ζεϊναλιπούρ 11-1 Μη- οµηµένος Προγραµµατισµός Το πρόγραµµα στα αριστερά δεν είναι Αρθρωτό (δεν έχει σωστή δοµή). Όλη η λειτουργικότητα

Διαβάστε περισσότερα

Α. unsigned int Β. double. Γ. int. unsigned char x = 1; x = x + x ; x = x * x ; x = x ^ x ; printf("%u\n", x); Β. unsigned char

Α. unsigned int Β. double. Γ. int. unsigned char x = 1; x = x + x ; x = x * x ; x = x ^ x ; printf(%u\n, x); Β. unsigned char ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Εξετάσεις Β Περιόδου 2015 (8/9/2015) ΟΝΟΜΑΤΕΠΩΝΥΜΟ:................................................................................ Α.Μ.:...............................................

Διαβάστε περισσότερα

1 ο Εργαστήριο Συντεταγμένες, Χρώματα, Σχήματα

1 ο Εργαστήριο Συντεταγμένες, Χρώματα, Σχήματα 1 ο Εργαστήριο Συντεταγμένες, Χρώματα, Σχήματα 1. Σύστημα Συντεταγμένων Το σύστημα συντεταγμένων που έχουμε συνηθίσει από το σχολείο τοποθετούσε το σημείο (0,0) στο σημείο τομής των δυο αξόνων Χ και Υ.

Διαβάστε περισσότερα

2. Κάντε κλικ στο παράθυρο όψης Top για να το ενεργοποιήσετε, ώστε να σχεδιάσετε το πάτωµα του δωµατίου.

2. Κάντε κλικ στο παράθυρο όψης Top για να το ενεργοποιήσετε, ώστε να σχεδιάσετε το πάτωµα του δωµατίου. Άσκηση 7 Σύνθετα Αντικείµενα Στόχος της άσκησης Στόχος της παρούσας άσκησης είναι η εξοικείωση µε τη δηµιουργία σύνθετων αντικειµένων που δηµιουργούνται από τον συνδυασµό δύο ή περισσότερων τρισδιάστατων

Διαβάστε περισσότερα

Κεφάλαιο 3.5-3.6, 3.2: Συναρτήσεις II. ( ιάλεξη 12) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Κεφάλαιο 3.5-3.6, 3.2: Συναρτήσεις II. ( ιάλεξη 12) ιδάσκων: ηµήτρης Ζεϊναλιπούρ Κεφάλαιο 3.5-3.6, 3.2: Συναρτήσεις II ( ιάλεξη 12) ιδάσκων: ηµήτρης Ζεϊναλιπούρ 12-1 Ανασκόπηση οµής Προγράµµατος µε Συναρτήσεις #include 1 void PrintMessage (); Πρότυπο ( ήλωση) Συνάρτησης (

Διαβάστε περισσότερα

Εικόνες και γραφικά. Τεχνολογία Πολυµέσων 05-1

Εικόνες και γραφικά. Τεχνολογία Πολυµέσων 05-1 Εικόνες και γραφικά Περιγραφή στατικών εικόνων Αναπαράσταση γραφικών Υλικό γραφικών Dithering και anti-aliasing Σύνθεση εικόνας Ανάλυση εικόνας Μετάδοση εικόνας Τεχνολογία Πολυµέσων 05-1 Περιγραφή στατικών

Διαβάστε περισσότερα

Δομημένος Προγραμματισμός (ΤΛ1006)

Δομημένος Προγραμματισμός (ΤΛ1006) Τεχνολογικό Εκπαιδευτικό Ίδρυμα Κρήτης Σχολή Εφαρμοσμένων Επιστημών Τμήμα Ηλεκτρονικών Μηχανικών Τομέας Αυτοματισμού και Πληροφορικής Δομημένος Προγραμματισμός (ΤΛ1006) Δρ. Μηχ. Νικόλαος Πετράκης, Καθηγητής

Διαβάστε περισσότερα

Ανάπτυξη και Σχεδίαση Λογισμικού

Ανάπτυξη και Σχεδίαση Λογισμικού Ανάπτυξη και Σχεδίαση Λογισμικού Η γλώσσα προγραμματισμού C Γεώργιος Δημητρίου Βασικά Στοιχεία Το αλφάβητο της C Οι βασικοί τύποι της C Δηλώσεις μεταβλητών Είσοδος/Έξοδος Βασικές εντολές της C Αλφάβητο

Διαβάστε περισσότερα

scanf() scanf() stdin scanf() printf() int float double %lf float

scanf() scanf() stdin scanf() printf() int float double %lf float Εισαγωγή Στον Προγραµµατισµό «C» Είσοδος Δεδοµένων Πανεπιστήµιο Πελοποννήσου Τµήµα Πληροφορικής & Τηλεπικοινωνιών Νικόλαος Δ. Τσελίκας Νικόλαος Προγραµµατισµός Δ. Τσελίκας Ι Η συνάρτηση scanf() Η συνάρτηση

Διαβάστε περισσότερα

Εισαγωγή στον Προγραµµατισµό. Πανεπιστήµιο Θεσσαλίας Τµήµα Ηλεκτρολόγων Μηχανικών και Μηχανικών Η/Υ

Εισαγωγή στον Προγραµµατισµό. Πανεπιστήµιο Θεσσαλίας Τµήµα Ηλεκτρολόγων Μηχανικών και Μηχανικών Η/Υ Εισαγωγή στον Προγραµµατισµό Πανεπιστήµιο Θεσσαλίας Τµήµα Ηλεκτρολόγων Μηχανικών και Μηχανικών Η/Υ Συναρτήσεις 19.11.16 Β. Ντουφεξή 2 Προβλήματα: Οσο μεγαλώνουν τα προγράμματα, γίνονται πιο πολύπλοκα.

Διαβάστε περισσότερα

Εισαγωγή στον Προγραμματισμό

Εισαγωγή στον Προγραμματισμό Εισαγωγή στον Προγραμματισμό Έλεγχος Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ακ. Έτος 2012-2013 Σχεσιακοί Τελεστές και Ισότητας Ένα πρόγραμμα εκτός από αριθμητικές πράξεις

Διαβάστε περισσότερα

Η πρώτη παράμετρος είναι ένα αλφαριθμητικό μορφοποίησης

Η πρώτη παράμετρος είναι ένα αλφαριθμητικό μορφοποίησης Η συνάρτηση printf() Η συνάρτηση printf() χρησιμοποιείται για την εμφάνιση δεδομένων στο αρχείο εξόδου stdout (standard output stream), το οποίο εξ ορισμού συνδέεται με την οθόνη Η συνάρτηση printf() δέχεται

Διαβάστε περισσότερα

ΕΡΓΑΣΤΗΡΙΟ 2 ΕΙΣΑΓΩΓΗ ΣΤΗ C. Εργαστήριο 2. Τµήµα Πληροφορικής και Τηλεπικοινωνιών

ΕΡΓΑΣΤΗΡΙΟ 2 ΕΙΣΑΓΩΓΗ ΣΤΗ C. Εργαστήριο 2. Τµήµα Πληροφορικής και Τηλεπικοινωνιών ΕΡΓΑΣΤΗΡΙΟ 2 ΕΙΣΑΓΩΓΗ ΣΤΗ C Εργαστήριο 2 Τµήµα Πληροφορικής και Τηλεπικοινωνιών οµή προγράµµατος Οδηγίες προεπεξεργαστή #include... # define... τµήµα δηλώσεων ηλωσεις και ορισµοί µεταβλητών. ηλωσεις συναρτήσεων

Διαβάστε περισσότερα

Περιεχόµενα ενότητας

Περιεχόµενα ενότητας Προβολές Περιεχόµενα ενότητας Μετασχηµατισµός αλλαγής οπτικής γωνίας Επίπεδο προβολής - Μητρώο προβολής Παράλληλη προβολή Πλάγια παράλληλη προβολή Προοπτική προβολή Πλάγια προοπτική προβολή Μετασχηµατισµός

Διαβάστε περισσότερα

Atlantis - Νέο user interface

Atlantis - Νέο user interface New Desktop 1 Atlantis - Νέο user interface ATLANTIS - ΝΕΟ USER INTERFACE...2 ΓΕΝΙΚΗ ΠΑΡΟΥΣΙΑΣΗ...3 ΓΡΑΜΜΗ ΣΥΣΤΗΜΑΤΟΣ...4 ΜΠΑΡΑ ΧΡΗΣΤΗ (USER TOOLBAR)...5 ΚΕΝΤΡΙΚΟ ΜΕΝΟΥ ΤΟΥ ΣΥΣΤΗΜΑΤΟΣ...6 Κεντρικό μενού

Διαβάστε περισσότερα

Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Εργαστήριο 1 Εισαγωγή στη C. Σοφία Μπαλτζή s.mpaltzi@di.uoa.gr

Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Εργαστήριο 1 Εισαγωγή στη C. Σοφία Μπαλτζή s.mpaltzi@di.uoa.gr Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Εργαστήριο 1 Εισαγωγή στη C Σοφία Μπαλτζή s.mpaltzi@di.uoa.gr Διαδικαστικά Ιστοσελίδα μαθήματος: http://eclass.uoa.gr/courses/f30/ Υποχρεωτική παρακολούθηση: Παρασκευή 14:00 16:00 στην

Διαβάστε περισσότερα

Γραφικά Υπολογιστών: OpenGL

Γραφικά Υπολογιστών: OpenGL 1 ΤΕΙ Θεσσαλονίκης Τμήμα Πληροφορικής Γραφικά Υπολογιστών: OpenGL Πασχάλης Ράπτης http://aetos.it.teithe.gr/~praptis praptis@it.teithe.gr 2 Περιεχόμενα Τι είναι η OpenGL; Μοντέλα αντικειμένων (object modeling)

Διαβάστε περισσότερα

Κεφάλαιο 8.7. Πίνακες & Συναρτήσεις ( ιάλεξη 17) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Κεφάλαιο 8.7. Πίνακες & Συναρτήσεις ( ιάλεξη 17) ιδάσκων: ηµήτρης Ζεϊναλιπούρ Κεφάλαιο 8.7 Πίνακες & Συναρτήσεις ( ιάλεξη 17) ιδάσκων: ηµήτρης Ζεϊναλιπούρ 17-1 Εισαγωγή Στις προηγούµενες διαλέξεις µάθαµε πώς να δηλώνουµε, αρχικοποιούµε και να επεξεργαζόµαστε πίνακες. Σήµερα θα µελετήσουµε

Διαβάστε περισσότερα

ΗΥ-150. Προγραµµατισµός. Εντολές Ελέγχου Ροής

ΗΥ-150. Προγραµµατισµός. Εντολές Ελέγχου Ροής ΗΥ-150 Εντολές Ελέγχου Ροής Σειριακή εκτέλεση εντολών Όλα τα προγράµµατα «γράφονται» χρησιµοποιώντας 3 είδη εντολών: Σειριακές εντολές (sequential built in C) Εντολές απόφασης (if, if/else, switch) Περιλαµβάνει

Διαβάστε περισσότερα

Επανάληψη για τις Τελικές εξετάσεις

Επανάληψη για τις Τελικές εξετάσεις Επανάληψη για τις Τελικές εξετάσεις ( ιάλεξη 21) ιδάσκων: ηµήτρης Ζεϊναλιπούρ Εισαγωγή Το µάθηµα EPL032 έχει ως βασικό στόχο την επίλυση προβληµάτων πληροφορικής µε την χρήση της γλώσσας προγραµµατισµού

Διαβάστε περισσότερα

ΠΕΡΙΕΧΟΜΕΝΑ. Περιγραφή της αρχικής οθόνης κάθε τάξης α. Εικονίδια επιλογής θεµατικών ενοτήτων β. Εικονίδια διαφυγής...

ΠΕΡΙΕΧΟΜΕΝΑ. Περιγραφή της αρχικής οθόνης κάθε τάξης α. Εικονίδια επιλογής θεµατικών ενοτήτων β. Εικονίδια διαφυγής... ΠΕΡΙΕΧΟΜΕΝΑ Α. ΕΚΚΙΝΗΣΗ ΚΛΕΙΣΙΜΟ ΤΗΣ ΕΦΑΡΜΟΓΗΣ.............................. 5 Β. ΒΑΣΙΚΕΣ ΛΕΙΤΟΥΡΓΙΕΣ ΠΡΟΣΒΑΣΙΜΟΤΗΤΑΣ.............................. 6 Γ. ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΥΛΗ ΚΑΘΕ ΤΑΞΗΣ....................................

Διαβάστε περισσότερα

ΠΛΗΚΤΡΟΛΟΓΙΟ. Η ελληνική διάταξη πλήκτρων είναι η παρακάτω (δεν υπάρχουν άλλες διατάξεις για το ελληνικό αλφάβητο):

ΠΛΗΚΤΡΟΛΟΓΙΟ. Η ελληνική διάταξη πλήκτρων είναι η παρακάτω (δεν υπάρχουν άλλες διατάξεις για το ελληνικό αλφάβητο): ΠΛΗΚΤΡΟΛΟΓΙΟ Διατάξεις χαρακτήρων Το πληκτρολόγιο περιλαμβάνει όλους τους χαρακτήρες κάποιου αλφάβητου π.χ. του λατινικού, και πολλά σημεία στίξης, διακριτικά σύμβολα, και βοηθητικά πλήκτρα. Ανάλογα με

Διαβάστε περισσότερα

Version X. Οδηγίες χρήσης

Version X. Οδηγίες χρήσης Version 1.0.1.X Οδηγίες χρήσης Πρόλογος Η εφαρµογή CallReceiver σχεδιάστηκε για την υποστήριξη ξενοδοχείων ή επιχειρήσεων, όσον αφορά στις τηλεφωνικές κλήσεις που διαχειρίζεται το τηλεφωνικό κέντρο (Τ/Κ).

Διαβάστε περισσότερα

Γραφικά με Η/Υ Αποκοπή

Γραφικά με Η/Υ Αποκοπή Γραφικά με Η/Υ Αποκοπή Βασικές λειτουργίες απεικόνισης μετατροπή των φυσικών συντεταγμένων, ενός αντικειμένου, σε συντεταγμένες της συσκευής απεικόνισης (δημιουργία μετασχηματισμού απεικόνισης) αφαίρεση

Διαβάστε περισσότερα

Σχήµα 3.1: Εισαγωγή shift register σε βρόγχο for-loop.

Σχήµα 3.1: Εισαγωγή shift register σε βρόγχο for-loop. Η δοµή «Shift register» 1. Η δοµή «Shift register» εισάγεται στο βρόγχο for-loop αλλά και σε άλλους βρόγχους που θα δούµε στη συνέχεια, όπως ο βρόγχος «While loop». Ο τρόπος εισαγωγής και λειτουργίας της

Διαβάστε περισσότερα

Άσκηση 6 Σύνθετα Αντικείµενα. Στόχος της άσκησης

Άσκηση 6 Σύνθετα Αντικείµενα. Στόχος της άσκησης Άσκηση 6 Σύνθετα Αντικείµενα Στόχος της άσκησης Στόχος της παρούσας άσκησης είναι η εξοικείωση µε τη δηµιουργία σύνθετων αντικειµένων που δηµιουργούνται από τον συνδυασµό δύο ή περισσότερων τρισδιάστατων

Διαβάστε περισσότερα

Ασκήσεις σε Επαναληπτικούς Βρόχους και Συναρτήσεις. Επανάληψη για την ενδιάμεση εξέταση. (Διάλεξη 13)

Ασκήσεις σε Επαναληπτικούς Βρόχους και Συναρτήσεις. Επανάληψη για την ενδιάμεση εξέταση. (Διάλεξη 13) Ασκήσεις σε Επαναληπτικούς Βρόχους και Συναρτήσεις Επανάληψη για την ενδιάμεση εξέταση (Διάλεξη 13) 13-1 Πρόβλημα 1 Γράψετε τον ορισμό μίας συνάρτησης η οποία υπολογίζει το μέγιστο 2 ακεραίων αριθμών και

Διαβάστε περισσότερα

Προγραμματισμός Η/Υ (ΤΛ2007 )

Προγραμματισμός Η/Υ (ΤΛ2007 ) Τμήμα Ηλεκτρονικών Μηχανικών Τ.Ε.Ι. Κρήτης Προγραμματισμός Η/Υ (ΤΛ2007 ) Δρ. Μηχ. Νικόλαος Πετράκης (npet@chania.teicrete.gr) Έκτη (6 η ) τρίωρη διάλεξη. Ιστοσελίδα Μαθήματος: https://eclass.chania.teicrete.gr/

Διαβάστε περισσότερα

Computing. Νοέμβριος Έκδοση 1.0

Computing. Νοέμβριος Έκδοση 1.0 Computing Νοέμβριος 2017 Έκδοση 1.0 Ενότητα Computing Αυτή η ενότητα παραθέτει τις βασικές έννοιες και δεξιότητες που σχετίζονται με την ικανότητα χρήσης υπολογιστικής σκέψης (computational thinking) και

Διαβάστε περισσότερα

Στόχοι και αντικείμενο ενότητας. Εκφράσεις. Η έννοια του τελεστή. #2.. Εισαγωγή στη C (Μέρος Δεύτερο) Η έννοια του Τελεστή

Στόχοι και αντικείμενο ενότητας. Εκφράσεις. Η έννοια του τελεστή. #2.. Εισαγωγή στη C (Μέρος Δεύτερο) Η έννοια του Τελεστή Στόχοι και αντικείμενο ενότητας Η έννοια του Τελεστή #2.. Εισαγωγή στη C (Μέρος Δεύτερο) Εκφράσεις Προτεραιότητα Προσεταιριστικότητα Χρήση παρενθέσεων Μετατροπές Τύπων Υπονοούμενες και ρητές μετατροπές

Διαβάστε περισσότερα

Εισαγωγή στην Αριθμητική Ανάλυση

Εισαγωγή στην Αριθμητική Ανάλυση Εισαγωγή στην Αριθμητική Ανάλυση Εισαγωγή στη MATLAB ΔΙΔΑΣΚΩΝ: ΓΕΩΡΓΙΟΣ ΑΚΡΙΒΗΣ ΒΟΗΘΟΙ: ΔΗΜΗΤΡΙΑΔΗΣ ΣΩΚΡΑΤΗΣ, ΣΚΟΡΔΑ ΕΛΕΝΗ E-MAIL: SDIMITRIADIS@CS.UOI.GR, ESKORDA@CS.UOI.GR Τι είναι Matlab Είναι ένα περιβάλλον

Διαβάστε περισσότερα

Λογισµικό για το µάθηµα της βιολογίας Α και Γ Γυµνασίου. Τεχνικό Εγχειρίδιο Χρήσης για τον Μαθητή

Λογισµικό για το µάθηµα της βιολογίας Α και Γ Γυµνασίου. Τεχνικό Εγχειρίδιο Χρήσης για τον Μαθητή Λογισµικό για το µάθηµα της βιολογίας Α και Γ Γυµνασίου Τεχνικό Εγχειρίδιο Χρήσης για τον Μαθητή Περιεχόµενα Πρόλογος για τον µαθητή...2 1. Το µενού πλοήγησης...3 2. Κουµπιά / εντολές πλοήγησης...4 3.

Διαβάστε περισσότερα

ΑΣΚΗΣΗ 2: ΔΟΜΗ ΠΡΟΓΡΑΜΜΑΤΟΣ C, ΧΕΙΡΙΣΜΟΣ ΜΕΤΑΒΛΗΤΩΝ ΚΑΙ ΣΥΝΑΡΤΗΣΕΙΣ ΕΙΣΟΔΟΥ ΚΑΙ ΕΞΟΔΟΥ

ΑΣΚΗΣΗ 2: ΔΟΜΗ ΠΡΟΓΡΑΜΜΑΤΟΣ C, ΧΕΙΡΙΣΜΟΣ ΜΕΤΑΒΛΗΤΩΝ ΚΑΙ ΣΥΝΑΡΤΗΣΕΙΣ ΕΙΣΟΔΟΥ ΚΑΙ ΕΞΟΔΟΥ ΑΣΚΗΣΗ 2: ΔΟΜΗ ΠΡΟΓΡΑΜΜΑΤΟΣ C, ΧΕΙΡΙΣΜΟΣ ΜΕΤΑΒΛΗΤΩΝ ΚΑΙ ΣΥΝΑΡΤΗΣΕΙΣ ΕΙΣΟΔΟΥ ΚΑΙ ΕΞΟΔΟΥ Σκοπός της Άσκησης Ο σκοπός αυτής της εργαστηριακής άσκησης είναι η ανάλυση των βασικών χαρακτηριστικών της Γλώσσας

Διαβάστε περισσότερα

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7 Π. Σταθοπούλου pstath@ece.upatras.gr ή pstath@upatras.gr Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7 Φροντιστήριο : ευτέρα 11πµ-12πµ ΗΛ4 ❶ Προετοιµασία για το 1 ο Εργαστήριο

Διαβάστε περισσότερα

Προγραμματισμός Ι. Χαρακτήρες. Πανεπιστήμιο Πελοποννήσου Τμήμα Πληροφορικής & Τηλεπικοινωνιών

Προγραμματισμός Ι. Χαρακτήρες. Πανεπιστήμιο Πελοποννήσου Τμήμα Πληροφορικής & Τηλεπικοινωνιών Χαρακτήρες Πανεπιστήμιο Πελοποννήσου Τμήμα Πληροφορικής & Τηλεπικοινωνιών Νικόλαος Προγραμματισμός Δ. Τσελίκας Ι Χαρακτήρες - Εισαγωγή Έως τώρα έχουμε κατά κύριο λόγο χρησιμοποιήσει τους αριθμητικούς τύπους

Διαβάστε περισσότερα

ΚΕΦΑΛΑΙΟ 7 ο. Έτσι ο προγραµµατισµός µε τη ΓΛΩΣΣΑ εστιάζεται στην ανάπτυξη του αλγορίθµου και τη µετατροπή του σε σωστό πρόγραµµα.

ΚΕΦΑΛΑΙΟ 7 ο. Έτσι ο προγραµµατισµός µε τη ΓΛΩΣΣΑ εστιάζεται στην ανάπτυξη του αλγορίθµου και τη µετατροπή του σε σωστό πρόγραµµα. ΚΕΦΑΛΑΙΟ 7 ο 1. Επιλογή της κατάλληλης γλώσσας προγραµµατισµού Εκατοντάδες γλώσσες προγραµµατισµού χρησιµοποιούνται όπως αναφέρθηκε σήµερα για την επίλυση των προβληµάτων µε τον υπολογιστή, τη δηµιουργία

Διαβάστε περισσότερα

Αρχιτεκτονική Υπολογιστών

Αρχιτεκτονική Υπολογιστών Τμήμα Μηχανικών Πληροφορικής & Τηλεπικοινωνιών Αρχιτεκτονική Υπολογιστών Ενότητα 11: Γραφικά VGA Δρ. Μηνάς Δασυγένης mdasyg@ieee.org Εργαστήριο Ψηφιακών Συστημάτων και Αρχιτεκτονικής Υπολογιστών http://arch.icte.uowm.gr/mdasyg

Διαβάστε περισσότερα

H ΓΛΩΣΣΑ C. Μάθηµα 17: Είσοδος/Έξοδος: Επικοινωνία µε το Λειτουργικό Σύστηµα. ηµήτρης Ψούνης

H ΓΛΩΣΣΑ C. Μάθηµα 17: Είσοδος/Έξοδος: Επικοινωνία µε το Λειτουργικό Σύστηµα. ηµήτρης Ψούνης H ΓΛΩΣΣΑ C Μάθηµα 17: Είσοδος/Έξοδος: Επικοινωνία µε το Λειτουργικό Σύστηµα ηµήτρης Ψούνης 2 Περιεχόµενα Μαθήµατος Σύστηµα 1. Γενικά 2. Λειτουργικό Σύστηµα 3. Ορίσµατα Γραµµής Εντολής 1. Ορισµός της main

Διαβάστε περισσότερα

3.1 Αριθμητικοί και Λογικοί Τελεστές, Μετατροπές Τύπου (Casting)

3.1 Αριθμητικοί και Λογικοί Τελεστές, Μετατροπές Τύπου (Casting) Εργαστήριο 3: 3.1 Αριθμητικοί και Λογικοί Τελεστές, Μετατροπές Τύπου (Casting) Η C++, όπως όλες οι γλώσσες προγραμματισμού, χρησιμοποιεί τελεστές για να εκτελέσει τις αριθμητικές και λογικές λειτουργίες.

Διαβάστε περισσότερα

ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Ενδεικτικές Απαντήσεις Εξετάσεων Β' Περιόδου Θέµα 1. (α')

ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Ενδεικτικές Απαντήσεις Εξετάσεων Β' Περιόδου Θέµα 1. (α') ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Ενδεικτικές Απαντήσεις Εξετάσεων Β' Περιόδου 2011 Θέµα 1 (α') Η άποψη που εκφράζεται στην εν λόγω πρόταση είναι λανθασµένη. Η πιθανή βελτίωση της ταχύτητας εκτέλεσης των προγραµµάτων

Διαβάστε περισσότερα

4.3. Γραµµικοί ταξινοµητές

4.3. Γραµµικοί ταξινοµητές Γραµµικοί ταξινοµητές Γραµµικός ταξινοµητής είναι ένα σύστηµα ταξινόµησης που χρησιµοποιεί γραµµικές διακριτικές συναρτήσεις Οι ταξινοµητές αυτοί αναπαρίστανται συχνά µε οµάδες κόµβων εντός των οποίων

Διαβάστε περισσότερα

2 ο Εργαστήριο Αλληλεπίδραση και Animation

2 ο Εργαστήριο Αλληλεπίδραση και Animation 2 ο Εργαστήριο Αλληλεπίδραση και Animation Τα προγράμματα που έχουμε δει μέχρι τώρα εκτελούν τον κώδικά τους μία φορά και το πρόγραμμα σταματάει. Ένα πρόγραμμα που δημιουργεί animation ή ανταποκρίνεται

Διαβάστε περισσότερα

7 ο Εργαστήριο Θόρυβος 2Δ, Μετακίνηση, Περιστροφή

7 ο Εργαστήριο Θόρυβος 2Δ, Μετακίνηση, Περιστροφή 7 ο Εργαστήριο Θόρυβος 2Δ, Μετακίνηση, Περιστροφή O θόρυβος 2Δ μας δίνει τη δυνατότητα να δημιουργίας υφής 2Δ. Στο παρακάτω παράδειγμα, γίνεται σχεδίαση γραμμών σε πλέγμα 300x300 με μεταβαλόμενη τιμή αδιαφάνειας

Διαβάστε περισσότερα

α) Κύκλος από δύο δοσµένα σηµεία Α, Β. Το ένα από τα δύο σηµεία ορίζεται ως κέντρο αν το επιλέξουµε πρώτο. β) Κύκλος από δοσµένο σηµείο και δοσµένο ευ

α) Κύκλος από δύο δοσµένα σηµεία Α, Β. Το ένα από τα δύο σηµεία ορίζεται ως κέντρο αν το επιλέξουµε πρώτο. β) Κύκλος από δοσµένο σηµείο και δοσµένο ευ ΕΙΣΑΓΩΓΗ ΣΤΟ ΛΟΓΙΣΜΙΚΟ SKETCHPAD ΜΕΡΟΣ Α Μιλώντας για ένα λογισµικό δυναµικής γεωµετρίας καλό θα ήταν να διακρίνουµε αρχικά 3 οµάδες εργαλείων µε τα οποία µπορούµε να εργαστούµε µέσα στο συγκεκριµένο περιβάλλον.

Διαβάστε περισσότερα

Φροντιστηριακές Ασκήσεις Απεικόνισης - Αποκοπής

Φροντιστηριακές Ασκήσεις Απεικόνισης - Αποκοπής Φροντιστηριακές Άσκηση Βρες τον πίνακα μετασχηματισμού που θα σχεδιάζει σημεία που περιέχονται σε ένα παράθυρο του οποίου η χαμηλότερη αριστερή γωνία είναι στο (3,3) και η ψηλότερη δεξιά γωνία είναι στο

Διαβάστε περισσότερα

ΣΕΤ ΑΣΚΗΣΕΩΝ 2. Προθεσµία: 15/11/09, 23:59

ΣΕΤ ΑΣΚΗΣΕΩΝ 2. Προθεσµία: 15/11/09, 23:59 ΣΕΤ ΑΣΚΗΣΕΩΝ 2 ΕΡΓΑΣΤΗΡΙΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ I, ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ 2009-20010 Προθεσµία: 15/11/09, 23:59 Στόχοι Χρήση συναρτήσεων Χρήση µονοδιάστατων πινάκων Διαχείριση συµβολοσειρών Φορµαρισµένη έξοδος δεδοµένων

Διαβάστε περισσότερα

Η Βιβλιοθήκη Γραφικών OpenGl Με Χρήση C/C++, JAVA και PYTHON

Η Βιβλιοθήκη Γραφικών OpenGl Με Χρήση C/C++, JAVA και PYTHON ΑΝΩΤΑΤΟ ΤΕΧΝΟΛΟΓΙΚΟ ΕΚΠΑΙΔΕΥΤΙΚΟ ΙΔΡΥΜΑ ΘΕΣΣΑΛΟΝΙΚΗΣ ΣΧΟΛΗ ΤΕΧΝΟΛΟΓΙΚΩΝ ΕΦΑΡΜΟΓΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑ Η Βιβλιοθήκη Γραφικών OpenGl Με Χρήση C/C++, JAVA και PYTHON ΣΠΟΥΔΑΣΤΗΣ : Κουρδής Ανέστης

Διαβάστε περισσότερα

Οι δείκτες στη γλώσσα C

Οι δείκτες στη γλώσσα C Οι δείκτες στη γλώσσα C Δείκτης είναι µία µεταβλητή η οποία περιέχει σαν τιµή µία διεύθυνση της µνήµης Η τιµή ενός δείκτη δείχνει σε µία άλλη µεταβλητή, η οποία µπορεί να προσεγγισθεί έµµεσα µε τους ειδικούς

Διαβάστε περισσότερα

int array[10]; double arr[5]; char pin[20]; Προγραµµατισµός Ι

int array[10]; double arr[5]; char pin[20]; Προγραµµατισµός Ι Εισαγωγή Στον Προγραµµατισµό «C» Πίνακες Πανεπιστήµιο Πελοποννήσου Τµήµα Πληροφορικής & Τηλεπικοινωνιών Νικόλαος Δ. Τσελίκας Νικόλαος Προγραµµατισµός Δ. Τσελίκας Ι Πίνακες στη C Ένας πίνακας στη C είναι

Διαβάστε περισσότερα

Visual Basic Γλώσσα οπτικού

Visual Basic Γλώσσα οπτικού Visual Basi Γλώσσα οπτικού προγραµµατισµού «Η αρχή είναι το ήµισυ του παντός» Κουλλάς Χρίστος www.oullas.om oullas 2 Στόχοι Μαθήµατος Οι µαθητές να µπορούν: να εξηγούν τι είναι η Visual Basi. ναεξηγούνταστάδιαδηµιουργίας

Διαβάστε περισσότερα

ιαχείριση Τηλεφωνικών Κλήσεων

ιαχείριση Τηλεφωνικών Κλήσεων ιαχείριση Τηλεφωνικών Κλήσεων 1 Διαχει ριση Τηλεφωνικω ν Κλη σεων ΓΕΝΙΚΗ ΠΕΡΙΓΡΑΦΗ... 3 ΔΟΜΗ ΧΡΗΣΤΩΝ ΚΑΙ ΔΙΚΑΙΩΜΑΤΑ ΕΠΙ ΤΩΝ ΤΗΛΕΦΩΝΙΚΩΝ ΚΛΗΣΕΩΝ... 3 ΣΧΗΜΑΤΙΚΗ ΑΠΕΙΚΟΝΙΣΗ... 4 ΕΙΣΕΡΧΟΜΕΝΕΣ ΚΛΗΣΕΙΣ... 5

Διαβάστε περισσότερα

ΣΧΕ ΙΑΣΜΟΣ ΕΠΙΦΑΝΕΙΑΣ Με το σχεδιασµό επιφάνειας (Custom επιφάνεια) µπορούµε να σχεδιάσουµε επιφάνειες και αντικείµενα που δεν υπάρχουν στους καταλόγους του 1992. Τι µπορούµε να κάνουµε µε το σχεδιασµό

Διαβάστε περισσότερα

Σχήµα 6.1: Εισαγωγή της εντολής Read From Spreadsheet File στο Block Diagram.

Σχήµα 6.1: Εισαγωγή της εντολής Read From Spreadsheet File στο Block Diagram. Εισαγωγή αρχείων δεδοµένων 1. Η εισαγωγή αρχείων δεδοµένων στο LaVIEW γίνεται στο Block Diagram µε την εντολή Read From Spreadsheet File. 2. Εισάγουµε την εντολή Read From Spreadsheet File στο Block Diagram

Διαβάστε περισσότερα

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ Διάλεξη 4: Δείκτες και Πίνακες Στην ενότητα αυτή θα μελετηθούν τα εξής θέματα: Πίνακες Δεικτών, Παραδείγματα, Πολυδιάστατοι πίνακες Πέρασμα παραμέτρων σε προγράμματα C Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες:

Διαβάστε περισσότερα

ΕΡΓΑΣΤΗΡΙΟ 9: Συμβολοσειρές και Ορίσματα Γραμμής Εντολής

ΕΡΓΑΣΤΗΡΙΟ 9: Συμβολοσειρές και Ορίσματα Γραμμής Εντολής ΕΡΓΑΣΤΗΡΙΟ 9: Συμβολοσειρές και Ορίσματα Γραμμής Εντολής Στο εργαστήριο αυτό θα δούμε πώς ορίζονται και πώς χρησιμοποιούνται οι συμβολοσειρές στην C. Επίσης, θα μελετήσουμε κάποιες από τις συναρτήσεις

Διαβάστε περισσότερα

Ενώσεις δεδομένων Απαριθμητές Ψηφιακοί τελεστές Αναδρομικές συναρτήσεις

Ενώσεις δεδομένων Απαριθμητές Ψηφιακοί τελεστές Αναδρομικές συναρτήσεις Ενώσεις δεδομένων Απαριθμητές Ψηφιακοί τελεστές Αναδρομικές συναρτήσεις Ενώσεις δεδομένων (union) τι και γιατί Συσκευές με μικρή μνήμη => ανάγκη εξοικονόμησης πόρων Παρατήρηση: αχρησιμοποίητη μνήμη. Έστω

Διαβάστε περισσότερα

ΑΣΚΗΣΗ 6: ΔΕΙΚΤΕΣ. Σκοπός της Άσκησης. 1. Εισαγωγικά στοιχεία για τους Δείκτες

ΑΣΚΗΣΗ 6: ΔΕΙΚΤΕΣ. Σκοπός της Άσκησης. 1. Εισαγωγικά στοιχεία για τους Δείκτες Σκοπός της Άσκησης ΑΣΚΗΣΗ 6: ΔΕΙΚΤΕΣ Ο σκοπός αυτής της εργαστηριακής άσκησης είναι η εξοικείωση με τη χρήση των δεικτών (pointers). Οι δείκτες δίνουν την δυνατότητα σε προγράμματα να προσομοιώνουν τη

Διαβάστε περισσότερα

Ανάπτυξη Μεγάλων Εφαρµογών στη Γλώσσα C (Programming in the large)

Ανάπτυξη Μεγάλων Εφαρµογών στη Γλώσσα C (Programming in the large) Ανάπτυξη Μεγάλων Εφαρµογών στη Γλώσσα C (Programming in the large) Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: Συναρτήσεις Εξωτερικές µεταβλητές Κανόνες εµβέλειας ιάρκεια µεταβλητών Αρχικοποίηση

Διαβάστε περισσότερα

Εισαγωγή στον Προγραµµατισµό. Διάλεξη 2 η : Βασικές Έννοιες της γλώσσας προγραµµατισµού C Χειµερινό Εξάµηνο 2011

Εισαγωγή στον Προγραµµατισµό. Διάλεξη 2 η : Βασικές Έννοιες της γλώσσας προγραµµατισµού C Χειµερινό Εξάµηνο 2011 Εισαγωγή στον Προγραµµατισµό Διάλεξη 2 η : Βασικές Έννοιες της γλώσσας προγραµµατισµού C Χειµερινό Εξάµηνο 2011 Hello World /* Αρχείο hello.c * Εµφανίζει στην οθόνη το * µήνυµα hello world */ #include

Διαβάστε περισσότερα

Οδηγίες για το Βιβλίο Κοστολογίου στα Γ κατηγορίας βιβλία

Οδηγίες για το Βιβλίο Κοστολογίου στα Γ κατηγορίας βιβλία Οδηγίες για το Βιβλίο Κοστολογίου στα Γ κατηγορίας βιβλία Για τις οικοδοµικές εταιρίες στις οποίες τηρούµε βιβλίο Κοστολογίου θα πρέπει να ακολουθήσουµε τα παρακάτω βήµατα: 1. Από το menu Παράµετροι &

Διαβάστε περισσότερα

1. Ανοίξτε το 3D Studio MAX ή επιλέξτε File Reset. ηµιουργήστε µια σφαίρα µε κέντρο την αρχή των αξόνων και ακτίνα 20 µονάδων και χρώµα πράσινο.

1. Ανοίξτε το 3D Studio MAX ή επιλέξτε File Reset. ηµιουργήστε µια σφαίρα µε κέντρο την αρχή των αξόνων και ακτίνα 20 µονάδων και χρώµα πράσινο. Άσκηση 5 Κλωνοποίηση Αντικειµένων Στόχος της άσκησης Σην παρούσα άσκηση θα δούµε πως µπορούµε να επιτύχουµε την κλωνοποίηση αντικειµένων στο 3D Studio Max, δηλαδή να δηµιουργήσουµε πανοµοιότυπα αντίγραφα

Διαβάστε περισσότερα

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΤΜΗΜΑ ΜΑΘΗΜΑΤΙΚΩΝ

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΤΜΗΜΑ ΜΑΘΗΜΑΤΙΚΩΝ ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΤΜΗΜΑ ΜΑΘΗΜΑΤΙΚΩΝ ΕΡΓΑΣΤΗΡΙΟ ΒΑΣΕΩΝ Ε ΟΜΕΝΩΝ ΜΕΡΟΣ ΠΕΜΠΤΟ Triggers, Stored procedures Γιώργος Μαρκοµανώλης Περιεχόµενα Triggers-Ενηµέρωση δεδοµένων άλλων πινάκων... 1 Ασφάλεια...

Διαβάστε περισσότερα

Η ιευρυµένη Επιχείρηση Ενότητα Ηλεκτρονικής Μάθησης. «CourseLab» 3ο Φροντιστήριο. Ιωάννα Ταλάντη Υπ. ιδάκτωρ, Τµήµα ιοικητικής Επιστήµης & Τεχνολογίας

Η ιευρυµένη Επιχείρηση Ενότητα Ηλεκτρονικής Μάθησης. «CourseLab» 3ο Φροντιστήριο. Ιωάννα Ταλάντη Υπ. ιδάκτωρ, Τµήµα ιοικητικής Επιστήµης & Τεχνολογίας Η ιευρυµένη Επιχείρηση Ενότητα Ηλεκτρονικής Μάθησης «CourseLab» 3ο Φροντιστήριο Ιωάννα Ταλάντη Υπ. ιδάκτωρ, Τµήµα ιοικητικής Επιστήµης & Τεχνολογίας italanti@aueb.gr Actions and Events 1 Events common

Διαβάστε περισσότερα

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7 Π. Σταθοπούλου pstath@ece.upatras.gr ή pstath@upatras.gr Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7 Φροντιστήριο : ευτέρα 11πµ-12πµ ΗΛ4 Προηγούµενη ιάλεξη Έννοια της

Διαβάστε περισσότερα

Προγραμματισμό για ΗΜΥ

Προγραμματισμό για ΗΜΥ ΕΠΛ 34: Εισαγωγή στον Προγραμματισμό για ΗΜΥ Αχιλλέας Αχιλλέως, Τμήμα Πληροφορικής, Πανεπιστήμιο Κύπρου Email: achilleas@cs.ucy.ac.cy Κεφάλαιο 12 Πίνακες εικτών (Pointers Arrays) Θέματα ιάλεξης Στην ενότητα

Διαβάστε περισσότερα

Προγραμματισμός Ι (ΗΥ120)

Προγραμματισμός Ι (ΗΥ120) Προγραμματισμός Ι (ΗΥ120) Διάλεξη 3: Είσοδος / Έξοδος, Βασικοί Τύποι, Δήλωση Μεταβλητών Ένα Ακόμα Παράδειγμα #include int main(int argc, char* argv[]) { } putchar('h'); putchar('e'); putchar('l');

Διαβάστε περισσότερα

Χρήσιμες Λειτουργίες των. Windows 7

Χρήσιμες Λειτουργίες των. Windows 7 Χρήσιμες Λειτουργίες των Windows 7 1 Περιεχόμενα Εισαγωγή... 3 Χαρακτηριστικά των Windows 7... 3 1. Θέματα (themes):... 3 1.1. Aero Peek... 4 1.2. Aero Shake:... 4 1.3. Aero Snap:... 4 1.4. Αero Flip:...

Διαβάστε περισσότερα

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων Δομημένος Προγραμματισμός Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων www.bpis.teicrete.gr Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων www.bpis.teicrete.gr 2 Παρατηρήσεις

Διαβάστε περισσότερα

3. Σηµειώσεις Access. # Εισαγωγή ψηφίου ή κενού διαστήµατος. Επιτρέπονται τα ση-

3. Σηµειώσεις Access. # Εισαγωγή ψηφίου ή κενού διαστήµατος. Επιτρέπονται τα ση- Μάθηµα 3 Προχωρηµένες ιδιότητες πεδίων Μάσκες εισαγωγής Οι ιδιότητες Μορφή και Μάσκα εισαγωγής περιγράφονται µαζί γιατί έχουν κοινά χαρακτηριστικά που αφορούν την εµφάνιση. Με την ιδιότητα Μορφή καθορίζουµε

Διαβάστε περισσότερα

Σχήµα 4.1: Εισαγωγή βρόγχου while-loop.

Σχήµα 4.1: Εισαγωγή βρόγχου while-loop. Ο βρόγχος While-loop 1. Ο βρόγχος while-loop εκτελείται έως ότου ικανοποιηθεί µία προκαθορισµένη συνθήκη. 2. Ο αριθµός των επαναλήψεων ενός βρόγχου while-loop δεν είναι εκ των προτέρων προκαθορισµένος,

Διαβάστε περισσότερα