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

Σχετικά έγγραφα
Εισαγωγή στην OpenGL: μέρος 2ο

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

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

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

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

Γραφικά υπολογιστών Εργαστήριο 10 Εισαγωγή στα Sprites

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

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

Προγραμματισμός. Το περιβάλλον του scratch

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

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

ΟΔΗΓΙΕΣ ΕΓΚΑΤΑΣΤΑΣΗΣ ΓΡΑΜΜΑΤΕΙΑΚΗΣ ΕΦΑΡΜΟΓΗΣ ESCHOOL

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

3ο σετ σημειώσεων - Πίνακες, συμβολοσειρές, συναρτήσεις

Εργαστήριο Γραφικών. Βοηθητικό Υλικό για την εκπόνηση των εργασιών Αφορά την 1 η Εργαστηριακή Άσκηση

Το σκηνικό μας είναι πλέον έτοιμο για εισάγουμε τα υπόλοιπα αντικείμενα του έργου μας.

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

ΟΔΗΓΙΕΣ ΕΓΚΑΤΑΣΤΑΣΗΣ & ΧΡΗΣΗΣ ΟΛΟΚΛΗΡΩΜΕΝΟΥ ΠΕΡΙΒΑΛΛΟΝΤΟΣ ΑΝΑΠΤΥΞΗΣ BloodShed Dev-C++

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

Εισ. Στην ΠΛΗΡΟΦΟΡΙΚΗ. Διάλεξη 4 η. Βασίλης Στεφανής

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

Ας μετονομάσουμε τη γάτα που εμφανίζεται μόλις ανοίγουμε το Scratch. Επιλέγουμε το εικονίδιο Μορφή1 που βρίσκεται στη λίστα αντικειμένων.

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

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

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

Movie Maker (Δημιουργία βίντεο)

Περιεχόμενα. Κεφάλαιο 1 Γνωριμία με το Excel...9

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

Εργαστήριο 2ο. Περίγραμμα Εργαστηριακής Άσκησης

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

Συνοπτικό εγχειρίδιο χρήσης του Microsoft Visual Studio 2010

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

Οδηγίες για την εγκατάσταση του πακέτου Cygwin

Κεφ. 5 Γνωριμία με το Λογισμικό του Υπολογιστή - σελ 34-38

Σχολ.έτος Κεφάλαιο 5 ο Γνωριμία με το Λογισμικό του Υπολογιστή.

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

Ταυτότητα εκπαιδευτικού σεναρίου

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

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

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

Ευ ομή. Εγχειρίδιο χρήσης του περιβάλλοντος LT125-dp

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

Εγχειρίδιο Εγκατάστασης και Χρήσης Εκπαιδευτικής Εφαρμογής

ΟΔΗΓΟΣ ΔΗΜΙΟΥΡΓΙΑΣ ΤΡΙΣΔΙΑΣΤΑΤΩΝ ΓΡΑΦΙΚΩΝ ΜΕ ΧΡΗΣΗ ΤΗΣ ΕΦΑΡΜΟΓΗΣ POVRAY MODELER ΣΤΟ LINUX

Προγραμματισμο ς σε Arduino

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

Περιεχόμενα. Κεφάλαιο 1 Εισαγωγή στο PowerPoint...9. Κεφάλαιο 2 Εργασία με κείμενο... 39

Windows 8 2_windows8.indd 39 10/5/2014 2:10:10 μμ 10/5/2014 2:10:10

ΕΓΧΕΙΡΙ ΙΟ ΧΡΗΣΗΣ ΛΟΓΙΣΜΙΚΟΥ E-LEARNING - 2 -

ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ ΜΟΝΑΔΑ ΑΡΙΣΤΕΙΑΣ ΕΛ/ΛΑΚ

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

Φώτα - Εκτύπωση Αποθήκευση εικόνας

ΣΗΜΕΙΩΣΕΙΣ. στη γλώσσα προγραμματισμού. Γκέτσιος Βασίλειος

Γεωργάκης Αριστείδης ΠΕ20

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

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

Τύποι δεδομένων, τελεστές, μεταβλητές

Περιεχόμενα. Κεφάλαιο 1 Γνωριμία με το Excel... 9

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ

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

Οδηγίες Χρήσης Εφαρμογής

Εμφανίζονται 3 επιλογές με 3 εικονίδια, η «ζωγραφική», η «εισαγωγή» και η «κάμερα».

Ενημερώσεις λογισμικού Οδηγός χρήσης

Οδηγός ρυθμίσεων Wi-Fi

ΟΔΗΓΙΕΣ ΓΙΑ ΤΗΝ ΥΠΗΡΕΣΙΑ COSMOTE TV GO ΣΕ ΥΠΟΛΟΓΙΣΤΗ (PC/LAPTOP)

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

ΕΝΟΤΗΤΑ 3 ΕΚΦΡΑΣΕΙΣ, ΑΝΑΜΟΝΕΣ (DELAYS), ΗΧΟΙ

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

Microsoft Excel Κεφάλαιο 1. Εισαγωγή. Βιβλίο εργασίας

Μεταβλητές τύπου χαρακτήρα

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

Οδηγός ξεκινήματος. έκδοση 2.0.

Η συσκευή υποστηρίζει την αποστολή/λήψη μηνυμάτων. Πιέστε το πλήκτρο μηνυμάτων για να γράψετε ένα νέο. Επιλέξτε Μενού Μήνυμα Γράψε Μήνυμα στην

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

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

ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ Σύντομη εισαγωγή στο εργαστήριο

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

Οδηγίες για την Άσκηση 1

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

Τα στοιχεία του παιχνιδιού : Σκηνικό

Παραδείγματα Δεδομένων: Οι τιμές στο κυλικείο, μια λίστα από ονόματα, τα σήματα της τροχαίας.

Οδηγός χρήσης. EurobankTrader

Σύντομη περιγραφή 5. Για να ξεκινήσετε 6. Οι οθόνες του προγράμματος 8. Εγκατάσταση προγράμματος 6 Δημιουργία κωδικών χρήστη 7

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

21. ΦΥΛΛΟ ΕΡΓΑΣΙΑΣ 4 - ΔΗΜΙΟΥΡΓΩΝΤΑΣ ΜΕ ΤΟ BYOB BYOB. Αλγόριθμος Διαδικασία Παράμετροι

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

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

ΟΔΗΓΙΕΣ ΓΙΑ ΤΗΝ ΥΠΗΡΕΣΙΑ COSMOTE TV GO ΣΕ ΥΠΟΛΟΓΙΣΤΗ (PC/LAPTOP)

3D FLASH ANIMATOR (3DFA)

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

7.Α.1 Παρουσιάσεις. 7.Α.2 Περιγραφή περιεχομένων της εφαρμογής

Ενημερώσεις λογισμικού Οδηγός χρήσης

Οδηγίες για τη Χρήση του Google Drive

Τα Windows Πολύ Απλά και Πολύ Σύντομα

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

Οδηγός Εγκατάστασης

Διαδικασία σύνδεσης στην εφαρμογή TAVL

ΜΑΘΗΜΑ 3 ΛΟΓΙΣΜΙΚΟ (SOFTWARE)

Σενάριο 18: Ραβδογράμματα Πληθυσμού

Transcript:

Εισαγωγή στην OpenGL: μέρος 1ο Τι είναι η OpenGL Η OpenGL είναι ένα σύνολο εντολών (Application Programming Interface API) που μας επιτρέπει την δημιουργία τριδιάστατων γραφικών. Δεν είναι γλώσσα προγραμματισμού αλλά μπορεί να χρησιμοποιηθεί με μια πληθώρα γλωσσών προγραμματισμού (C, C++, Java και άλλες) και σε μια πληθώρα λειτουργικών συστημάτων (Windows, Unix, Linux, Mac OS). Προσφέρει πάνω από 300 εντολές για δημιουργία γραφικών και δρα σαν ένα ενδιάμεσο στρώμα ανάμεσα στην εφαρμογή και στη κάρτα γραφικών που θα αναλάβει τα απεικονίσει τα γραφικά στην οθόνη, κρύβοντας λεπτομέρειες υλοποίησης του υλικού και των οδηγών του. Προγράμματα που χρησιμοποιούν OpenGL μπορούν να τρέξουν και χωρίς επιταχυντή γραφικών (3D graphics card), θα είναι όμως πολύ πιο αργά και πιθανώς να μην υποστηρίζουν όλες τις λειτουργίες της OpenGL. Η OpenGL είναι το πρώτο ευρέως διαδεδομένο API για γραφικά και υπάρχει σαν στάνταρντ από το 1992. Άλλο ευρέως διαδεδομένο API γραφικών είναι το DirectX της Microsoft το οποίο είναι γραμμένο αποκλειστικά για πλατφόρμες Windows και Xbox/Xbox360. OpenGL graphics pipeline Ας δούμε σχηματικά τα βήματα που κάνει η OpenGL από την στιγμή που πάρει τις εντολές γραφικών από την εφαρμογή μας μέχρι την στιγμή δημιουργίας της τελικής εικόνας (rendered image).

H OpenGL χρησιμοποιεί μια μηχανή καταστάσεων (state machine) για να επικοινωνεί με την εφαρμογή. Σε αυτή την μηχανή καταστάσεων η OpenGL παραμένει διαρκώς σε μια κατάσταση μέχρι να αλλάξει η εφαρμογή την κατάσταση. Παράδειγμα αν θέσουμε το χρώμα που θα χρησιμοποιεί η OpenGL για να ζωγραφίσει ένα μοντέλο, το χρώμα θα παραμείνει στη μνήμη και θα χρησιμοποιείται μέχρι να το αλλάξουμε ή να κλείσουμε την εφαρμογή. Εφόσον λοιπόν η εφαρμογή καθορίσει το περιβάλλον που θα χρησιμοποιήσει η OpenGL για να απεικονίσει το μοντέλο μας (χρώματα, υφές, πηγές φωτός, κάμερα κλπ), περνάει στο πρώτο στάδιο κατά το οποίο θα μετασχηματίσει και θα φωτίσει (transform and lighting) τα σημεία(vertices) του μοντέλου. Στην συνέχεια η OpenGL περνά στο στάδιο της ψηφιοποίησης το οποίο λαμβάνει όλες τις πληροφορίες και την γεωμετρία από το προηγούμενο στάδιο (του μετασχηματισμού) και παράγει την τελική, ψηφιακή, εικόνα. Η εικόνα αντιγράφεται στην μνήμη του frame buffer και φτάνει έτσι στην οθόνη του υπολογιστή. Αυτή η ακολουθία βημάτων που ακολουθεί η OpenGL για να απεικονίσει το μοντέλο λέγεται graphics pipeline (διασωλήνωση) Τι είναι το GLUT Η OpenGL όπως είπαμε είναι ένας γρήγορος και ευέλικτος τρόπος να επικοινωνούμε με το hardware γραφικών του υπολογιστή χωρίς να ενδιαφερόμαστε για τις λεπτομέρειες υλοποίησης του. Όμως δεν προσφέρει καθόλου λειτουργίες GUI (Graphical User Interface), δηλαδή δεν έχει την δυνατότητα να ανοίξει και να κλείσει παράθυρα στο λειτουργικό σύστημα, να ζωγραφίσει σε αυτά, ούτε να καταλάβει το πάτημα ενός πλήκτρου ή την κίνηση του ποντικιού, ούτε μπορεί να διαβάσει ένα αρχείο από το δίσκο. Αυτό έγινε επί σκοπού, μιας και η OpenGL σχεδιάστηκε να τρέχει σε πολλά λειτουργικά συστήματα τα οποία έχουν το δικό τους τρόπους επικοινωνίας με την οθόνη, το ποντίκι, το δίσκο, το πληκτρολόγιο. Για να γίνει αυτό θα πρέπει να χρησιμοποιήσουμε απευθείας τις εντολές του λειτουργικού μας συστήματος (Win32 εντολές στην περίπτωση των Windows). Εναλλακτικά μπορούμε να χρησιμοποιήσουμε μια από τις έτοιμες βιβλιοθήκες εντολών που υπάρχουν και που θα κάνουν αυτές τις λειτουργίες για εμάς εύκολα. Μια από τις πιο διαδεδομένες βιβλιοθήκες για αυτό το σκοπό είναι το GLUT (OpenGL Utility Toolkit) το οποίο είναι και αυτό σχεδιασμένο να τρέχει σε πολλά λειτουργικά συστήματα.

Το GLUT προσφέρει ένα σύνολο εντολών που αναλαμβάνουν να ανοίξουν και να κλείσουν εύκολα παράθυρα, να καταγράψουν το πάτημα ενός πλήκτρου ή την κίνηση του ποντικιού. Δεν είναι κατάλληλο να γράψουμε μια κανονική εφαρμογή με αυτό (πχ ένα παιχνίδι) όμως είναι πολύ κατάλληλο για εκπαιδευτικές και πρότυπες εφαρμογές. Μορφή εντολών OpenGL/GLUT Η OpenGL χρησιμοποιεί μια απλή, στάνταρντ, μορφή ονοματολογίας για τις εντολές της. Όλες οι εντολές της έχουν μορφή παρόμοια με: Οι εντολές του GLUT δεν έχουν κάποιο ιδιαίτερο χαρακτηριστικό εκτός του ότι κάθε εντολή ξεκινά με το πρόθεμα glut: glutinitwindowsize(width, Height); Τύποι δεδομένων OpenGL Χάριν ομοιομορφίας, και για να μπορέσει να υποστηρίξει διαφορετικές πλατφόρμες, η OpenGL ορίζει μια σειρά από τύπους δεδομένων οι κυριότεροι των οποίων φαίνονται στο παρακάτω πίνακα: Τύπος δεδομένων Αντιστοιχία με τύπο Ορίζεται ως OpenGL δεδομένων στη C Επίθεμα GLbyte Ακέραιος 8-bit signed char b GLshort Ακέραιος 16-bit short s GLint Ακέραιος 32-bit int i Κινητής υποδιαστολής GLdouble 64-bit double d GLubyte Θετικός ακέραιος 8-bit unsigned char ub GLushort Θετικός ακέραιος 16-bit unsigned short us GLuint Θετικός ακέραιος 32-bit unsigned int ui GLchar Χαρακτήρας 8-bit char - Κινητής υποδιαστολής GLfloat 32-bit float f GLboolean Θετικός ακέραιος 8-bit unsigned char H OpenGL εγγυάται ότι για παράδειγμα ένας GLShort αριθμός θα έχει εύρος 16-bit ανεξάρτητα αν το λειτουργικό σύστημα είναι Windows, Unix ή κάποιο άλλο. Το επίθεμα είναι το γράμμα που βρίσκουμε στο τέλος μιας OpenGL εντολής και που δείχνει τον τύπο δεδομένων των παραμέτρων. Γνωριμία με την OpenGL

Στην πρώτη εργαστηριακή άσκηση θα γνωρίσουμε το περιβάλλον ανάπτυξης που θα χρησιμοποιήσουμε για την εισαγωγή στην OpenGL και θα μελετήσουμε τον τρόπο λειτουργίας ενός απλού προγράμματος που χρησιμοποιεί την OpenGL και το GLUT για να ζωγραφίσει ένα αντικείμενο στην οθόνη. Περιγραφή εφαρμογής Όλο το πρόγραμμα βρίσκεται μέσα στο αρχείο main.cpp. Ξεκινώντας με την συνάρτηση main που είναι και η είσοδος της εφαρμογής πρέπει να αρχικοποιήσουμε το Glut καλώντας τις συναρτήσεις glutinit(&argc, argv); glutinitdisplaymode(glut_double GLUT_RGBA); Η glutinitdisplaymode() δέχεται μια πληθώρα επιλογών για την αρχικοποίηση της OpenGL που είναι πέρα από τους σκοπούς του πρώτου εργαστηρίου να εξετάσουμε. Στην συγκεκριμένη περίπτωση απλά επιλέγουμε το μοντέλο χρώματος που θα χρησιμοποιήσουμε (Red Green Blue και διαφάνεια) και ότι θα χρησιμοποιήσουμε διπλό buffer για την απεικόνιση. Η χρήση διπλού buffer (double buffering) κατά την απεικόνιση μιας σκηνής είναι μια βασική μέθοδος αποφυγής «τρεμοπαίγματος»(flickering). Ο τρόπος με τον οποίο δουλεύει είναι ορίζοντας 2 ενδιάμεσες περιοχές στην μνήμη (buffers) στις οποίες αποθηκεύουμε τις εικόνες που δημιουργούμε. Όσο η οθόνη παίρνει (απεικονίζει) την εικόνα από τον έναν buffer εμείς ζωγραφίζουμε την σκηνή στον άλλον. Έπειτα ανταλλάσουμε τους ρόλους των buffer και συνεχίζουμε. Έτσι η οθόνη δείχνει πάντα μια ολοκληρωμένη εικόνα της σκηνής. Στην συνέχεια δημιουργούμε το παράθυρο που θα απεικονίσουμε την τελική εικόνα με το σετ εντολών: glutinitwindowsize(800, 600); glutinitwindowposition(150,150); glutcreatewindow("computer Graphics - Lab 1"); Το παράθυρο θα έχει μέγεθος 800 600 pixels, θα τοποθετηθεί 150,150 pixels από την πάνω αριστερή γωνία της οθόνης και το τίτλο που δηλώσαμε. Το παρακάτω σετ εντολών μας δίνουν μια ιδέα για το πώς δουλεύει ουσιαστικά το GLUT: glutdisplayfunc(renderscene); glutkeyboardfunc(κeypressfunc); glutidlefunc(renderscene); Οι εντολές αυτές καθορίζουν τι θα συμβεί σε περίπτωση όταν λάβει χώρα ένα γεγονός που μας ενδιαφέρει και που θέλουμε να επεξεργαστούμε. Τέτοια συμβάντα είναι για παράδειγμα το πάτημα ενός πλήκτρου, η κίνηση του ποντικιού, η εντολή να επανασχεδιάσουμε το παράθυρο λόγω μετακίνησης του. Το GLUT μας δίνει την δυνατότητα να ορίσουμε τι θέλουμε να γίνεται όταν λαμβάνει χώρα ένα τέτοιο γεγονός μέσω μια σειράς εντολών της μορφής: Glut_OnomaEntolis_Func(συνάρτηση που θα καλείται);

Στην εφαρμογή ενδιαφερόμαστε για 3 γεγονότα, όταν πατηθεί κάποιο πλήκτρο, όταν δοθεί εντολή να επανασχεδιαστεί το παράθυρο και όταν το GLUT δεν κάνει τίποτα (είναι δηλαδή idle). Αυτή η στιγμή είναι κατάλληλη για να σχεδιάσουμε το αντικείμενο στην οθόνη. Το GLUT μας επιτρέπει να ορίσουμε συναρτήσεις που θα εξυπηρετούν διάφορα συμβάντα. Αυτός είναι και ο μόνος τρόπος να προσθέσουμε λειτουργικότητα σε μια GLUT εφαρμογή. Στην συνέχεια καλούμε την συνάρτηση init(); που στην συνέχεια θα καλέσει εντολές της OpenGL και θα κάνει αρχικοποιήσεις που χρειάζεται να γίνουν μόνο μια φορά. Από αυτές τις εντολές προς το παρόν μας ενδιαφέρουν μόνο οι glclearcolor(0.0f, 0.0f, 0.0f, 1.0f); glcolor3f(1.0f, 1.0f, 0.0f); Η πρώτη καθορίζει το χρώμα στο οποίο θα καθαρίζουμε (clear) το παράθυρο (όταν δοθεί η εντολή). Το χρώμα καθαρισμού δεν είναι ανάγκη να είναι μαύρο, μπορεί να είναι οτιδήποτε. Η δεύτερη καθορίζει το χρώμα με το οποίο θα «βάψουμε» το αντικείμενο όταν το θα το ζωγραφίσουμε την οθόνη. Το ότι θέτουμε το χρώμα καθαρισμού και χρωματισμού του αντικειμένου μία φορά κατά την αρχικοποίηση της εφαρμογής είναι ένα καλό παράδειγμα λειτουργίας της OpenGL ως μηχανή καταστάσεων (state machine) μια τιμή που θέτουμε διατηρείται μέχρι να την ξαναλλάξουμε. Τέλος καλούμε την συνάρτηση που θα αρχίσει το κυρίως loop της εφαρμογής. glutmainloop(); Από αυτό το loop η εφαρμογή θα βγει μόνο όταν κλείσουμε το παράθυρο ή την εφαρμογή. Στο μεταξύ το GLUT θα τρέχει αυτό το loop ακούγοντας για διάφορα γεγονότα (όπως είσοδο από πληκτρολόγιο, κίνηση ποντικιού, κίνηση joystick) και ανάλογα με το αν έχουμε δηλώσει κάποια συνάρτηση για κάποιο συμβάν ( με την χρήση της glutxxxxxfunc() ) την καλεί για να το εξυπηρετήσει. Μια τέτοια συνάρτηση είναι και η void κeypressfunc(unsigned char key, int x, int y) To GLUT θα καλέσει την συνάρτηση αυτή όταν πατηθεί κάποιο πλήκτρο. Στην συνάρτηση ελέγχουμε αν έχει πατηθεί το πλήκτρο ESC και αν ναι τερματίζουμε την εφαρμογή. Η συνάρτηση που θα ζωγραφίσει το αντικείμενο στην οθόνη είναι η renderscene(void);

Η συνάρτηση αυτή αρχικά καθαρίζει το τρέχον buffer στο χρώμα το οποίο θέσαμε στην init() με την εντολή glclearcolor(). Στην συνέχεια καλεί μια εντολή GLUT για να ζωγραφίσει το αντικείμενο στον buffer. glutsolidteapot(15.0); με μέγεθος 15. Η εντολή αυτή καλεί πολλές OpenGL εντολές για να δημιουργήσει και να απεικονίσει το μοντέλο της τσαγιέρας. To GLUT προσφέρει και άλλες εντολές που δημιουργούν μοντέλα όπως< glutsolidcube(), glutsolidcone(), glutsolidtetrahedron(). Στο τέλος καλεί την εντολή glutswapbuffers(); η οποία θα αντικαθιστά τον buffer που χρησιμοποιεί η οθόνη με αυτόν που περιέχει το αντικείμενο που μόλις ζωγραφίσαμε. Για να δείτε το double buffering σε λειτουργία δοκιμάστε να σβήσετε αυτή την εντολή και να αντικαταστήστε την παράμετρο GLUT_DOUBLE με GLUT_SINGLE στην εντολή glutinitdisplaymode(). Η έξοδος του προγράμματος θα πρέπει να είναι η παρακάτω, μια κίτρινη τσαγιέρα: Κώδικας παραδείγματος Για να τρέξετε το κώδικα του παραδείγματος πρέπει να εγκαταστήσετε το περιβάλλον ανάπτυξης Dev-C++ 5.0 beta 9.2 (4.9.9.2) (9.0 MB) with Mingw/GCC 3.4.2 και στην συνέχεια να το παραμετροποίησετε ώς εξής: 1. Τρέξτε το Dev-Cpp που μόλις εγκαταστήσατε και μόλις ξεκινήσει, από το μενού Tools, επιλέξτε Check for Updates/Packages. 2. Στο Select devpack server επιλέξτε devpack.org και πατήστε το Check for Updates κάτω αριστερά

3. Σαν Group επιλέξτε OpenGL 4. Από την λίστα που θα εμφανιστεί επιλέξτε να εγκαταστήσετε το πακέτο freeglut Στην συνέχεια αποσυμπιέστε να αρχεία lab1.zip και shared.zip σε αντίστοιχα folder (με ονόματα dev-cpp/lab1 και dev-cpp/shared δηλαδή), και ανοίξτε το αρχείο lab1.dev του καταλόγου lab1. Αν όλα πήγαν καλά, με F9 ο κώδικας πρέπει να εκτελεστεί και να δείτε το παράθυρο της εφαρμογής με την τσαγιέρα. Με μικρές αλλαγές ο κώδικας μπορεί να τρέξει σε οποιοδήποτε περιβάλλον προγραμματισμού C/C++ διαθετετε. Πηγή Εισαγωγή στην OpenGL: μέρος 1ο