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

Σχετικά έγγραφα
Συσκευές εισόδου. Φυσικές συσκευές εισόδου Λογικές συσκευές εισόδου

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

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

ΑΝΤΙΓΡΑΦΗ ΑΡΧΕΙΟΥ ΣΕ ΔΙΣΚΕΤΑ ΑΝΤΙΓΡΑΦΗ ΑΡΧΕΙΟΥ ΑΠΟ ΔΙΣΚΕΤΑ. Από τον κατάλογο που εμφανίζεται επιλέγω: Αποστολή προς Δισκέτα (3,5)

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

αντίστοιχο γεγονός. Όταν όντως το κουμπί

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

Εισαγωγή στο πρόγραμμα Microsoft word 2003

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

ΣΧΕΔΙΑΣΗ ΣΥΣΤΗΜΑΤΩΝ ΜΕ ΧΡΗΣΗ ΥΠΟΛΟΓΙΣΤΩΝ (E-CAD) ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ Χ. Βέργος Καθηγητής

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

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

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

Μάθημα 1: Εισαγωγή. Κάνε κλικ την εντολή "κινήσου" και με το ποντίκι πατημένο μετέφερε τη στη περιοχή σεναρίων.

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

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

Κεφάλαιο 1 Χρήση προτύπου 2. Κεφάλαιο 2 Τροποποίηση μιας παρουσίασης 9. Κεφάλαιο 4 Προσθήκη αντικειμένων 26. Κεφάλαιο 5 Ειδικά εφέ 35

ΣΧΕΔΙΑΣΗ ΣΥΣΤΗΜΑΤΩΝ ΜΕ ΧΡΗΣΗ ΥΠΟΛΟΓΙΣΤΩΝ (E-CAD) ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ

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

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

Δομημένος Προγραμματισμός

Αγώνες αυτοκινήτου Παιχνίδι για 2 παίκτες

Κεφάλαιο 3.1, : Συναρτήσεις I. (Διάλεξη 11)

Προηγμένοι Μικροεπεξεργαστές. Εργαστήριο 4 - Editor

Εργαστήριο #12. Βήμα 1 ο. Βήμα 2 ο. Βήμα 3 ο. Βήμα 4 ο.

Javascript events. part 01

Μεθόδων Επίλυσης Προβλημάτων

Οι θέσεις ενός σημείου στο επίπεδο και στο χώρο Φύλλο εργασίας 1

«Αβάκιο» Οδηγός χρήσης Μικρόκοσμου που αποτελείται από τις ψηφίδες Καμβάς, Χελώνα, Γλώσσα, Μεταβολέας, Χρώματα.

Κεφάλαιο 2.3: Ρυθμίσεις των Windows

Εφαρμογή δημιουργίας σεναρίων Sctatch

Εισαγωγή. Γιατί γραφικά υπολογιστών; Προσέγγιση «από πάνω προς τα κάτω» (top-down). Βαθµίδα διασύνδεσης προγραµµατιστή εφαρµογών (API)

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

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

Microsoft PowerPoint 2007

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

10. Πληκτρολόγιο matrix 4x4

Διαδικασιακός Προγραμματισμός

10. Πληκτρολόγιο matrix 4x4

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

Εγχειρίδιο Χρήσης του «Μαθη.Συ.»

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

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

Κεφάλαιο VΙ: Προσπέλαση Αρχείων. 5.1 Αρχεία δεδομένων.

Περιεχόμενα ΓΕΩΠΥΛΗ ΟΔΗΓΙΕΣ ΧΡΗΣΗΣ ΚΕΝΤΡΙΚΟ SITE. ΧΑΡΤΗΣ... 2 Είσοδος στην εφαρμογή «Χάρτης»... 2 Λειτουργίες εφαρμογής «Χάρτης»...

Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδος

ΣΕΛΙ Α 1 ΚΕΦΑΛΑΙΟ 1 - ΑΡΧΙΚΑ

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

Προγραμματισμός Ι. Προχωρημένα Θέματα. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Εργαστήριο 1-1 η Άσκηση - Ανάλυση

να ακολουθήσουμε Έναρξη Όλα τα Προγράμματα και να ενεργοποιήσουμε την επιλογή Microsoft Word.

Βασικές Εντολές MicroWorlds Pro.

Copyright 2017 HP Development Company, L.P.

To GT30 είναι μια μικρή συσκευή εντοπισμού θέσης με ενσωματωμένο GPS και GSM/GPRS.

Μάθημα 3.8 Τεχνικές μεταφοράς δεδομένων Λειτουργία τακτικής σάρωσης (Polling) Λειτουργία Διακοπών DMA (Direct Memory Access)

Εισαγωγή στο Libre Office. Bάιος Κολοφωτιάς Επιστημονικός Συνεργάτης Sweng Lab A.Π.Θ

Κεφάλαιο ΙV: Δείκτες και πίνακες. 4.1 Δείκτες.

Εισαγωγή εκτελέσιμου κώδικα σε διεργασίες

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

Προγραμματισμός Ι. Είσοδος/Έξοδος. Δημήτρης Μιχαήλ. Ακ. Έτος Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Προηγμένοι Μικροεπεξεργαστές. Εργαστήριο 5 - Editor

Οδηγίες Εγκατάστασης της εφαρμογής Readium και Readium για μαθητές με αμβλυωπία για την ανάγνωση βιβλίων epub σε Υπολογιστή.

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

Εγχειρίδιο Χρήσης Draw for Children. Περιεχόμενα

Unity Editor #03 Κεντρικό Μενού: Edit

ΕΡΓΑΣΤΗΡΙΟ 3: Προγραμματιστικά Περιβάλλοντα και το Πρώτο Πρόγραμμα C

A7.2 Δημιουργία Απλής Γραφικής Εφαρμογής σε Περιβάλλον Scratch

ΕΝΟΤΗΤΑ 04 Δημιουργία φύλλου εργασίας

Visual Flowchart Γενικά

Περιεχόμενα. Λίγα λόγια από το συγγραφέα Windows Vista Επιφάνεια εργασίας Γραμμή εργασιών... 31

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

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

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

Μάθημα 8: Επικοινωνία Συσκευών με τον Επεξεργαστή

Stellarium Εγχειρίδιο Οδηγιών

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

Εισαγωγή στην Επιστήμη Υπολογιστών. Εισαγωγή στην Python

ΠΙΝΑΚΑΣ ΠΕΡΙΕΧΟΜΕΝΩΝ

Κεφάλαιο V: Δομές και ενώσεις. 5.1 Δομές.

Εικόνα. Τεχνολογία Πολυμέσων και Πολυμεσικές Επικοινωνίες 05-1

Δομημένος Προγραμματισμός

Winnie. Ένα πειραματικό window system. Ελένη Μαρία Στέα FOSSComm

του προγράμματος diagrama_rohs.zip )

1. Τα τμήματα της επιφάνειας εργασίας των Windows

Πως θα κατασκευάσω το πρώτο πρόγραμμα;

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

Κεφάλαιο 1.Εντολές κίνησης

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

Δημιουργία και επεξεργασία διανυσματικών επιπέδων στο QGIS

Create Sprite at Runtime

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Constructors, equals, tostring

Οπτική Επικοινωνία 4 - Α.Ε Προτεινόμενες ρυθμίσεις V-Ray 3.4 για Rhino. Υλικά

ΠΛΗΡΟΦΟΡΙΚΗ Ι (MATLAB) Ενότητα 4

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

ΕΙΣΑΓΩΓΗ ΣΤΟ ΛΕΙΤΟΥΡΓΙΚΟ ΣΥΣΤΗΜΑ Microsoft WINDOWS (95-98-NT-2000-XP)

Αριθμητικές Μέθοδοι σε Προγραμματιστικό Περιβάλλον (Εργαστήριο 2)

ΕΠΙΣΚΟΠΗΣΗ ΕΦΑΡΜΟΓΩΝ ΓΡΑΦΕΙΩΝ

ΤΕΜ-101 Εισαγωγή στους Η/Υ Εξεταστική Ιανουαρίου 2011 Θέματα Β

SmarTECPoS. Πως βάζω νέα είδη; Back Office Βασικό Είδη new Νέο Γενικά Κωδικός (είδους) Περιγραφή 1 Τμήμα Τιμή Αποθήκη Τιμή 1 Εστιατόριο Εκτυπωτής

Γ ΓΥΜΝΑΣΙΟΥ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΕ ΤΗ ΓΛΩΣΣΑ MicroWorlds Pro

Transcript:

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

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

Συσκευές εισόδου printf : η φυσική συσκευή εξόδου δεν ενδιαφέρει. Μια φυσική συσκευή ως δύο διαφορετικές λογικές συσκευές Ποντίκι: θέση ή κωδικός menu

Φυσικές συσκευές εισόδου Συσκευές κατάδειξης (pointing devices) Ποντίκι trackball data tablet lightpen joystick spaceball Πληκτρολόγια Data gloves, tracking devices.

Κατηγορίες λογικών συσκευών Τι μετρήσεις επιστρέφει η συσκευή στο πρόγραμμα Πότε επιστρέφει τις μετρήσεις Συμβολοσειράς (string) Πληκτρολόγιο Εντοπιστής (locator) Θέση Ποντίκι, trackball

Κατηγορίες λογικών συσκευών Λήψης (pick) Επιστρέφει τον χαρ. αριθμό ενός αντικειμένου Διαδικασία επιλογής (selection) στην OpenGL Επιλογή (choice) Μια από ένα σύνολο διακριτών επιλογών Υλοποίηση με widgets (menus, κουμπιά)

Κατηγορίες λογικών συσκευών Αναλογικός επιλογέας (dial) Παρέχει αναλογική είσοδο Υλοποιείται με widgets (slidebars) Stroke Επιστρέφει μια σειρά θέσεων

Μέτρηση & έναυση (measure & trigger) Μέτρηση: τι επιστρέφει η συσκευή στο πρόγραμμα Έναυση: είσοδος στη συσκευή που στέλνει σήμα στο πρόγραμμα Πληκτρολόγιο: συμβολοσειρά-enter Ποντίκι: θέση πάτημα πλήκτρου Η μέτρηση μπορεί να περιέχει και ενδείξεις κατάστασης.

Τρόποι εισόδου Μετά από αίτηση (request mode) H εφαρμογή ζητάει μέτρηση Η μέτρηση επιστρέφεται στο πρόγραμμα μόνο όταν διεγερθεί η συσκευή εισόδου Scanf& enter

Τρόποι εισόδου Με δειγματοληψία (sample mode) Η μέτρηση επιστρέφεται στο πρόγραμμα μόλις γίνει κλήση της αντίστοιχης συνάρτησης Δεν χρειάζεται έναυσμα

Τρόποι εισόδου Στους δύο αυτούς τρόπους το πρόγραμμα δέχεταιείσοδομόνοαπότιςσυσκευέςπου θα επιλέξει ο προγραμματιστής. Χρήσιμες για προγράμματα που καθοδηγούν τον χρήστη (γραμμικά) αλλά όχι για αυτά που ο χρήστης ελέγχει τη ροή.

Τρόποι εισόδου Οδηγούμενος από γεγονότα (event mode) Ιδανικός για την περίπτωση πολλών συσκ. εισόδου. Κάθε έναυση σε μια συσκευή δημιουργεί ένα γεγονός (μέτρηση+χαρακτηριστικό συσκευής). Τοποθέτηση στην ουρά γεγονότων Το πρόγραμμα αποφασίζει τι θα κάνει με τα γεγονότα Συσχέτιση callback με κάθε τύπο γεγονότος

Callback functions Συσχέτιση (registration) συναρτήσεων με γεγονότα που αφορούν την εφαρμογή μας. glutmousefunc(mouse_callback_func) H callback λαμβάνει τα ορίσματά της από το σύστημα. Αρχικοποίηση κύκλου γεγονότων με glutmainloop Το πρόγραμμα περιμένει για γεγονότα και μόλις συμβεί κάτι ενδιαφέρον εκτελείται η σχετική callback function

Γεγονότα που σχετίζονται με το ποντίκι Γεγονός ποντικιού: πάτημα/άφημα πλήκτρου ποντικού glutmousefunc(void (*func)(int button, int state, int x, int y)); Κίνηση: κίνηση με πατημένο πλήκτρο glutmotionfunc(void (*func)(int x, int y)); Παθητική κίνηση: κίνηση χωρίς πατημένο πλήκτρο glutpassivemotionfunc(void (*func)(int x, int y));

void mouse_callback_func(int button, int state, int x, int y) { if(button==glut_left_button && state==glut_down) exit(); } glutmousefunc(mouse_callback_func) Σε άλλα γεγονότα δεν συμβαίνει τίποτα

Άλλες callback functions Γεγονότα πληκτρολογίου glutkeyboardfunc(void (*func)(unsigned char key, int x, int y)) glutdisplayfunc() Ησχετικήcallback καλείται όταν χρειάζεται να επιδειχθεί ή ξαναεπιδειχθεί το παράθυρο Απαραίτητη στα προγράμματα glutpostredisplay()

Άλλες callback functions glutidlefunc() Ησχετικήcallback καλείται όταν δεν υπάρχει γεγονός Μπορούμε να αλλάξουμε/απενεργοποιήσουμε τις callback που συσχετίζονται με ένα γεγονός

Menus Δημιουργία pop-up menus Ορισμός επιλογών του menu Συσχέτιση του menu με πλήκτρο του ποντικιού Δημιουργία callback για προσδιορισμό ενεργειών

Menus glutcreatemenu(demo_menu); glutaddmenuentry("quit",1); glutaddmenuentry("lala",2); glutattachmenu(glut_right_button ); void demo_menu(int id) { if(id==1) exit(0);}

Menus Δημιουργία υπο-menu Sub_menu=glutCreateMenu(size_menu); glutaddmenuentry( increase",2); glutaddmenuentry( decrease",3); glutcreatemenu(top_menu); glutaddmenuentry( quit",1); glutaddsubmenu ( Resize",sub_menu); glutattachmenu(glut_right_button);

Πρόγραμμα square.c Ζωγράφισμα τετραγώνων κάθε φορά που το ποντίκι κινείται με πατημένο το αριστερό πλήκτρο. Σχεδίαση μέσα στην callback κίνησης glutmotionfunc(motion) Χειρισμός της αλλαγής διάστασης παραθύρου glutreshapefunc(void (*func)(int x, int y)); Χειρισμός των συντεταγμένων που γυρνάει το ποντίκι.

Πολλαπλά παράθυρα id=glutcreatewindow( ); glutsetwindow(id); Κλήση της glutinitdisplaymode για αλλαγή ιδιοτήτων Κάθε παράθυρο μπορεί να έχει δικές του callback functions glutinitdisplaymode(); id=glutcreatewindow( ); Callback registration

Display lists Ομαδοποίηση/αποθήκευση εντολών για μελλοντική χρήση/επανάχρηση glnewlist(1, GL_COMPILE).. glendlist(). glcalllist(1) Σε περίπτωση μοντέλου client-server ηλίστα στέλνεται για αποθήκευση στον server-μείωση του όγκου δεδομένων στο δίκτυο. Βελτιστοποίηση του κώδικα.

Display lists Σχεδιασμός / αποθήκευση γραμματοσειράς base=glgenlists(256) for(i=0; i<256; i++){ glnewlist(base+i, GL_COMPILE); myfont(i); glendlist();}

Display lists Σχεδιασμός / αποθήκευση γραμματοσειράς gllistbase(base); char* text_string; glcalllists((glint) strlen(text_string), GL_BYTE; text_string);

Display lists GL_COMPILE_AND_EXECUTE Κατά την κλήση της λίστας τα αντικείμενα της σχεδιάζονται με βάση την τρέχουσα κατάσταση του συστήματος Σχεδίαση του ίδιου αντικειμένου σε διαφορετικές θέσεις Αλλαγή κατάστασης μέσα στη λίστα

Σωροί (stacks) Αποθήκευση μεταβλητών κατάστασης & πινάκων model-view & projection. Ανάκληση όταν απαιτηθεί glpushattrib(gl_all_attrib_bits) glpopattrib() glpushmatrix() glpopmatrix() Επιδρούν στον ενεργό πίνακα

GLUT fonts glrasterpos2i(rx,ry); glutbitmapcharacter(glut_bitmap_times_ro MAN_10, k); H glutbitmapcharacter μετακινεί αυτόματα το raster position στην θέση για το επόμενο γράμμα. glutbitmapwidth(glut_bitmap_times_roma N_10, k); glutstrokecharacter(glut_stroke_mono_rom an, k);

Γραφικά με κίνηση Επίδειξη περιστρεφόμενου τετραγώνου (cosθ, sinθ), (-cosθ, -sinθ), (- sinθ, cosθ), (sinθ, -cosθ): σχηματίζουν τετράγωνο πάνω σε μοναδιαίο κύκλο.

void display(){ glclear(gl_color_buffer_bit); glbegin(gl_polygon); thetar=theta/((2*3.141)/360.0); glvertex2f(cos(thetar), sin(thetar)); glend();} Αλλαγή θ: περιστροφή του τετραγώνου Περιστροφή τετραγώνου όταν δεν συμβαίνει κάτι

glutidlefunc(idle); void idle(){ theta+=2; if(theta>=360.0) theta-=360.0; glutpostredisplay();} glutmousefunc(mouse); void mouse(int button, int state, int x, int y){ if(button==glut_left_button&& state==glut_down) glutidlefunc(idle); if(button==glut_midle_button&& state==glut_down) glutidlefunc(null);}

Double buffering Ο frame buffer απεικονίζεται στην οθόνη ανά τακτά χρονικά διαστήματα (refresh rate). Προβλήματα όταν: Αλλάζουμε τον frame buffer καθώς γίνεται ξαναζωγράφισμα (refresh) της οθόνης Η αλλαγή διαρκεί πιο πολύ από ένα κύκλο Χρήση δύο buffers: front/back buffer. Επιδεικνύεται ο front buffer, ζωγραφίζουμε στον back buffer

Double Buffering Μόλις είμαστε έτοιμοι αλλάζουμε τους buffers glutswapbuffers(): οι buffers εναλλάσσονται στον επόμενο κύκλο refresh. glutinitdisplaymode(glut_rgb GLUT_ DOUBLE) To double buffering δεν επιταχύνει τη διαδικασία ζωγραφίσματος. single_double.c

Double Buffering Επιλογή του buffer όπου θα γίνει το ζωγράφισμα gldrawbuffer(gl_back) (default) gldrawbuffer(gl_front_and_back)

Logic Operations Εξ ορισμού οι εντολές ζωγραφίσματος αντικαθιστούν τα αντίστοιχα pixels του framebuffer. Αντί αυτού μπορούμε να έχουμε γράψιμο που συνδυάζει με λογικές πράξεις την νέα (source) με την τρέχουσα (destination) τιμή ενός pixel για να παραχθεί η νέα τιμή

Logic Operations glenable(gl_color_logic_op); gllogicop(gl_xor);

Logic Operations Οι λογικές πράξεις γίνονται σε κάθε bit χωριστά). Writing modes: 16 XOR mode: d =d XOR s d XOR s= (d XOR s) XOR s=d Για να σβήσουμε κάτι που έχουμε ζωγραφίσει με XOR mode απλά το ξαναζωγραφίζουμε.

Rubberbanding Globals: xm,ym,xmm,ymm void mouse(int btn, int state, int x, inty){ if(btn==glut_left_button && state==glut_down){ xm=x; ym=(500-y); gllogicop(gl_xor); first=0;}

Rubberbanding If(btn==GLUT_LEFT_BUTTON && state==glut_up){ glrectf(xm, ym, xmm, ymm); //σβησιμο gllogicop(gl_copy); xmm=x; ymm=500-y; glrectf(xm, ym, xmm, ymm);} //τελικό //γράψιμο }

Rubberbanding void move(int x, int y){ if(first==1){ glrectf(xm, ym, xmm, ymm);}//σβησιμο xmm=x; ymm=500-y; glrectf(xm, ym, xmm, ymm); //γράψιμο first=1;}

Logic Operations Τα χρώματα που παίρνουμε με XOR mode εξαρτώνται από το τρέχων χρώμα του buffer. (11111111 11111111 11111111) XOR (00000000 00000000 11111111)= (11111111 11111111 00000000)