opengl
ΑΣΚΗΣΕΙΣ ΠΙΣΤΟΠΟΙΗΣΗΣ
1. Ποια η λειτουργία των παρακάτω εντολών στην OpenGL και τι παραμέτρους δέχονται; Να δοθεί παράδειγμα.α) glutInitWindowPosition β) glutInitWindowSize γ) glutCreateWindow.
ΑΠΑΝΤΗΣΗ.
glutInitWindowPosition και Το glutInitWindowSize ορίζει την αρχική θέση και το μέγεθος του παραθύρου αντίστοιχα.
Χρήση
άκυρη glutInitWindowSize (int πλάτος, int ύψος); άκυρη glutInitWindowPosition (int x, int y);
- πλάτος
- Πλάτος σε εικονοστοιχεία.
- ύψος
- Ύψος σε εικονοστοιχεία.
- Χ
- Θέση παραθύρου X σε εικονοστοιχεία.
- y
- Τοποθεσία παραθύρου Y σε εικονοστοιχεία.
- Τα Windows που δημιουργήθηκαν από το glutCreateWindow θα ζητηθούν να δημιουργηθούν με την τρέχουσα αρχική θέση και μέγεθος του παραθύρου .
Η αρχική τιμή της αρχικής κατάστασης GLUT της θέσης παραθύρου είναι -1 και -1. Αν η συνιστώσα X ή Y στην αρχική θέση του παραθύρου είναι αρνητική, η πραγματική θέση του παραθύρου αφήνεται στο σύστημα παράθυρου για να προσδιοριστεί. Η αρχική τιμή της αρχικής κατάστασης GLUT του μεγέθους παραθύρου είναι 300 με 300. Τα στοιχεία του αρχικού μεγέθους παραθύρου πρέπει να είναι μεγαλύτερα από το μηδέν.
Η πρόθεση των αρχικών τιμών θέσης παραθύρου και μεγέθους είναι να παρέχει μια πρόταση στο σύστημα παραθύρων για το αρχικό μέγεθος και θέση ενός παραθύρου. Το σύστημα παραθύρων δεν είναι υποχρεωμένο να χρησιμοποιεί αυτές τις πληροφορίες. Επομένως, τα προγράμματα GLUT δεν πρέπει να υποθέσουν ότι το παράθυρο δημιουργήθηκε στο καθορισμένο μέγεθος ή θέση. Ένα πρόγραμμα GLUT θα πρέπει να χρησιμοποιήσει την επανάληψη της ανάκλησης του παραθύρου για να προσδιορίσει το πραγματικό μέγεθος του παραθύρου. - 2.
- Εξετάστε την ισχύ των παρακάτω προτάσεων δηλώνοντας ΣΩΣΤΟ ή ΛΑΘΟΣ και εξηγώντας την επιλογή σας (Όπου κρίνετε απαραίτητο, παραθέστε παράδειγμα).
- α) 1. Τα επικρατέστερα Λειτουργικά Συστήματα (Windows, Unix, Linux, Mac OS) υποστηρίζουν την OpenGL. ΣΩΣΤΟ
- β) Η OpenGL μπορεί αποκλειστικά να κληθεί (is callable) από τις γλώσσες προγραμματισμού C / C++ (δηλαδή υπάρχει μοναδικό language binding). ΛΑΘΟΣ
- γ) Το μοναδικό περιβάλλον ανάπτυξης προγραμμάτων OpenGL είναι το DEV C++. ΛΑΘΟΣ
- δ) Η OpenGL περιέχει εντολές επιλογής (τύπου If ... else). ΣΩΣΤΟ
- ε) Οι εντολές της OpenGL ξεκινούν με το πρόθεμα gl. ΣΩΣΤΟ
4.. Αναφέρατε τι ονομάζουμε GLUT στην OpenGL. Για ποιο λόγο δημιουργήθηκε και ποιες βασικές λειτουργίες προσφέρει;
ΑΠΑΝΤΗΣΗ
5.
Περιγράψτε τις βασικές εντολέςτης OpenGL που περιέχουν εντολές σχεδίασης, γραφικών και απόδοσης.
6.Αναφέρετε την λειτουργία της glutMainLoop() στην OpenGL. Σε ποιο σημείο πρέπει να καλείται;
Στην παράγραφο αυτή παρουσιάζουµε και περιγράφουµε συνοπτικά τη δοµή ενός τυπικού προγράµµατος
που βασίζεται στο πρότυπο της OpenGL.
#include
9.Περιγράψτε τρεις βασικές βιβλιοθήκες εντολών της OpenGL που περιέχουν εντολές σχεδίασης, γραφικών και απόδοσης. Σε ποιο σημείο του προγράμματος δηλώνονται;
α) Βασική βιβλιοθήκη (OpenGL core library):
H βασική βιβλιοθήκη της OpenGL περιέχει τις κύριες εντολές σχεδίασης. Ολες οι εντολές της
βιβλιοθήκης αυτής διακρίνονται από το πρόθεµα gl . Πολλές από τις συναρτήσεις της δέχονται
προκαθορισµένα ορίσµατα (συµβολικές σταθερές) τα οποία έχουν οριστεί στη βιβλιοθήκη και αντιστοιχούν
σε διάφορες παραµέτρους ή καταστάσεις λειτουργίας. Κατά σύµβαση, οι σταθερές αυτές ξεκινούν µε το
πρόθεµα GL_ .
β) OpenGL Utility Library (GLU):
Περιλαµβάνει συναρτήσεις που εκτελούν σύνθετους αλγορίθµους όπως π.χ. τον καθορισµό µητρώων
προβολής και το σχηµατισµό σύνθετων καµπυλών και επιφανειών. Κάθε υλοποίηση της OpenGL
εµπεριέχει τη βιβλιοθήκη GLU. Όλες οι εντολές της βιβλιοθήκης GLU ξεκινούν µε το πρόθεµα glu.
γ) OpenGL Utility Toolkit (GLUT):
Όπως αναφέραµε το πρότυπο της OpenGL είναι ανεξάρτητο πλατφόρµας. Ωστόσο µια αυτονόητη απαίτηση
ενός προγραµµατιστή είναι να έχει τη δυνατότητα να δει το αποτέλεσµα των προγραµµάτων του αλλά και
να έχει δηλαδή τη δυνατότητα αλληλεπίδρασης µε αυτό. Χρειάζεται δηλαδή εντολές εισόδου-εξόδου.
Ωστόσο οι εντολές αλληλεπίδρασης δεν είναι ανεξάρτητες πλατφόρµας και για το λόγο αυτό οι
προγραµµατιστές σε OpenGL χρησιµοποιούν µία ακόµη βιβλιοθήκη που τους προσφέρει εντολές εισόδουεξόδου. Μία από τις βιβλιοθήκες που προσφέρει τη λειτουργικότητα αυτή είναι το OpenGL Utility Toolkit
(GLUT). Η βιβλιοθήκη αυτή περιλαµβάνει εντολές απεικόνισης παραθύρων στην οθόνη, δηµιουργίας
menus, διαχείρισης γεγονότων κλπ. Όλες οι εντολές της ξεκινούν µε το πρόθεµα glut.
10.Ποιες βασικές λειτουργίες υποστηρίζει η OPENGL;
Λειτουργίες της GLU:
Αρχικοποίηση Χειρισμός εικόνων για χρήση σε υφή Μετασχηματισμός σημείων 2.4 Tessellating πολύγωνων Χρήση λειτουργιών επανάκλησης Χρησιμοποιώντας ψηφιδωτά(Tessellation) αντικείμενα Καθορισμός επανακλήσεων Καθορισμός του πολύγωνου ως ψηφιδωτό(Tessellated) Απόδοση απλών επιφάνειων Χρησιμοποιώντας NURBS καμπύλες και επιφάνειες Χειρισμός σφαλμάτων
11. Τι είναι η OpenGL
Η OpenGL είναι ένα σύνολο εντολών (Application Programming Interface – API) που μας επιτρέπει την δημιουργία τριδιάστατων γραφικών. Δεν είναι γλώσσα προγραμματισμού αλλά μπορεί να χρησιμοποιηθεί με μια πληθώρα γλωσσών προγραμματισμού (C, C++, Java και άλλες) και σε μια πληθώρα λειτουργικών συστημάτων (Windows, Unix, Linux, Mac OS). Προσφέρει πάνω από 300 εντολές για δημιουργία γραφικών και δρα σαν ένα ενδιάμεσο στρώμα ανάμεσα στην εφαρμογή και στη κάρτα γραφικών που θα αναλάβει τα απεικονίσει τα γραφικά στην οθόνη, κρύβοντας λεπτομέρειες υλοποίησης του υλικού και των οδηγών του.
12.
TI είναι το OpenGL graphics pipeline
Ας δούμε σχηματικά τα βήματα που κάνει η OpenGL από την στιγμή που πάρει τις εντολές γραφικών από την εφαρμογή μας μέχρι την στιγμή δημιουργίας της τελικής εικόνας (rendered image). H OpenGL χρησιμοποιεί μια μηχανή καταστάσεων (state machine) για να επικοινωνεί με την εφαρμογή. Σε αυτή την μηχανή καταστάσεων η OpenGL παραμένει διαρκώς σε μια κατάσταση μέχρι να αλλάξει η εφαρμογή την κατάσταση. Παράδειγμα αν θέσουμε το χρώμα που θα χρησιμοποιεί η OpenGL για να ζωγραφίσει ένα μοντέλο, το χρώμα θα παραμείνει στη μνήμη και θα χρησιμοποιείται μέχρι να το αλλάξουμε ή να κλείσουμε την εφαρμογή. Εφόσον λοιπόν η εφαρμογή καθορίσει το περιβάλλον που θα χρησιμοποιήσει η OpenGL για να απεικονίσει το μοντέλο μας (χρώματα, υφές, πηγές φωτός, κάμερα κλπ), περνάει στο πρώτο στάδιο κατά το οποίο θα μετασχηματίσει και θα φωτίσει (transform and lighting) τα σημεία(vertices) του μοντέλου. Στην συνέχεια η OpenGL περνά στο στάδιο της ψηφιοποίησης το οποίο λαμβάνει όλες τις πληροφορίες και την γεωμετρία από το προηγούμενο στάδιο (του μετασχηματισμού) και παράγει την τελική, ψηφιακή, εικόνα. Η εικόνα αντιγράφεται στην μνήμη του frame buffer και φτάνει έτσι στην οθόνη του υπολογιστή. Αυτή η ακολουθία βημάτων που ακολουθεί η OpenGL για να απεικονίσει το μοντέλο λέγεται graphics pipeline (διασωλήνωση)
13.Τι είναι το GLUT
Η OpenGL όπως είπαμε είναι ένας γρήγορος και ευέλικτος τρόπος να επικοινωνούμε με το hardware γραφικών του υπολογιστή χωρίς να ενδιαφερόμαστε για τις λεπτομέρειες υλοποίησης του. Όμως δεν προσφέρει καθόλου λειτουργίες GUI (Graphical User Interface), δηλαδή δεν έχει την δυνατότητα να ανοίξει και να κλείσει παράθυρα στο λειτουργικό σύστημα, να ζωγραφίσει σε αυτά, ούτε να καταλάβει το πάτημα ενός πλήκτρου ή την κίνηση του ποντικιού, ούτε μπορεί να διαβάσει ένα αρχείο από το δίσκο. Αυτό έγινε επί σκοπού, μιας και η OpenGL σχεδιάστηκε να τρέχει σε πολλά λειτουργικά συστήματα τα οποία έχουν το δικό τους τρόπους επικοινωνίας με την οθόνη, το ποντίκι, το δίσκο, το πληκτρολόγιο. Για να γίνει αυτό θα πρέπει να χρησιμοποιήσουμε απευθείας τις εντολές του λειτουργικού μας συστήματος (Win32 εντολές στην περίπτωση των Windows). Εναλλακτικά μπορούμε να χρησιμοποιήσουμε μια από τις έτοιμες βιβλιοθήκες εντολών που υπάρχουν και που θα κάνουν αυτές τις λειτουργίες για εμάς εύκολα. Μια από τις πιο διαδεδομένες βιβλιοθήκες για αυτό το σκοπό είναι το GLUT (OpenGL Utility Toolkit) το οποίο είναι και αυτό σχεδιασμένο να τρέχει σε πολλά λειτουργικά συστήματα.
14. ποιους τύπους δεδομένων γνωρίζετε.
Τύποι δεδομένων 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
15.Εξηγείστε την OpenGL ως μηχανή καταστάσεων.
Το περιβάλλον της OpenGL μπορεί να χαρακτηριστεί ως μια μηχανή καταστάσεων. Με τον όρο “μηχανή καταστάσεων” αναφερόμαστε σε ένα περιβάλλον, το οποίο, σε κάθε χρονική στιγμή, λειτουργεί βάσει προκαθορισμένων ιδιοτήτων (attributes) ή αλλιώς μεταβλητών κατάστασης (state variables). Οι μεταβλητές κατάστασης έχουν μια προκαθορισμένη αρχική τιμή η οποία μπορεί να μεταβληθεί κατά την πορεία της εκτέλεσης του κώδικα από τον προγραμματιστή. Επιπλέον, οι αρχικές τιμές τους ή οι τιμές που τους ανατέθηκαν την τελευταία φορά, παραμένουν ενεργές.
Δεδομένου ότι στην OpenGL οι αλγόριθμοι εκτελούνται επαναληπτικά, είναι σημαντικό ο προγραμματιστής να αρχικοποιεί τις μεταβλητές κατάστασης, όποτε αυτό είναι απαραίτητο, καθώς και να παρακολουθεί τις τιμές τους, ούτως ώστε να παράγει το επιθυμητό αποτέλεσμα σε κάθε κύκλο εκτέλεσης.
Ορισμένα παραδείγματα μεταβλητών κατάστασης που ορίζονται στην OpenGL είναι: το τρέχον χρώμα σχεδίασης, οι τιμές των μητρώων μετασχηματισμού και προβολής, το πάχος των σχεδιαζόμενων γραμμών, το χρώμα καθαρισμού της οθόνης κ.λ.π.
10.Ποιες βασικές λειτουργίες υποστηρίζει η OPENGL;
Λειτουργίες της GLU:
Αρχικοποίηση Χειρισμός εικόνων για χρήση σε υφή Μετασχηματισμός σημείων 2.4 Tessellating πολύγωνων Χρήση λειτουργιών επανάκλησης Χρησιμοποιώντας ψηφιδωτά(Tessellation) αντικείμενα Καθορισμός επανακλήσεων Καθορισμός του πολύγωνου ως ψηφιδωτό(Tessellated) Απόδοση απλών επιφάνειων Χρησιμοποιώντας NURBS καμπύλες και επιφάνειες Χειρισμός σφαλμάτων
OpenGL graphics pipeline
Ας δούμε σχηματικά τα βήματα που κάνει η OpenGL από την στιγμή που πάρει τις εντ
ολές
γραφικών από την εφαρμογή μας μέχρι την στιγμή δημιουργίας της τελικής εικόνας (rendered
image)
11. Τι είναι η OpenGL
Η OpenGL είναι ένα σύνολο εντολών (Application Programming Interface – API) που μας επιτρέπει την δημιουργία τριδιάστατων γραφικών. Δεν είναι γλώσσα προγραμματισμού αλλά μπορεί να χρησιμοποιηθεί με μια πληθώρα γλωσσών προγραμματισμού (C, C++, Java και άλλες) και σε μια πληθώρα λειτουργικών συστημάτων (Windows, Unix, Linux, Mac OS). Προσφέρει πάνω από 300 εντολές για δημιουργία γραφικών και δρα σαν ένα ενδιάμεσο στρώμα ανάμεσα στην εφαρμογή και στη κάρτα γραφικών που θα αναλάβει τα απεικονίσει τα γραφικά στην οθόνη, κρύβοντας λεπτομέρειες υλοποίησης του υλικού και των οδηγών του.
12.
TI είναι το OpenGL graphics pipeline
Ας δούμε σχηματικά τα βήματα που κάνει η OpenGL από την στιγμή που πάρει τις εντολές γραφικών από την εφαρμογή μας μέχρι την στιγμή δημιουργίας της τελικής εικόνας (rendered image). H OpenGL χρησιμοποιεί μια μηχανή καταστάσεων (state machine) για να επικοινωνεί με την εφαρμογή. Σε αυτή την μηχανή καταστάσεων η OpenGL παραμένει διαρκώς σε μια κατάσταση μέχρι να αλλάξει η εφαρμογή την κατάσταση. Παράδειγμα αν θέσουμε το χρώμα που θα χρησιμοποιεί η OpenGL για να ζωγραφίσει ένα μοντέλο, το χρώμα θα παραμείνει στη μνήμη και θα χρησιμοποιείται μέχρι να το αλλάξουμε ή να κλείσουμε την εφαρμογή. Εφόσον λοιπόν η εφαρμογή καθορίσει το περιβάλλον που θα χρησιμοποιήσει η OpenGL για να απεικονίσει το μοντέλο μας (χρώματα, υφές, πηγές φωτός, κάμερα κλπ), περνάει στο πρώτο στάδιο κατά το οποίο θα μετασχηματίσει και θα φωτίσει (transform and lighting) τα σημεία(vertices) του μοντέλου. Στην συνέχεια η OpenGL περνά στο στάδιο της ψηφιοποίησης το οποίο λαμβάνει όλες τις πληροφορίες και την γεωμετρία από το προηγούμενο στάδιο (του μετασχηματισμού) και παράγει την τελική, ψηφιακή, εικόνα. Η εικόνα αντιγράφεται στην μνήμη του frame buffer και φτάνει έτσι στην οθόνη του υπολογιστή. Αυτή η ακολουθία βημάτων που ακολουθεί η OpenGL για να απεικονίσει το μοντέλο λέγεται graphics pipeline (διασωλήνωση)
13.Τι είναι το GLUT
Η OpenGL όπως είπαμε είναι ένας γρήγορος και ευέλικτος τρόπος να επικοινωνούμε με το hardware γραφικών του υπολογιστή χωρίς να ενδιαφερόμαστε για τις λεπτομέρειες υλοποίησης του. Όμως δεν προσφέρει καθόλου λειτουργίες GUI (Graphical User Interface), δηλαδή δεν έχει την δυνατότητα να ανοίξει και να κλείσει παράθυρα στο λειτουργικό σύστημα, να ζωγραφίσει σε αυτά, ούτε να καταλάβει το πάτημα ενός πλήκτρου ή την κίνηση του ποντικιού, ούτε μπορεί να διαβάσει ένα αρχείο από το δίσκο. Αυτό έγινε επί σκοπού, μιας και η OpenGL σχεδιάστηκε να τρέχει σε πολλά λειτουργικά συστήματα τα οποία έχουν το δικό τους τρόπους επικοινωνίας με την οθόνη, το ποντίκι, το δίσκο, το πληκτρολόγιο. Για να γίνει αυτό θα πρέπει να χρησιμοποιήσουμε απευθείας τις εντολές του λειτουργικού μας συστήματος (Win32 εντολές στην περίπτωση των Windows). Εναλλακτικά μπορούμε να χρησιμοποιήσουμε μια από τις έτοιμες βιβλιοθήκες εντολών που υπάρχουν και που θα κάνουν αυτές τις λειτουργίες για εμάς εύκολα. Μια από τις πιο διαδεδομένες βιβλιοθήκες για αυτό το σκοπό είναι το GLUT (OpenGL Utility Toolkit) το οποίο είναι και αυτό σχεδιασμένο να τρέχει σε πολλά λειτουργικά συστήματα.
14. ποιους τύπους δεδομένων γνωρίζετε.
Τύποι δεδομένων 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
15.Εξηγείστε την OpenGL ως μηχανή καταστάσεων.
Το περιβάλλον της OpenGL μπορεί να χαρακτηριστεί ως μια μηχανή καταστάσεων. Με τον όρο “μηχανή καταστάσεων” αναφερόμαστε σε ένα περιβάλλον, το οποίο, σε κάθε χρονική στιγμή, λειτουργεί βάσει προκαθορισμένων ιδιοτήτων (attributes) ή αλλιώς μεταβλητών κατάστασης (state variables). Οι μεταβλητές κατάστασης έχουν μια προκαθορισμένη αρχική τιμή η οποία μπορεί να μεταβληθεί κατά την πορεία της εκτέλεσης του κώδικα από τον προγραμματιστή. Επιπλέον, οι αρχικές τιμές τους ή οι τιμές που τους ανατέθηκαν την τελευταία φορά, παραμένουν ενεργές.
Δεδομένου ότι στην OpenGL οι αλγόριθμοι εκτελούνται επαναληπτικά, είναι σημαντικό ο προγραμματιστής να αρχικοποιεί τις μεταβλητές κατάστασης, όποτε αυτό είναι απαραίτητο, καθώς και να παρακολουθεί τις τιμές τους, ούτως ώστε να παράγει το επιθυμητό αποτέλεσμα σε κάθε κύκλο εκτέλεσης.
Ορισμένα παραδείγματα μεταβλητών κατάστασης που ορίζονται στην OpenGL είναι: το τρέχον χρώμα σχεδίασης, οι τιμές των μητρώων μετασχηματισμού και προβολής, το πάχος των σχεδιαζόμενων γραμμών, το χρώμα καθαρισμού της οθόνης κ.λ.π.
16.Πως καθαρίζουμε τον ενταμιευτή χρωματικών τιμών (color buffer) και τον ενταμιευτή τιμών βάθους ΄
για να καθαρίσουμε λ.χ. τον ενταμιευτή χρωματικών τιμών (color buffer) και τον ενταμιευτή τιμών βάθους
(depth buffer) δίνουμε:
glClearColor(0.0, 0.0, 0.0, 0.0);
glClearDepth(0.0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
Η εντολή glClearColor() είναι ίδια με αυτήν του προηγούμενου παραδείγματος. ενώ εντολή glClearDepth() καθορίζει την τιμή την οποία θα δώσουμε σε κάθε pixel του ενταμιευτή βάθους (περισσότερα για τη χρήση ενταμιευτών βάθους στην ενότητα “Καταστολή κρυμμένων επιφανειών”).
(depth buffer) δίνουμε:
glClearColor(0.0, 0.0, 0.0, 0.0);
glClearDepth(0.0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
Η εντολή glClearColor() είναι ίδια με αυτήν του προηγούμενου παραδείγματος. ενώ εντολή glClearDepth() καθορίζει την τιμή την οποία θα δώσουμε σε κάθε pixel του ενταμιευτή βάθους (περισσότερα για τη χρήση ενταμιευτών βάθους στην ενότητα “Καταστολή κρυμμένων επιφανειών”).
17.
πως γίνεται ο Καθορισμός Χρωμάτων.
Με την OpenGL, η περιγραφή του σχήματος ενός αντικειμένου και ο χρωματισμός του είναι 20
ανεξάρτητα. Κάθε φορά που δίνουμε εντολή σχεδιάσης ενός συγκεκριμένου γεωμετρικού σχήματος, το τρέχον επιλεγμένο χρώμα, όντας μεταβλητή κατάστασης, καθορίζει και το χρώμα με το οποίο το σχήμα σχεδιάζεται.
Για να καθορίσουμε ένα χρώμα, χρησιμοποιούμε την εντολή glColor3f(). Η εντολή αυτή παίρνει τρεις παραμέτρους, οι οποίες είναι όλες αριθμοί κινητής υποδιαστολής ή διπλής ακρίβειας (μεταξύ 0.0 και 1.0) ή ακέραιοι, ανάλογα με το ποια από τις παρακάτω τρείς μορφές επιλέγουμε:
void glColor3ub(GLubyte red, GLubyte green, GLubyte blue); (0≤red,green,blue≤255)
void glColor3f(GLfloat red, GLfloat green, GLfloat blue); (0≤red,green,blue≤1)
void glColor3d(GLdouble red, GLdouble green, GLdouble blue); (0≤red,green,blue≤1)
Οι παράμετροι red, green και blue αντιστοιχούν στις τιμές των χρωματικών συνιστωσών του χρώματος στο μοντέλο RGB. Π.χ. η εντολή
glColor3f(1,0,0);
επιστρέφει το πιο έντονο κόκκινο που μπορεί να αποδώσει το σύστημα. Στον πίνακα 3 ορίζονται ορισμένα βασικά χρώματα.
18.
πως γίνεται Καθορισμός κορυφών.
Στην OpenGL, όλα τα γεωμετρικά σχήματα περιγράφονται δηλώνοντας τις κορυφές τους. Για τον καθορισμό μιας κορυφής χρησιμοποιούμε την εντολή glVertex*.
void glVertex{234}{sifd}[v](TYPE coords);
Η εντολή αυτή καθορίζει μία κορυφή, η οποία θα χρησιμοποιηθεί για την περιγραφή ενός γεωμετρικού σχήματος. Μπορούμε να δώσουμε μέχρι τέσσερις συντεταγμένες (x, y, z, w) για μία συγκεκριμένη κορυφή ή και μέχρι δύο (x, y), χρησιμοποιώντας την κατάλληλη εκδοχή της εντολής. Η εντολή glVertex*() πρέπει να 21
εκτελείται μεταξύ των εντολών glBegin() και glEnd(), όπως θα δούμε στη συνέχεια . Παρακάτω βλέπουμε μερικά παραδείγματα όπου χρησιμοποιείται η glVertex*:
glVertex2s(2,3); // Δήλωση σημείου με συντεταγμένες (x,y)=(2,3)
glVertex3d(0,0,3.14); // Δήλωση σημείου με συντεταγμένες (x,y,z)=(0,0,3.14)
glVertex4f(2.3, 1.0, -2.2, 2.0);
GLdouble dvect[3] = {5,9,1992};
glVertex3dv(dvect); //Δήλωση σημείου που οι τιμές του βρίσκονται στο μητρώο
19. Περιγράψτε τη διαδικασία δημιουργίας Τριγώνων.
Ειδικές περιπτώσεις των πολυγώνων αποτελούν τα τρίγωνα (n=3) για το οποία η OpenGL προσφέρει επιπρόσθετες παραμέτρους. Ως ειδικές περιπτώσεις πολυγώνων τα τρίγωνα διέπονται από τους ίδιους κανόνες απόδοσης επιφανειών που ισχύουν και για τα πολύγωνα. Αυτό όπως θα δούμε στην ενότητα «Όψεις πολυγώνων»
Ανάλογα με το όρισμα της εντολής glBegin, διακρίνουμε τις εξής διαφοροποιήσεις στη σχεδίαση των τριγώνων.
GL_TRIANGLES
Σχεδιάζει μια σειρά από σαφώς διακεκριμένα τρίγωνα. Για διατεταγμένο σύνολο κορυφών σχεδιάζονται τα τρίγωνα με κορυφές (), 0121,,,...,n−vvvv012v,v,v()345v,v,v και ούτω καθεξής. Αν το δεν είναι ακέραιο πολλαπλάσιο του 3, η τελευταία ή οι δύο τελευταίες κορυφές παραλείπονται. n
35
GL_TRIANGLE_STRIP
Σχεδιάζει μια αλληλουχία τριγώνων. Διαδοχικά τρίγωνα έχουν μία κοινή πλευρά. Δίνοντας ένα διατεταγμένο σύνολο κορυφών σχεδιάζονται τα τρίγωνα με κορυφές , , και ούτω καθεξής. Η συγκεκριμένη σειρά εμφάνισης των κορυφών εξασφαλίζει ότι οι δήλωσεις των κορυφών των τριγώνων έχουν τον ίδιο προσανατολισμό. (αριστερόστροφο ή δεξιόστροφο) και παίζει ρόλο στον προσανατολισμό της επιφανείας των πολυγώνων, όπως θα δούμε στην ενότητα “Όψεις πολυγώνων”. Το n πρέπει να είναι τουλάχιστο ίσο με 3, ειδάλλως δε θα σχεδιαστεί τίποτα. (011,,...,n−v vv)
)
()012v,v,v()213,,vvv(423v,v,v
GL_TRIANGLE_FAN
Σχεδιάζει τρίγωνα που έχουν το πρώτο σημείο κοινό και διαδοχικά τρίγωνα έχουν μία κοινή πλευρά. Επομένως τα τρίγωνα σχηματίζονται από τις κορυφές ()012v,v,v, ()023v,v,v, ()034v,v,v και ούτω καθεξής.
20.
Περιγράψτε τη σύνταξη και τις παραμέτρους της glLookAt() (στην OpenGL).
Ειδικές περιπτώσεις των πολυγώνων αποτελούν τα τρίγωνα (n=3) για το οποία η OpenGL προσφέρει επιπρόσθετες παραμέτρους. Ως ειδικές περιπτώσεις πολυγώνων τα τρίγωνα διέπονται από τους ίδιους κανόνες απόδοσης επιφανειών που ισχύουν και για τα πολύγωνα. Αυτό όπως θα δούμε στην ενότητα «Όψεις πολυγώνων»
Ανάλογα με το όρισμα της εντολής glBegin, διακρίνουμε τις εξής διαφοροποιήσεις στη σχεδίαση των τριγώνων.
GL_TRIANGLES
Σχεδιάζει μια σειρά από σαφώς διακεκριμένα τρίγωνα. Για διατεταγμένο σύνολο κορυφών σχεδιάζονται τα τρίγωνα με κορυφές (), 0121,,,...,n−vvvv012v,v,v()345v,v,v και ούτω καθεξής. Αν το δεν είναι ακέραιο πολλαπλάσιο του 3, η τελευταία ή οι δύο τελευταίες κορυφές παραλείπονται. n
35
GL_TRIANGLE_STRIP
Σχεδιάζει μια αλληλουχία τριγώνων. Διαδοχικά τρίγωνα έχουν μία κοινή πλευρά. Δίνοντας ένα διατεταγμένο σύνολο κορυφών σχεδιάζονται τα τρίγωνα με κορυφές , , και ούτω καθεξής. Η συγκεκριμένη σειρά εμφάνισης των κορυφών εξασφαλίζει ότι οι δήλωσεις των κορυφών των τριγώνων έχουν τον ίδιο προσανατολισμό. (αριστερόστροφο ή δεξιόστροφο) και παίζει ρόλο στον προσανατολισμό της επιφανείας των πολυγώνων, όπως θα δούμε στην ενότητα “Όψεις πολυγώνων”. Το n πρέπει να είναι τουλάχιστο ίσο με 3, ειδάλλως δε θα σχεδιαστεί τίποτα. (011,,...,n−v vv)
)
()012v,v,v()213,,vvv(423v,v,v
GL_TRIANGLE_FAN
Σχεδιάζει τρίγωνα που έχουν το πρώτο σημείο κοινό και διαδοχικά τρίγωνα έχουν μία κοινή πλευρά. Επομένως τα τρίγωνα σχηματίζονται από τις κορυφές ()012v,v,v, ()023v,v,v, ()034v,v,v και ούτω καθεξής.
20.
Περιγράψτε τη σύνταξη και τις παραμέτρους της glLookAt() (στην OpenGL).
void WINAPI gluLookAt(
GLdouble eyex,
GLdouble eyey,
GLdouble eyez,
GLdouble centerx,
GLdouble centery,
GLdouble centerz,
GLdouble upx,
GLdouble upy,
GLdouble upz
);
Parameters
- eyex
- The position of the eye point.
- eyey
- The position of the eye point.
- eyez
- The position of the eye point.
- centerx
- The position of the reference point.
- centery
- The position of the reference point.
- centerz
- The position of the reference point.
- upx
- The direction of the up vector.
- upy
- The direction of the up vector.
- upz
- The direction of the up vector.
- 21.Ποιες εντολές χρησιμοποιούμε για τις εξής λειτουργίες της OpenGL: α. translate β. rotate γ. scale ή stretch;
- a.Μετακίνηση
- Η μετακίνηση (translation) ενός αντικειμένου γίνεται με την εντολή glTranslatef(GLfloat X, GLfloat Y, GLfloat Z);
- H εντολή αυτή παίρνει ως παραμέτρους την μετακίνηση που επιθυμούμε κατά άξονα, κατασκευάζει ένα μετασχηματισμό μετακίνησης Τ (όπως είδαμε στην θεωρία) και τον εφαρμόζει (πολ/ζει) με τον μετασχηματισμό Μοντέλου-Κάμερας.
- b.Περιστροφή
- Η περιστροφή (rotation) ενός αντικειμένου γίνεται με την εντολή glRotatef(GLfloat angle, GLfloat x, GLfloat y, GLfloat z);
- Η εντολή αυτή κατασκευάζει ένα μετασχηματισμό περιστροφής γύρω από το διάνυσμα που ορίζεται από την τριάδα [ x, y, z ], κατά γωνία angle (μετριέται σε μοίρες 0-360) με φορά αντίθετη των δεικτών του ρολογιού. Αν μας ενδιαφέρει απλά να περιστρέψουμε το αντικείμενο γύρω από ένα άξονα (Χ, Υ ή Z) μπορούμε να ορίσουμε το διάνυσμα ως [ 1, 0, 0] για το περιστροφή γύρω από τον Χ, ως [ 0, 1, 0] για το περιστροφή γύρω από τον Υ και ως [ 0, 0, 1] για το περιστροφή γύρω από τον Ζ.
- c. Κλίμακα
- Η μεγέθυνση/σμίκρυνση (scaling) ενός αντικειμένου γίνεται με την εντολή glScalef(GLfloat x, GLfloat y, GLfloat z); όπου x, y, z η κλίμακα του αντικειμένου ανά άξονα
- 22.Ποια είναι η λειτουργία της glClear() και ποια της glClearColor3f() (στην OpenGL);
- Η εντολή glClearColor() καθορίζει το χρώµα που χρησιµοποιείται κάθε φορά που εκτελείται εντολή καθαρισµού της οθόνης. Στην OpenGL το χρώµα του φόντου είναι µία µεταβλητή κατάστασης, η οποία διατηρεί την τιµή που της ανατέθηκε την τελευταία φορά. Το χρώµα καθορίζεται από τα βάρη του στο χρωµατικό µοντέλο RGB. Στο συγκεκριµένο παράδειγµα, χρησιµοποιείται το λευκό χρώµα.
- • Η εντολή glClear() καθαρίζει ενταµιευτές (buffers), συγκεκριµένες περιοχές µνήµης του συστήµατος γραφικών (frame buffer). Η µηχανή γραφικών της OpenGL ορίζει ορισµένες κατηγορίες ενταµιευτών. Με την σταθερά GL_COLOR_BUFFER_BIT δίνουµε εντολή καθαρισµού του ενταµιευτή χρωµατικών τιµών (colour buffer). Αυτή περιέχει τις χρωµατικές τιµές των pixels που απεικονίζονται (ή πρόκειται να απεικονιστούν) στην οθόνη.
- Με την εντολή glColor3f(float r, float g, float b) ορίζουµε το τρέχον χρώµα σχεδιάσης. Πρόκειται για µία ακόµη µεταβλητή κατάστασης που καθορίζει το χρώµα που χρησιµοποιείται για τη σχεδίαση γραφικών. Στην εντολή περνάµε ως ορίσµατα τις κανονικοποιηµένες ως προς τη µονάδα τιµές των συνιστωσών του κόκκινου, πράσινου και µπλέ χρώµατος. Στο παράδειγµα επιλέγουµε ως χρώµα
- σχεδιάσης το κόκκινο.
- 23. δΗΜΙΟΥΡΓΉΣΤΕ ΟΡΘΟΓΩΝΙΑ ΜΕ OPENGL.
- Παράδειγμα: Σχεδιάση ορθογωνίων
#include <glut.h>
void display()
{
glClearColor(1,1,1,0);
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1,0,0);
glRectf(0,0,15,10);
glColor3f(0,1,0);
glRectf(20,0,30,10);
glColor3f(0,0,1);
glRectf(12.5,15,25.5,25);
glFlush();
}
int main(int argc, char** argv)
{
glutInit(&argc,argv);
glutInitWindowPosition(50,50);
glutInitWindowSize(640,480);
glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
glutCreateWindow("Drawing rectangles");
glMatrixMode(GL_PROJECTION);
gluOrtho2D(-5,35,-5,30);
glutDisplayFunc(display);
glutMainLoop();
return 0;
}
OpenGL graphics pipeline
Ας δούμε σχηματικά τα βήματα που κάνει η OpenGL από την στιγμή που πάρει τις εντ
ολές
γραφικών από την εφαρμογή μας μέχρι την στιγμή δημιουργίας της τελικής εικόνας (rendered
image)
OpenGL graphics pipeline
Ας δούμε σχηματικά τα βήματα που κάνει η OpenGL από την στιγμή που πάρει τις εντ
ολές
γραφικών από την εφαρμογή μας μέχρι την στιγμή δημιουργίας της τελικής εικόνας (rendered
image)
JAVA GRAPHICS
Downloading JOGL
- You can download latest version of JOGL from the website www.jogamp.org
- Go to the home page of www.jogamp.org
- Click on Builds/Downloads > Current (zip).

This takes you to the list of .jar files for all APIs maintained by the website.

- Download the library .jar file jogamp-all-platforms.7z, java documentations for OpenGL native library glugen-javadoc.7z, and JOGL jogl-javadocs.7z.
- Extract the downloaded .jar files using any zip extracting software.
When you open the extracted folder, you will find jar folder, source-codes, and other files.

Get the source codes gluegen-java-src.zip and jogl-java-src.zip for supporting IDE. This is optional.
- Inside the jar folder, there are multiple .jar files. This collection of files belongs to Glugen and JOGL.
- JOAMP provides native libraries that support various operating systems such as Windows, Solaris, Linux and Android. Hence, you need to take appropriate jar files which can execute on your desired platform. For example, if you are using Windows 64-bit operating system, then get the following .jar files from the jar folder −
- gluegenrt.jar
- jogl-all.jar
- gluegen-rt-natives-windows-amd64.jar
- jogl-all-natives-windowsamd64.jar

Setting up JOGL for NetBeans 4.4
Let us go through the steps for setting up JOGL for NetBeans 4.4 −
Adding Libraries
Step 1 − In the main menu, select Tools > Libraries.

Step 2 − It leads you to Ant Library Manager.

Step 3 − Under the Classpath tab, click New Library button located on the left lower corner. It opens a small dialog box.
Step 4 − Enter Library name as JoGl2.0.
Step 5 − Click on “OK” button.

Step 6 − Click on “Add JAR/Folder…” button.
Step 7 − Select the path where .jar files jogl.all.jar and gluegen-rt.jar are located.
To include JOGL library into each project, follow the steps given below −
Step 1 − Right-click on the project name. It shows a short-cut menu.

Step 2 − Select Properties. It opens a window named Project properties.

Step 3 − Select Libraries from Categories on the left hand side.
Step 4 − Select Compile tab and click on “Add Library...” button. Add library dialog box comes up.
Step 5 − Now add JOGL2.0 library, which you created earlier.
Including Native Library in Each Project
Follow the given steps to include native library in each project −
Step 1 − Right-click the project.
Step 2 − Select Set Configuration > Customize…

It leads you to the Project Properties window.

Step 3 − On the right hand side, in VM options, click on “Customize” button.
Step 4 − Browse for the path that contains JOGL native libraries gluegen-rtnatives-windows-amd64.jar'' and 'jogl-all-natives-windowsamd64.jar.
Adding Java Documentation of Native Libraries
You need to open Ant library manager again to make sources and Javadoc available for each project. Follow the given procedure −
Step 1 − Open main menu.
Step 2 − Select Tools > Libraries. This leads you to Library manager.
Step 3 − Under the JavaDoc tab, click on “New Library…” button.
Step 4 − Enter JOGLJavadoc name. (You can enter any desired name.)
Step 5 − Click on “Add jars/libraries…” button.
Step 6 − Select the path where unzipped JOGL documentation code is located.
Adding Source Code of Native Libraries
Step 1 − Under Sources tab, click on “New Library…” button. Enter JOGLsources name.
Step 2 − Click on “Add jars/libraries…” button. Select the path where unzipped source code is located.
Customizing the JDK Editor
Step 1 − Set Classpath for files jogl.all.jar and gluegen-rt.jar.
Step 2 − Set path to native libraries gluegen-rt-natives-windows-amd64.jar and joglall-natives-windowsamd64.jar or copy all the jar files from the folder where you have downloaded them and paste them into the jse lib folder.
Δεν υπάρχουν σχόλια:
Δημοσίευση σχολίου