Διαδραστικές εφαρμογές OpenGL. Βιβλιοθήκη γραφικών OpenGl

Παιδικά προϊόντα 22.06.2019
Επισκόπηση προγράμματος Η έκδοση υπολογιστή του Microsoft Excel Viewer θα επιτρέψει...

Σε αυτή την ενότητα, θα μάθουμε πώς να δημιουργείτε τρισδιάστατες εικόνες χρησιμοποιώντας τις λειτουργίες της βιβλιοθήκης OpenGL, ώστε στο επόμενο κεφάλαιο να αναπτύξουμε μια εφαρμογή Windows που μπορεί να θεωρηθεί ως εργαλείο προβολής επιστημονικούς υπολογισμούς. Το υλικό σε αυτήν την ενότητα θα σας επιτρέψει να ρυθμίσετε σταδιακά την ταχύτητα και να κυριαρχήσετε σε μια πολύ ελκυστική τεχνολογία για τη δημιουργία και τη διαχείριση τρισδιάστατες εικόνες. Πρώτα θα δούμε τις βασικές δυνατότητες της βιβλιοθήκης OpenGL και μετά θα μάθουμε πώς να ελέγχουμε τις λειτουργίες OpenGL χρησιμοποιώντας ένα παράδειγμα απλές εφαρμογέςτύπου κονσόλας και μόνο μετά από αυτό θα ξεκινήσουμε την ανάπτυξη μιας εφαρμογής Windows.

Ο αναγνώστης πιθανότατα γνωρίζει ότι το OpenGL είναι μια βελτιστοποιημένη, υψηλής απόδοσης βιβλιοθήκη γραφικών συναρτήσεων και τύπων δεδομένων για την εμφάνιση δισδιάστατων και τρισδιάστατων γραφικών. Το πρότυπο OpenGL εγκρίθηκε το 1992. Βασίζεται στη βιβλιοθήκη IRIS GL που αναπτύχθηκε από τη Silicon Graphics (www.sgi.com). Το OpenGL υποστηρίζεται σε όλες τις πλατφόρμες. Επιπλέον, το OpenGL υποστηρίζεται σε υλικό. Υπάρχουν κάρτες γραφικών με επιταχυντές και εξειδικευμένες κάρτες SD που εκτελούν OpenGL primitives στο υλικό.

Το υλικό στο πρώτο μέρος αυτού του μαθήματος είναι εμπνευσμένο από ένα πολύ καλό βιβλίο (διαθέσιμο στο διαδίκτυο) από την Addison-Wesley, "OpenGL Programming Guide, The Official Guide to Learning OpenGL". Εάν ο αναγνώστης μιλάει αγγλικά, συνιστούμε να το διαβάσει.

Συνδεδεμένες βιβλιοθήκες

Η εφαρμογή Microsoft OpenGL περιλαμβάνει το πλήρες σύνολο των εντολών OpenGL, δηλαδή καθολικές συναρτήσεις που περιλαμβάνονται στον πυρήνα της βιβλιοθήκης OPENGL32.LIB και έχουν το πρόθεμα gl(π.χ. glLineWidth). Σημειώστε ότι οι λειτουργίες της βασικής βιβλιοθήκης έχουν πολλές εκδόσεις, επιτρέποντάς σας να καθορίσετε την επιθυμητή παράμετρο ή ρύθμιση με όποιον τρόπο θέλετε. Δείτε τη βοήθεια για λειτουργίες της οικογένειας glColor*. Αποδεικνύεται ότι μπορείτε να ορίσετε το τρέχον χρώμα με 32 τρόπους. Για παράδειγμα, η συνάρτηση:

Void glColorSb (GLbyte κόκκινο, GLbyte πράσινο, GLbyte μπλε);

Καθορίζει ένα χρώμα χρησιμοποιώντας τρία στοιχεία τύπου GLbyte και τη συνάρτηση:

Void glColor4dv (const GLdouble *v);

Το καθορίζει χρησιμοποιώντας τη διεύθυνση ενός πίνακα τεσσάρων στοιχείων.

Λαμβάνοντας υπόψη αυτές τις επιλογές, η βασική βιβλιοθήκη περιέχει περισσότερες από 300 εντολές. Επιπλέον, μπορείτε να συνδέσετε τη βιβλιοθήκη GLU32.LIB βοηθητικών προγραμμάτων που συμπληρώνουν τον κύριο πυρήνα. Υπάρχουν συναρτήσεις για τον έλεγχο υφών, τον μετασχηματισμό συντεταγμένων, τη δημιουργία σφαιρών, κυλίνδρων και δίσκων, προσεγγίσεις spline καμπυλών και επιφανειών ( NURBS - Μη ομοιόμορφη ορθολογική B-Spline), καθώς και διαχείριση σφαλμάτων. Ένα ακόμη, επιπλέον ( βοηθητικός) η βιβλιοθήκη GLAUX.LIB σάς επιτρέπει να δημιουργείτε εύκολα παράθυρα των Windows, να εμφανίζετε ορισμένα αντικείμενα SD, να χειρίζεστε συμβάντα εισαγωγής και να ελέγχετε τη διαδικασία παρασκηνίου. Δυστυχώς, αυτή η βιβλιοθήκη δεν είναι τεκμηριωμένη. Η Microsoft δεν συνιστά τη χρήση του για την ανάπτυξη εμπορικών έργων, καθώς περιέχει κώδικα βρόχου μηνυμάτων στον οποίο είναι αδύνατο να εισαχθεί η επεξεργασία άλλων αυθαίρετων μηνυμάτων.

Σημείωμα
Ο τύπος GLbyte είναι ισοδύναμος με έναν υπογεγραμμένο τύπο χαρακτήρων και το GLdouble είναι ισοδύναμος με έναν διπλό τύπο. Οι δικοί τύποι χρησιμοποιούνται για την απλοποίηση της φορητότητας σε άλλες πλατφόρμες. Παρέχουμε μια λίστα με τους τύπους OpenGL παρακάτω. Το τέταρτο στοιχείο χρώματος καθορίζει τη διαφάνεια του χρώματος, με τον τρόπο που το χρώμα του φόντου συνδυάζεται με το χρώμα της εικόνας. Ορισμένες εντολές OpenGL έχουν ένα v στο τέλος, το οποίο υποδεικνύει ότι το όρισμα πρέπει να είναι η διεύθυνση ενός πίνακα (διάνυσμα). Ένα διάνυσμα στα μαθηματικά είναι μια ακολουθία αριθμών (συντεταγμένων) που ορίζουν μοναδικά ένα στοιχείο ενός διανυσματικού χώρου. Πολλές εντολές έχουν πολλαπλές εκδόσεις, επιτρέποντάς σας τελικά να καθορίσετε το διάνυσμα με διαφορετικούς τρόπους
.

Περίπου είκοσι συναρτήσεις GDI των Windows δημιουργούνται ειδικά για να λειτουργούν με το OpenGL. Τα περισσότερα από αυτά έχουν το πρόθεμα wgl(ακρωνύμιο για Windows GL). Αυτές οι λειτουργίες είναι ανάλογες των συναρτήσεων με πρόθεμα glx που συνδέουν το OpenGL με την πλατφόρμα συστήματος παραθύρου X. Τέλος, υπάρχουν αρκετές λειτουργίες Win32 για τον έλεγχο της μορφής pixel και της διπλής προσωρινής αποθήκευσης. Ισχύουν μόνο για εξειδικευμένα παράθυρα OpenGL.

Εργαστηριακή εργασία Νο 2.

1. Εισαγωγή

OpenGL – Open Graphics Library, ανοιχτή βιβλιοθήκη γραφικών. Ο όρος "ανοιχτό" σημαίνει ανεξάρτητος από τους κατασκευαστές. Υπάρχει μια προδιαγραφή (πρότυπο) για το OpenGL, όπου όλα τεκμηριώνονται και περιγράφονται ξεκάθαρα. Οποιοσδήποτε μπορεί να δημιουργήσει μια βιβλιοθήκη OpenGL. Το κύριο πράγμα είναι ότι η βιβλιοθήκη πληροί τις προδιαγραφές OpenGL και μια σειρά από δοκιμές. Ως αποτέλεσμα, δεν υπάρχουν σκοτεινά μέρη, μυστικά, μη τεκμηριωμένα χαρακτηριστικά κ.λπ. Η βιβλιοθήκη παράγεται από εταιρείες όπως η Microsoft, η Silicon Graphics, καθώς και απλά ομάδες προγραμματιστών. Ένα τέτοιο παράδειγμα είναι η υλοποίηση Mesa. Αυτή η βιβλιοθήκη γράφτηκε από αρκετούς προγραμματιστές, με κύριο συγγραφέα τον Brian Paul. Η βιβλιοθήκη Mesa διανέμεται στο κείμενα πηγήςσε γλώσσα C και μπορεί να συναρμολογηθεί για σχεδόν οποιαδήποτε λειτουργικό σύστημα. Το πρότυπο OpenGL εξελίσσεται από το 1992. Αναπτύχθηκε από τη Silicon Graphics. Από τότε, η βιβλιοθήκη έχει αποκτήσει τεράστια δημοτικότητα και έχει ενσωματωθεί με πολλές γλώσσες και συστήματα ανάπτυξης εφαρμογών. Μπορείτε να γράψετε ένα πρόγραμμα με χρησιμοποιώντας OpenGLσε C, C++, Pascal, Java και πολλές άλλες γλώσσες. Κύριος σκοπός Προγραμματισμός OpenGLτρισδιάστατα γραφικά.

Η βιβλιοθήκη OpenGL είναι μια διεπαφή προγραμματισμού 3D γραφικών. Η μονάδα πληροφοριών είναι η κορυφή που αποτελούνται από αυτά. Ο προγραμματιστής δημιουργεί τις κορυφές, καθορίζει τον τρόπο σύνδεσης τους (με γραμμές ή πολύγωνα), ορίζει τις συντεταγμένες και τις παραμέτρους της κάμερας και των λαμπτήρων και η βιβλιοθήκη OpenGL αναλαμβάνει τη δημιουργία της εικόνας στην οθόνη. Το OpenGL είναι ιδανικό για προγραμματιστές που πρέπει να δημιουργήσουν μια μικρή τρισδιάστατη σκηνή χωρίς να ανησυχούν για τις λεπτομέρειες υλοποίησης των αλγορίθμων τρισδιάστατων γραφικών. Για τους επαγγελματίες που ασχολούνται με τον προγραμματισμό τρισδιάστατων γραφικών, η βιβλιοθήκη θα είναι επίσης χρήσιμη, καθώς αντιπροσωπεύει τους βασικούς μηχανισμούς και εκτελεί ορισμένους αυτοματισμούς. Χρησιμοποιώντας το OpenGL, μπορείτε εύκολα να δημιουργήσετε τρισδιάστατες επιφάνειες, να εφαρμόσετε υφές σε αυτές, να τις φωτίσετε με πηγές φωτός, να δημιουργήσετε εφέ ομίχλης, διαφάνειας, ανάμειξης χρωμάτων, καθώς και να εφαρμόσετε ένα στένσιλ, να μετακινήσετε αντικείμενα σκηνής, λάμπες και κάμερες σε συγκεκριμένες τροχιές. δημιουργώντας έτσι κινούμενα σχέδια. Το OpenGL δεν υποστηρίζει άμεσα συσκευές εισόδου, όπως ποντίκι ή πληκτρολόγιο, επειδή είναι μια βιβλιοθήκη ανεξάρτητη από την πλατφόρμα. Μπορείτε όμως να χρησιμοποιήσετε τις λειτουργίες του συγκεκριμένου λειτουργικού συστήματος για το οποίο γράφετε το πρόγραμμά σας ή να χρησιμοποιήσετε πρόσθετα για το OpenGL, όπως οι βιβλιοθήκες GLUT ή GLAUX.

2. Πρώτο πρόγραμμα

Το απλούστερο αντικείμενο με το οποίο μπορείτε να δείτε την πλήρη ισχύ του OpenGL είναι μια σφαίρα. Μπορείτε να προσπαθήσετε να το απεικονίσετε. Για να γίνει αυτό πρέπει να δημιουργήσετε νέο έργοστο VisualC++ κάνοντας επόμενα βήματα:

— εκκίνηση του Visual C++.

— εκτελέστε την εντολή Αρχείο | Νέος...;

— στο παράθυρο διαλόγου που ανοίγει, επιλέξτε τον τύπο έργου Win32 Application, στο πεδίο Όνομα έργου, καθορίστε το όνομα του έργου και στο πεδίο Θέση, τον φάκελο στον οποίο θα βρίσκεται το έργο.

— πατήστε το κουμπί OK. Στη συνέχεια, χωρίς να αλλάξετε τίποτα, κάντε κλικ στο κουμπί Τέλος και ξανά OK.

— αντιγράψτε δύο δείγματα αρχείων στο φάκελο του έργου. cpp και Sample. η (εκδίδεται από τον δάσκαλο)·

— συνδέστε αυτά τα δύο αρχεία στο έργο εκτελώντας την εντολή Project | Προσθήκη στο έργο | Αρχεία...;

— εισάγετε τον ακόλουθο κώδικα στη λειτουργία Εμφάνιση:

GlColor3d(1,0,0);

AuxSolidSphere(1);

— δημιουργήστε μια λειτουργική μονάδα exe (F7).

Ας εξηγήσουμε τον σκοπό των δύο εισαγόμενων συναρτήσεων. Η συνάρτηση glColor3d ορίζει το τρέχον χρώμα με το οποίο θα σχεδιάζονται τα σχήματα. Εδώ πρέπει να εξηγήσουμε πώς ορίζεται το χρώμα και τη γενική φιλοσοφία στην ονομασία συναρτήσεων OpenGL. Το χρώμα ορίζεται από τέσσερις παραμέτρους: κόκκινο, μπλε, πράσινο και διαφάνεια. Αυτές οι παράμετροι κυμαίνονται από μηδέν έως ένα. Δεν χρειαζόμαστε ακόμα την τέταρτη παράμετρο, οπότε καλέσαμε το glColor με τρεις παραμέτρους. Σε αυτήν την περίπτωση, λαμβάνεται υπόψη η προεπιλεγμένη τιμή της τέταρτης παραμέτρου, η διαφάνεια ίσο με ένα, δηλαδή απολύτως αδιαφανές, το μηδέν θα είναι απολύτως διαφανές. Χρησιμοποιείται η ακόλουθη σύνταξη κλήσης συνάρτησης: FuncionName[τύπος παραμέτρου].

Οι παρακάτω τύποι είναι διαθέσιμοι:

B – GLbyte byte.

S – Σύντομος ακέραιος GL.

I – GLint ακέραιος αριθμός;

F – GLfloat κλασματικό;

D – GLdouble fractional με διπλή ακρίβεια.

Ub – GLubyte ανυπόγραφο byte.

Us – GLushort ανυπόγραφος σύντομος ακέραιος αριθμός.

Ui – GLuint ανυπόγραφος ακέραιος αριθμός.

V – πίνακας n παραμέτρων του καθορισμένου τύπου.

Στην περίπτωσή μας, το glColor3d σημαίνει ότι τρεις παράμετροι τύπου GLdouble μεταβιβάζονται στη συνάρτηση. Ήταν επίσης δυνατό να καλέσετε το glColor3i, δηλαδή τρεις παραμέτρους τύπου GLint. Εάν ο τύπος των παραμέτρων είναι σύντομος ακέραιος, ακέραιος, byte ή μεγάλος, τότε το στοιχείο χρώματος μεταδίδεται στην περιοχή. Η μείωση σε αυτό το εύρος πραγματοποιείται από ακολουθώντας τους κανόνες. Στην περίπτωση ενός ανυπόγραφου τύπου, η μεγαλύτερη δυνατή τιμή μειώνεται σε ένα, μηδέν σε μηδέν. Σε περίπτωση εικονικής μέγιστη αξίαμειώνεται σε ένα ή σε μείον ένα, και μείον ένα θα μειωθεί σε ένα. Στην πράξη, συνήθως χρησιμοποιείται μία από τις τρεις περιπτώσεις που συζητούνται ως παράδειγμα παρακάτω. Για παράδειγμα, για ένα χωρίς υπογραφή byte, η μετάδοση θα πραγματοποιηθεί χρησιμοποιώντας τον ακόλουθο τύπο: variable_value_stored_in_byte/255, καθώς το 255 είναι ο μέγιστος αριθμός που είναι αποθηκευμένος σε ένα byte. Η συνάρτηση glColor3dv σημαίνει ότι ένας πίνακας τριών στοιχείων τύπου GLdouble μεταβιβάζεται ως παράμετρος. Για παράδειγμα:

Διπλός πίνακας = (0,5, 0,75, 0,3);

GlColor3dv(πίνακας);

GlColor3ub(200,100,0); // μειώνεται σε

// 200/256, 100/256, 0,256

GlColor3d(0,25,0,25,0); // σκούρο κίτρινο

GlColot3ub(0,100,0); // σκούρο πράσινο

GlColor3ub(0,0,255); // μπλε

3. Απλά αντικείμενα. Γενικές διατάξεις

Σημεία, ευθείες, τρίγωνα, τετράπλευρα, πολύγωνα – απλά αντικείμενα, που συνθέτουν τυχόν σύνθετες φιγούρες. Το OpenGL δεν υποστηρίζει άμεσα συναρτήσεις για τη δημιουργία σύνθετων αντικειμένων όπως σφαίρα, κύλινδρος, τόρος κ.λπ., δηλαδή τέτοιες λειτουργίες δεν υπάρχουν στο opengl32.dll. Αυτές οι λειτουργίες βρίσκονται στη βιβλιοθήκη του βοηθητικού προγράμματος glu32.dll και είναι διατεταγμένες ως εξής. Για να σχεδιάσει μια σφαίρα, η συνάρτηση auxSolidSphere χρησιμοποιεί συναρτήσεις από τη βιβλιοθήκη glu32.dll, οι οποίες με τη σειρά τους χρησιμοποιούν τη βασική βιβλιοθήκη opengl32.dll και κατασκευάζουν μια σφαίρα από γραμμές ή πολύγωνα. Τα πρωτόγονα δημιουργούνται ως εξής:

GlBegin(λειτουργία); // υποδείξτε τι θα σχεδιάσουμε

glVertex(...); // πρώτη κορυφή

... // εδώ είναι οι υπόλοιπες κορυφές

glVertex(...); // τελευταία

//κορυφή

GlEnd(); // τελείωσε το σχέδιο του πρωτόγονου

Πρώτα πρέπει να καθορίσετε την έναρξη του σχεδίου - glΞεκινήστε με την κατάλληλη παράμετρο.

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

GlVertex2d(x, y); // δύο μεταβλητές τύπουδιπλό

GlVertex3d(x, y,z); // τρεις διπλές μεταβλητές

GlVertex2dv(πίνακας); // πίνακας μεταβλητών δύο τύπων

GlVertex3d(πίνακας); // πίνακας τριών μεταβλητών τύπων

Void glEnd(void);

Υποδεικνύει το τέλος των αντικειμένων σχεδίασης του τύπου που καθορίζεται στο glBegin. Στη συνέχεια, θα αναλύσουμε λεπτομερώς τη δημιουργία όλων των πρωτόγονων.

Πίνακας 1.

Λειτουργία πιθανών τιμών

Εννοια

Περιγραφή

Κάθε κλήση στο glVertex καθορίζει ένα διαφορετικό σημείο.

Κάθε ζεύγος κορυφών ορίζει ένα τμήμα.

Τραβιέται μια διακεκομμένη γραμμή.

Τραβιέται μια διακεκομμένη γραμμή και είναι τελευταίο σημείοσυνδέεται με το πρώτο.

Κάθε τρεις κλήσεις στο glVertex ορίζουν ένα τρίγωνο.

GL_TRIANGLE_STRIP

Σχεδιάζονται τρίγωνα με κοινή πλευρά.

Το ίδιο πράγμα, αλλά οι κορυφές συνδέονται σύμφωνα με διαφορετικό κανόνα.

Κάθε τέσσερις κλήσεις στο glVertex ορίζουν ένα τετραπλό.

Τετράπλευρα με κοινή πλευρά.

Πολύγωνο.

3.1. Πόντοι

Μπορείτε να σχεδιάσετε όσους πόντους θέλετε καλώντας το glVertex3d, ορίζοντας έτσι ένα νέο σημείο. Κατά τη δημιουργία σημείων, μπορείτε να αλλάξετε τις ακόλουθες παραμέτρους. Μπορείτε να καλέσετε το glColor3d μέσα στο glBegin/glEnd. Το μέγεθος του σημείου μπορεί να ρυθμιστεί χρησιμοποιώντας τη συνάρτηση:

Void glPointSize(Μέγεθος GLfloat);

Η λειτουργία εξομάλυνσης μπορεί να ρυθμιστεί καλώντας τη λειτουργία

GlEnable(GL_POINT_SMOOTH);

Απενεργοποιείται αναλόγως καλώντας το glDisable(GL_POINT_SMOOTH). Οι τελευταίες συναρτήσεις - glPointSize και glEnable/glDisable πρέπει να καλούνται εκτός του glBegin/glEnd, διαφορετικά θα αγνοηθούν. Οι λειτουργίες glEnable/glDisable ενεργοποιούν/απενεργοποιούν πολλές επιλογές, αλλά έχετε κατά νου ότι ορισμένες επιλογές περιλαμβάνουν μεγάλους υπολογισμούς και, επομένως, επιβραδύνουν σημαντικά την εφαρμογή, επομένως δεν πρέπει να τις ενεργοποιήσετε εκτός εάν είναι απαραίτητο.

// τραβήξτε πόντους

GlBegin(GL_POINTS);

glColor3d(1,0,0);

glVertex3d(-4,5,4,0); // πρώτο σημείο

glColor3d(0,1,0);

glVertex3d(-4,4,0); // δεύτερο σημείο

glColor3d(0,0,1);

glVertex3d(-3,5,4,0); // τρίτο

GlBegin(GL_POINTS);

glColor3d(1,0,0);

glVertex3d(-2,4,0); // πρώτο σημείο

glColor3d(0,1,0);

glVertex3d(-1,4,0); // δεύτερο σημείο

glColor3d(0,0,1);

glVertex3d(0,4,0); // τρίτο

GlPointSize(10);

GlEnable(GL_POINT_SMOOTH);

GlBegin(GL_POINTS);

glColor3d(1,0,0);

glVertex3d(2,4,0); // πρώτο σημείο

glColor3d(0,1,0);

glVertex3d(3,4,0); // δεύτερο σημείο

glColor3d(0,0,1);

glVertex3d(4,4,0); // τρίτο

GlDisable(GL_POINT_SMOOTH);

3.2. Γραμμές

Για τις γραμμές μπορείτε επίσης να αλλάξετε το πλάτος, το χρώμα, το μέγεθος και την εξομάλυνση. Αν ορίσετε διαφορετικά χρώματα για την αρχή και το τέλος μιας γραμμής, το χρώμα της θα είναι ιριδίζον. Το OpenGL κάνει παρεμβολή από προεπιλογή. Μπορείτε επίσης να σχεδιάσετε σπασμένες γραμμές, αυτό γίνεται με την εφαρμογή μιας μάσκας χρησιμοποιώντας την ακόλουθη λειτουργία:

Void glLineStipple (παράγοντας GLint, μοτίβο GLushort);

Η δεύτερη παράμετρος καθορίζει την ίδια τη μάσκα. Για παράδειγμα, εάν η τιμή του είναι 255(0x00FF), τότε για να υπολογίσουμε την καθορισμένη μάσκα θα χρησιμοποιήσουμε μια αριθμομηχανή. Σε δυαδική μορφή, αυτός ο αριθμός μοιάζει με αυτό: 0000000011111111, δηλαδή μόνο 16 bit. Οι υψηλότερες οκτώ ορίζονται στο μηδέν, πράγμα που σημαίνει ότι δεν θα υπάρχει γραμμή εδώ. Τα δευτερεύοντα έχουν οριστεί σε ένα, θα τραβηχτεί μια γραμμή εδώ. Η πρώτη παράμετρος καθορίζει πόσες φορές επαναλαμβάνεται κάθε bit. Ας πούμε, εάν το ορίσετε στο 2, τότε η μάσκα επικάλυψης θα μοιάζει με αυτό:

GlLineWidth(1); // πλάτος γραμμής

// σύνολο 1

GlBegin(GL_LINES);

glColor3d(1,0,0); // κόκκινο χρώμα

glVertex3d(-4,5,3,0); // πρώτη γραμμή

glVertex3d(-3,3,0);

glColor3d(0,1,0); // πράσινο

glVertex3d(-3,3,3,0); // δεύτερη γραμμή

glVertex3d(-4,3.4,0);

GlLineWidth(3); // πλάτος 3

GlBegin(GL_LINE_STRIP); // δείτε παρακάτω

glColor3d(1,0,0);

glVertex3d(-2,7,3,0);

glVertex3d(-1,3,0);

glColor3d(0,1,0);

glVertex3d(-1,5,3,3,0);

glColor3d(0,0,1);

glVertex3d(-1,3,5,0);

GlEnable(GL_LINE_SMOOTH);

GlEnable(GL_LINE_STIPPLE); // επιτρέψτε το σχέδιο

// διακεκομμένη γραμμή

GlLineStipple(2.58360); // ορίστε τη μάσκα

// δείτε παρακάτω για επεξηγήσεις

GlBegin(GL_LINE_LOOP);

glColor3d(1,0,0);

glVertex3d(1,3,0);

glVertex3d(4,3,0);

glColor3d(0,1,0);

glVertex3d(3,2.7,0);

glColor3d(0,0,1);

glVertex3d(2.5,3.7,0);

GlDisable(GL_LINE_SMOOTH);

GlDisable(GL_LINE_STIPPLE);

3.3. Τρίγωνα

Για ένα τρίγωνο μπορείτε να ορίσετε τις ίδιες παραμέτρους όπως για μια γραμμή, καθώς και μια ακόμη συνάρτηση

Void glPolygonMode(

Ορίζει επιλογές για τη σχεδίαση του πολυγώνου. Οι πιθανές τιμές των παραμέτρων συνάρτησης δίνονται στον Πίνακα 2.

Πίνακας 2.

Τιμές παραμέτρων συνάρτησης glPolygonMode

Η πρώτη παράμετρος καθορίζει για ποια μέρη ισχύει η επιλογή που καθορίζεται από τη δεύτερη παράμετρο. Τα τρίγωνα μπορούν να σχεδιαστούν περνώντας το GL_TRIANGLE_STRIP ή το GL_TRIANGLE_FAN στο glBegin. Στην πρώτη περίπτωση, η πρώτη, η δεύτερη και η τρίτη κορυφή ορίζουν το πρώτο τρίγωνο. Η δεύτερη, η τρίτη και η τέταρτη κορυφή είναι το δεύτερο τρίγωνο. Η τρίτη, η τέταρτη και η πέμπτη κορυφή είναι το τρίτο τρίγωνο, κ.λπ. Οι κορυφές n, n+1 και n+2 θα ορίσουν το ντο τρίγωνο. Στη δεύτερη περίπτωση, η πρώτη, η δεύτερη και η τρίτη κορυφή ορίζουν το πρώτο τρίγωνο. Η πρώτη, η τρίτη και η τέταρτη κορυφή ορίζουν το δεύτερο τρίγωνο, κλπ. Οι κορυφές 1, n+1, n+2 ορίζουν το ντο τρίγωνο. Ακολουθεί ένα παράδειγμα με σχόλια.

GlPolygonMode(GL_FRONT_AND_BACK, GL_FILL); // βλέπε παραπάνω

GlBegin(GL_TRIANGLES);

glColor3d(1,0,0); // σχεδιάστε ένα τρίγωνο

glVertex3d(-4,2,0);

glVertex3d(-3,2.9,0);

glVertex3d(-2,2,0);

//σχεδιάστε συρμάτινα τρίγωνα

GlBegin(GL_TRIANGLE_STRIP); // προσέξτε

// σειρά κορυφής

glColor3d(0,1,0);

glVertex3d(1,2,0);

glVertex3d(0,2.9,0);

glVertex3d(-1,2,0);

glVertex3d(0,1.1,0);

GlEnable(GL_LINE_STIPPLE);

GlPolygonMode(GL_FRONT_AND_BACK, GL_LINE);

GlBegin(GL_TRIANGLE_FAN);

glColor3d(0,0,1);

glVertex3d(4,2,0);

glVertex3d(2.6,2.8,0);

glVertex3d(2,2,0);

glVertex3d(3,1.1,0);

GlDisable(GL_LINE_STIPPLE);

3.4. Τετράπλευρα και πολύγωνα

Τα τετράπλευρα σχεδιάζονται καλώντας τη συνάρτηση glBegin με την παράμετρο GL_QUADS ή GL_QUAD_STRIP. Για την πρώτη περίπτωση, κάθε τέσσερις κορυφές ορίζουν το δικό τους τετράπλευρο. Στη δεύτερη περίπτωση σχεδιάζονται συνδεδεμένα τετράπλευρα. Η πρώτη, η δεύτερη, η τρίτη και η τέταρτη κορυφή ορίζουν το πρώτο τετράπλευρο. Η τρίτη, τέταρτη, πέμπτη και έκτη κορυφή ορίζουν το δεύτερο τετράπλευρο κ.λπ. Τα πολύγωνα καθορίζονται καλώντας το glBegin με την παράμετρο GL_POLYGON. Όλες οι κορυφές ορίζουν ένα πολύγωνο. Για πολύγωνα, μπορείτε να ορίσετε στυλ χρησιμοποιώντας τη συνάρτηση glPolygonMode που περιγράφεται παραπάνω, πάχος γραμμής, πάχος σημείου και χρώμα.

4. Μετακίνηση σε νέες συντεταγμένες

Στην προηγούμενη ενότητα, μάθατε πώς να σχεδιάζετε πρωτόγονα τρισδιάστατα αντικείμενα. Αλλά το πρόβλημα είναι ότι σχεδιάζονται μόνο στην αρχή, δηλαδή στο σημείο (0,0,0). Για να απεικονίσετε ένα αντικείμενο στο σημείο (x0,y0,z0), πρέπει να μετακινήσετε την αρχή των συντεταγμένων σε αυτό το σημείο, δηλαδή πρέπει να μετακινηθείτε σε νέες συντεταγμένες. Αυτή η διαδικασία είναι αρκετά συνηθισμένη κατά τον προγραμματισμό γραφικών και κινούμενων εικόνων. Συχνά, είναι πολύ βολικό να μετατοπίσετε τις συντεταγμένες σε ένα νέο σημείο και να τις περιστρέψετε στην απαιτούμενη γωνία και οι υπολογισμοί σας θα απλοποιηθούν πολύ. Υπάρχουν δύο λειτουργίες στο OpenGL για μετάβαση σε νέες συντεταγμένες:

Void glTranslated(Dx, Dy, Dz);

Void glRotated(j, x0,y0,z0);

Η πρώτη συνάρτηση μετατοπίζει την αρχή του συστήματος συντεταγμένων κατά (Dx, Dy, Dz). Το δεύτερο περιστρέφεται κατά γωνία j αριστερόστροφα γύρω από το διάνυσμα (x0,y0,z0). Τώρα, αξίζει να αναφέρουμε δύο ακόμη πολύ σημαντικές λειτουργίες:

Void glPushMatrix();

Void glPopMatrix();

Έχουν σχεδιαστεί για να αποθηκεύουν και να επαναφέρουν τις τρέχουσες συντεταγμένες. Συχνά είναι άβολο να μετακινηθείτε από το ένα σύστημα συντεταγμένων στο άλλο και να θυμάστε όλες τις μεταβάσεις. Είναι πολύ πιο βολικό να χρησιμοποιήσετε το glPushMatrix() για να αποθηκεύσετε τις τρέχουσες συντεταγμένες, στη συνέχεια να μετακινήσετε, να περιστρέψετε, όπως θέλετε και μετά να επιστρέψετε στις παλιές συντεταγμένες καλώντας το glPopMatrix. Τώρα μπορείτε να πειραματιστείτε. Ας εξετάσουμε μια μετατόπιση συντεταγμένων. Επικολλήστε τον ακόλουθο κώδικα στη λειτουργία εμφάνισης:

GlTranslated(1.4,0,0);// μετατόπιση κατά μήκος του άξονα Χ κατά 1.4

GlColor3d(0,1,0);

AuxSolidSphere(0.5); // σχεδιάστε μια σφαίρα στο (1,4,0,0)

// σε απόλυτες συντεταγμένες

GlTranslated(1,0,0); // μετακίνηση ξανά

GlColor3d(0,0,1);

AuxSolidSphere(0.3);

GlPopMatrix(); // επιστροφή στο παλιό σύστημα

// συντεταγμένες

GlColor3d(1,0,0);

AuxSolidSphere(0,75); // σχεδιάστε μια σφαίρα στο σημείο (0,0,0)

// σε απόλυτες συντεταγμένες

5. Περιστροφή συντεταγμένων

Τώρα εξετάστε την περιστροφή των συντεταγμένων. Στη λειτουργία εμφάνισης, επικολλήστε τον ακόλουθο κώδικα:

GlColor3d(1,0,0);

AuxSolidCone(1, 2); // σχεδιάστε έναν κώνο στο κέντρο των συντεταγμένων

GlPushMatrix(); // αποθήκευση των τρεχουσών συντεταγμένων

glTranslated(1,0,0); // μετακίνηση στο σημείο (1,0,0)

glRotated(75,1,0,0); // περιστρέψτε το σύστημα

// συντεταγμένες στις 75 μοίρες

glColor3d(0,1,0);

auxSolidCone(1, 2); // σχεδιάστε έναν κώνο

GlPopMatrix(); // επιστροφή στις παλιές συντεταγμένες

Όπως μπορείτε να δείτε, ο κώνος έχει περιστραφεί σε απόλυτες συντεταγμένες. Έτσι, για να σχεδιάσετε μια φιγούρα όχι στην αρχή, πρέπει:

· move(glTranslated), rotate(glRotated);

· Σχεδιάστε αυτό που θέλατε.

· επιστροφή στις παλιές συντεταγμένες.

Οι κλήσεις glPushMatrix/PopMatrix μπορούν να είναι ένθετες, π.χ.

Φυσικά, ο αριθμός των κλήσεων προς το glPopMatrix πρέπει να αντιστοιχεί στον αριθμό των κλήσεων προς το glPushMatrix, διαφορετικά η σκηνή θα πετάξει προς άγνωστη κατεύθυνση. Το μέγιστο επιτρεπόμενο βάθος ένθεσης του glPushMatrix/glPopMatrix προσδιορίζεται ως εξής:

GlGetIntegerv(GL_MAX_MODELVIEW_STACK_DEPTH, &n);

Printf("n=%d ",n);

Η προδιαγραφή OpenGL εγγυάται ότι το βάθος στοίβας δεν μπορεί να είναι μικρότερο από 32.

6. Κατασκευή επιφανειών

Υπάρχει ένα σύνολο λειτουργιών για την κατασκευή σφαιρών, κυλίνδρων και δίσκων. Αυτές οι λειτουργίες παρέχουν πολύ ισχυρό έλεγχο κατασκευής τρισδιάστατα αντικείμενα. Οι ακόλουθες λειτουργίες χρησιμοποιούνται για τη σχεδίαση επιφανειών:

GLUquadricObj * qobj,

GL διπλή ακτίνα,

Κενός γλυκοκύλινδρος (

GLUquadricObj *qobj,

GLRadius διπλής βάσης,

GLdouble topRadius,

GL διπλό ύψος,

GLUquadricObj *qobj,

GL διπλή εσωτερική ακτίνα,

GL διπλή εξωτερική ακτίνα,

Void gluPartialDisk(

GLUquadricObj *qobj,

GL διπλή εσωτερική ακτίνα,

GL διπλή εξωτερική ακτίνα,

GLdouble startAngle,

GLdouble sweepAngle

Στην αρχή αυτού του μαθήματος, μάθατε πώς να κατασκευάζετε τρισδιάστατα αντικείμενα χρησιμοποιώντας συναρτήσεις από τη Βοηθητική Βιβλιοθήκη. Οι συναρτήσεις auxSphere, auxCylinder και auxCone καλούν απλώς gluSphere και gluCylinder. Το auxCylinder και το auxCone της Microsoft έχουν σφάλματα. Εδώ θα συζητηθεί αναλυτικά η κατασκευή σφαιρών και κυλίνδρων, έτσι ώστε να μην είναι πλέον απαραίτητη η ανάγκη για auxCylinder και auxCone.

Η πρώτη παράμετρος για τα gluSphere, gluCylinder, gluDisk και gluPartialDisk είναι ένας δείκτης σε ένα αντικείμενο του τύπου GLUquadricObj. Ακολουθούν οι παράμετροι του άμεσα δημιουργημένου σχήματος. Για μια σφαίρα, αυτή είναι η ακτίνα. για έναν κύλινδρο – ακτίνα της κάτω βάσης, ακτίνα της άνω βάσης και ύψος. για δίσκο - εσωτερική ακτίνα, εξωτερική ακτίνα και για μερικό δίσκο - εσωτερική ακτίνα, εξωτερική ακτίνα, γωνία από την οποία ξεκινά η σχεδίαση, μήκος τόξου σε μοίρες προς σχεδίαση. Οι δύο τελευταίες παράμετροι είναι ίδιες για όλες αυτές τις συναρτήσεις. Αυτός είναι ο αριθμός των διαμερισμάτων γύρω από τον άξονα Z και ο αριθμός των διαμερισμάτων κατά μήκος του άξονα Z Όπως γνωρίζετε, όλα τα σύνθετα αντικείμενα αποτελούνται από απλά: σημεία, γραμμές και πολύγωνα. Είναι σαφές ότι είναι αδύνατο να σχεδιάσουμε (δημιουργήσουμε) μια τέλεια λεία σφαίρα ή κύλινδρο. Επομένως, δημιουργείται μια προσέγγιση από επίπεδα. Για να το κάνετε αυτό, πρέπει να καθορίσετε τον αριθμό των διαχωρισμών. Όσο μεγαλύτερο είναι το σχίσιμο, τόσο καλύτερα θα φαίνεται το αντικείμενό σας. Ωστόσο, δεν πρέπει να καθορίσετε έναν αριθμό με έξι μηδενικά εδώ. Αυτό δεν έχει κανένα νόημα. Ο βέλτιστος αριθμός είναι από 10 έως 20. Όσο μεγαλύτερο είναι το αντικείμενο, τόσο περισσότερα διαμερίσματα χρειάζονται. Είναι καλύτερο να ρυθμίσετε τον αριθμό των κατατμήσεων (κατά μήκος και κατά μήκος) ίδιο.

Πρώτα πρέπει να δημιουργήσετε ένα αντικείμενο τύπου GLUquadricObj χρησιμοποιώντας τη συνάρτηση

GLUquadricObj * gluNewQuadric(void);

Στη συνέχεια, πρέπει να ορίσετε τις ιδιότητες χρησιμοποιώντας τη συνάρτηση

Void gluQuadricDrawStyle(

GLUquadricObj *qobj,

Glenum drawStyle

Διαθέσιμα στυλ:

GLU_FILL – σχεδιάζεται ένα στερεό αντικείμενο.

GLU_LINE – συρμάτινο αντικείμενο.

GLU_POINT – κληρώνονται μόνο σημεία.

Μπορείτε να διαγράψετε ένα δημιουργημένο αντικείμενο χρησιμοποιώντας τη συνάρτηση

Void gluDeleteQuadric(GLUquadricObj * κατάσταση);

Τώρα μπορείτε να πειραματιστείτε. Αλλάξτε τη λειτουργία εμφάνισης ως εξής.

Κενή οθόνη (κενή)

GLUquadricObj * quadObj;

// δημιουργία νέο αντικείμενογια τη δημιουργία σφαιρών και κυλίνδρων

quadObj = gluNewQuadric();

glColor3d(1,0,0);

// στυλ σετ: συμπαγής

gluQuadricDrawStyle(quadObj, GLU_FILL);

// σχεδιάστε μια σφαίρα με ακτίνα 0,5

gluSphere(quadObj, 0,5, 10, 10);

glTranslated(-2,0,0); // μετακίνηση αριστερά

glRotated(45, 1,0,0); // περιστροφή

glColor3d(0,1,0);

// στυλ σετ: σύρμα

gluQuadricDrawStyle(quadObj, GLU_LINE);

gluCylinder(quadObj, 0,5, 0,75, 1, 15, 15);

gluDeleteQuadric(quadObj);

auxSwapBuffers();

7. Αεροπλάνα αποκοπής

Εάν θέλετε να σχεδιάσετε μια σφαίρα ή οποιοδήποτε άλλο αντικείμενο κομμένο, μπορείτε να το κάνετε χρησιμοποιώντας ένα επίπεδο αποκοπής. Μπορεί να υπάρχουν έξι αεροπλάνα κοπής. Από προεπιλογή είναι όλα απενεργοποιημένα. Το επίπεδο αποκοπής ενεργοποιείται με την εντολή glEnable(GL_CLIP_PLANE0). Το μηδέν στο τέλος του GL_CLIP_PLANE σημαίνει το επίπεδο γείωσης. μπορείτε να καθορίσετε ένα, δύο, τρία κ.λπ. Το ίδιο το επίπεδο ορίζεται από τη συνάρτηση

Void glClipPlane(

const GLdouble *εξίσωση

Το πρώτο όρισμα αυτής της συνάρτησης είναι το επίπεδο, το δεύτερο είναι ένας πίνακας τεσσάρων στοιχείων που αποθηκεύει τους συντελεστές (A, B, C, D) της εξίσωσης επιπέδου: A*x + B*y + C*z + D = 0. Αλλάξτε την οθόνη λειτουργίας όπως φαίνεται παρακάτω.

Κενή οθόνη (κενή)

GLδιπλή εξίσωση = (-1,-0,25,0,2);

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

glEnable(GL_CLIP_PLANE0);

glClipPlane(GL_CLIP_PLANE0, εξίσωση);

glColor3d(1,0,0);

auxSolidSphere(3);

glDisable(GL_CLIP_PLANE0);

auxSwapBuffers();

8. αποστολές

1. Σχεδιάστε έναν κύβο που αντιπροσωπεύει Χώρος RGB. Οι κορυφές του κύβου έχουν χρώματα: R - κόκκινο, G - πράσινο, B - μπλε, C - κυανό, M - ματζέντα, Y - κίτρινο, W - λευκό, K - μαύρο. Το χρώμα κάθε άκρης αλλάζει ομαλά από το χρώμα μιας κορυφής στο χρώμα μιας άλλης.

Αφού σχεδιαστεί ο κύβος, μετακινήστε τον έτσι ώστε η αρχή να συμπίπτει με το κέντρο του κύβου και, στη συνέχεια, περιστρέψτε τον γύρω από τον άξονα OX υπό γωνία 30° και γύρω από τον άξονα OZ υπό γωνία -20°.

2. Σχεδιάστε μια σκηνή στην οποία απεικονίζεται μια σφαίρα ακτίνας r στην αρχή. Σε απόσταση R1 από την πρώτη σφαίρα σε κάποιο σημείο (x1, y1, 0), απεικονίζεται μια σφαίρα με ακτίνα r1. Από αυτό σε απόσταση R2 σε κάποιο σημείο (x2, y2, 0) απεικονίζεται μια σφαίρα ακτίνας r2.

Αφού σχεδιαστεί η σκηνή, είναι απαραίτητο να την «αναβιώσουμε», δηλαδή να κάνουμε τη σφαίρα r1 να περιστρέφεται γύρω από τη σφαίρα r και τη σφαίρα r2 γύρω από τη r1. Για να γίνει αυτό, είναι απαραίτητο να δηλώσετε τις καθολικές μεταβλητές f1 και f2 - τις γωνίες περιστροφής, αντίστοιχα, r1 γύρω από r και r2 γύρω από r1. Στη συνέχεια, πριν από κάθε έξοδο, αυξήστε το f1f2 κατά σταθερές τιμές και υπολογίστε τα x1, y1, x2, y2 χρησιμοποιώντας τους ακόλουθους τύπους.

Σε αυτό το κεφάλαιο, θα εξετάσουμε την απόδοση τρισδιάστατων γραφικών χρησιμοποιώντας τη βιβλιοθήκη OpenGL, θα μελετήσουμε τις βιβλιοθήκες GLU και GLUT (η βιβλιοθήκη FreeGLUT χρησιμοποιείται αντί για την τελευταία στο Linux) και θα αναλύσουμε τη διαδικασία φόρτωσης υφών χρησιμοποιώντας τις βιβλιοθήκες SOIL και DevIL.

Όπως ήδη σημειώθηκε στο Κεφ. 9, Οι προγραμματιστές γραφικών συνήθως δεν λειτουργούν απευθείας με τη GPU. Αυτό οφείλεται τόσο στο γεγονός ότι υπάρχουν πολλές διαφορετικές GPU, όσο και στο ότι η εργασία χαμηλού επιπέδου με τις GPU είναι αρκετά περίπλοκη και συνήθως γίνεται από προγραμματιστές προγραμμάτων οδήγησης. Αντίθετα, χρησιμοποιούν διάφορα API που παρέχουν περισσότερη διεπαφή υψηλό επίπεδογια εργασία με GPU. Αυτή η διεπαφή αφαιρεί τη συγκεκριμένη GPU (όλη η διαχείριση γίνεται μέσω ενός προγράμματος οδήγησης, που συνήθως παρέχεται από τον κατασκευαστή της GPU), επιτρέποντάς σας να γράψετε φορητό κώδικα που θα λειτουργεί σε διαφορετικές GPU. Επίσης, ένα τέτοιο API κρύβει από τον προγραμματιστή μια σειρά από λεπτομέρειες χαμηλού επιπέδου εργασίας με τη GPU.

Τα κύρια API για τον προγραμματισμό τρισδιάστατων γραφικών σε αυτή τη στιγμήείναι το OpenGL και το Dircct3D. Το τελευταίο αφορά μόνο την πλατφόρμα Microsoft Windows. Αυτό το βιβλίο καλύπτει τα βασικά της εργασίας με το OpenGL. Αυτό είναι ένα cross-platform API που υποστηρίζει όλα τα κύρια λειτουργικά συστήματα (Windows, Linux, Mac OS X) και σας επιτρέπει να εργάζεστε με μεγάλο αριθμό διαφορετικών GPU.

Υπάρχει μια έκδοση του API - OpenGL ES, σχεδιασμένη να λειτουργεί φορητές συσκευές. Με τη βοήθειά του μπορείτε να δημιουργήσετε τρισδιάστατα γραφικά για πλατφόρμες iOSκαι Android. Επιπλέον, υπάρχει το WebGL, μια βιβλιοθήκη που σας επιτρέπει να χρησιμοποιείτε το OpenGL ES απευθείας στο παράθυρο του προγράμματος περιήγησης χρησιμοποιώντας javascript. Υπάρχουν επίσης δεσμεύσεις για την OpenGL που λειτουργούν με όλες τις κύριες γλώσσες προγραμματισμού, καθιστώντας εύκολη τη χρήση της OpenGL από σχεδόν οποιαδήποτε γλώσσα προγραμματισμού.

Το κύριο καθήκον του OpenGL είναι η απόδοση δισδιάστατων και τρισδιάστατων γραφικών. Επιπλέον, αυτό το API δεν ασχολείται καθόλου με τη δημιουργία παραθύρων για απόδοση, ανάγνωση δεδομένων από τον χρήστη και άλλη παρόμοια εργασία που εξαρτάται σε μεγάλο βαθμό από το συγκεκριμένο λειτουργικό σύστημα, επομένως θα χρησιμοποιήσουμε τη βιβλιοθήκη GLUT μεταξύ πλατφορμών για αυτούς τους σκοπούς. Αυτή η βιβλιοθήκηπαρέχει απλές και βολικό τρόπογια να δημιουργήσετε παράθυρα, να τα αποδώσετε χρησιμοποιώντας το OpenGL και να λάβετε μηνύματα από το ποντίκι και το πληκτρολόγιο.

Από την άποψη Αρχιτεκτονικές OpenGLχτισμένο πάνω στο μοντέλο πελάτη-διακομιστή.Σε αυτήν την περίπτωση, το ίδιο το πρόγραμμα, το οποίο χρησιμοποιεί OpenGL, λειτουργεί ως πελάτης και η GPU και το πρόγραμμα οδήγησης ενεργούν ως διακομιστής. Συνήθως το πρόγραμμα εκτελείται στον ίδιο υπολογιστή όπου είναι εγκατεστημένη η GPU, αλλά αυτό δεν είναι απαραίτητο.

Στην πράξη, όλες οι εντολές OpenGL που εκτελούνται αποθηκεύονται στην προσωρινή μνήμη και στη συνέχεια τοποθετούνται στην ουρά για μετάδοση στην GPU. Έτσι, η εκτέλεση μιας εντολής CPU υποδεικνύει μόνο αυτό αυτή την εντολήμπήκε στο buffer ή προστέθηκε στην ουρά. είναι πολύ πιθανό η GPU να μην έχει ξεκινήσει ακόμα να την εκτελεί. Ταυτόχρονα, το OpenGL μπορεί να θεωρηθεί ως κρατική μηχανή- έχει τη δική του περιουσία. Ο μόνος τρόπος για να αλλάξετε αυτήν την κατάσταση είναι να χρησιμοποιήσετε εντολές OpenGL. Η κατάσταση OpenGL δεν αλλάζει μεταξύ των εντολών.

Μια σημαντική έννοια στο OpenGL είναι τα buffers (Εικόνα 10.1). Για να γίνει απόδοση, πρέπει να δημιουργηθούν τα απαραίτητα buffer. Χρώμα Bufferχρησιμοποιείται πάντα και για κάθε pixel αποθηκεύει το χρώμα του ως αριθμό 24 bit Μορφή RGB(8 bit για καθένα από τα βασικά χρώματα - κόκκινο, πράσινο και μπλε) ή ως 32-bit σε μορφή RGBA (ένα τέταρτο στοιχείο προστίθεται στα τυπικά τρία συστατικά - το άλφα, το οποίο ορίζει την αδιαφάνεια).

Όταν χρησιμοποιείτε τη μέθοδο r-buffer για την αφαίρεση αόρατων επιφανειών, πρέπει να αποθηκεύσετε την αντίστοιχη τιμή βάθους για κάθε pixel (συνήθως η τιμή βάθους αποθηκεύεται ως ακέραιος αριθμός 16, 24 και 32 bit). Αντίστοιχα, σχηματίζονται όλες οι τιμές βάθους μαζί buffer βάθους.Μπορείτε επίσης να χρησιμοποιήσετε ρυθμιστικό στένσιλ, buffer συσσώρευσης.

Όταν δημιουργείτε ένα παράθυρο για απόδοση, πρέπει να δημιουργήσετε ένα περιβάλλον OpenGL και τα κατάλληλα buffer. Το ίδιο το περιβάλλον συνήθως συνδέεται με το τρέχον νήμα, επομένως εάν μια εφαρμογή χρησιμοποιεί πολλαπλά νήματα, το δημιουργημένο περιβάλλον μπορεί πραγματικά να χρησιμοποιηθεί μόνο από το νήμα όπου δημιουργήθηκε.

Η επεξεργασία δεδομένων στο OpenGL βασίζεται στη γραμμή απόδοσης (βλ. Εικόνα 9.1). Ο αγωγός ορίζει τα κύρια στάδια επεξεργασίας των εισερχόμενων δεδομένων. Το πώς ακριβώς θα γίνει η επεξεργασία των δεδομένων εξαρτάται από τις παραμέτρους κατάστασης OpenGL, αλλά αυτά τα ίδια στάδια και η σειρά με την οποία εμφανίζονται είναι αυστηρά καθορισμένα.

Ρύζι. 10.1.

Για τις σύγχρονες GPU, δύο μέρη αυτού του αγωγού αντιπροσωπεύονται από προγράμματα που εκτελούνται στη GPU, που ονομάζονται shaders. Στη συνέχεια, θα εξετάσουμε την έκδοση 2 του OpenGL, στην οποία αυτά τα προγράμματα δεν χρειάζεται να προσδιορίζονται ρητά: υπάρχουν shaders που λειτουργούν από προεπιλογή (δηλαδή, στην περίπτωση που ο προγραμματιστής δεν έχει καθορίσει ρητά τους αντίστοιχους shaders). Ξεκινώντας από την έκδοση 3, το OpenGL απαιτεί τον καθορισμό των shaders και διακόπτει εν μέρει τη συμβατότητα με προηγούμενες εκδόσεις, γι' αυτό θα εξετάσουμε Έκδοση OpenGL 2.

Η γεωμετρία ορίζεται ως ένα σύνολο κορυφών που σχηματίζουν διάφορα πρωτόγονα (σημεία, τμήματα, τρίγωνα). Σε κάθε κορυφή, εκτός από τις συντεταγμένες της, μπορείτε επίσης να ορίσετε μια σειρά από πρόσθετα χαρακτηριστικά, όπως συντεταγμένες χρώματος, κανονικής, υφής. Τα δεδομένα σε κάθε κορυφή είναι η είσοδος του σκιαστή κορυφής: για κάθε κορυφή, ο σκιαστής κορυφής εκτελεί και παράγει ορισμένες τιμές εξόδου. Η απαιτούμενη τιμή εξόδου είναι οι ομοιόμορφες συντεταγμένες κορυφής μετά την εκτέλεση όλων των μετασχηματισμών.

Το OpenGL χρησιμοποιεί πίνακες 4x4 για μετασχηματισμό κορυφής - τη μήτρα σχεδίασης προβολής μοντέλου (Εικόνα 10.2). Εάν ένας σκιαστής κορυφής δεν καθορίζεται ρητά, χρησιμοποιείται ο προεπιλεγμένος σκιαστής κορυφής, ο οποίος πολλαπλασιάζει τις συντεταγμένες κορυφής (ως διάνυσμα σε ομοιογενείς συντεταγμένες) πρώτα με τον πίνακα προβολής μοντέλου και μετά με τον πίνακα σχεδίασης.

Μετά από αυτό, τα πρωτόγονα συναρμολογούνται και αποκόπτονται: όλα τα μέρη κάθε πρωτόγονου που εκτείνονται πέρα ​​από την ορατή περιοχή (βλέποντας απογοήτευση)περικόπτονται αυτόματα έτσι ώστε τα πρωτόγονα που περιέχονται εξ ολοκλήρου στο πεδίο εφαρμογής να προχωρήσουν στο επόμενο στάδιο του αγωγού. Στη συνέχεια, το σταθερό τμήμα του αγωγού εκτελεί προοπτική διαίρεση - το διάνυσμα σε ομοιογενείς συντεταγμένες χωρίζεται στην τέταρτη συνιστώσα του.


Ρύζι. 10.2.

Εάν οι συντεταγμένες καθορίστηκαν αρχικά στο δικό τους σύστημα συντεταγμένων, τότε ο πολλαπλασιασμός με τον πίνακα προβολής μοντέλου τις μεταφέρει στο σύστημα συντεταγμένων της κάμερας. Περαιτέρω πολλαπλασιασμός με τον πίνακα προβολής φέρνει τις συντεταγμένες στο χώρο κλιπ.Αφού εκτελέσουμε την προοπτική διαίρεση παίρνουμε κανονικοποιημένες συντεταγμένες συσκευής (κανονικοποιημένες συντεταγμένες συσκευής).

Το τελευταίο βήμα είναι η μετατροπή των κανονικοποιημένων συντεταγμένων σε συντεταγμένες παραθύρου που εκφράζονται σε pixel.

Πριν από την προοπτική διαίρεση, τα πρωτόγονα συναρμολογούνται και στη συνέχεια αποκόπτονται: ό,τι δεν εμπίπτει στο πεδίο ορατότητας κόβεται. Στη συνέχεια, κάθε πρωτόγονο ραστεροποιείται, δηλ. μεταφράζεται σε ένα σύνολο θραυσμάτων. Η σειρά των τιμών που καθορίζονται στις κορυφές παρεμβάλλεται και σε κάθε θραύσμα δίνεται μια τιμή που αντιστοιχεί σε αυτήν. Μετά από αυτό, εκτελείται ένας σκιαστής θραύσματος για κάθε θραύσμα, το καθήκον του οποίου είναι να υπολογίσει το χρώμα για κάθε θραύσμα. Σε αυτήν την περίπτωση, χρησιμοποιούνται παρεμβαλλόμενες τιμές, είναι δυνατή η πρόσβαση σε υφές - προπαρασκευασμένες εικόνες που υπερτίθενται στα πρωτόγονα εξόδου. Σημειώστε ότι κάθε θραύσμα έχει τις δικές του συντεταγμένες στην οθόνη και μια παρεμβαλλόμενη τιμή βάθους Επίσης, ο σκιαστής θραύσματος, αντί να υπολογίζει το χρώμα του τμήματος, μπορεί να απορρίψει ρητά ολόκληρο το θραύσμα.

Στο επόμενο βήμα του αγωγού, εκτελείται μια ομάδα ελέγχων για κάθε θραύσμα, καθένα από τα οποία μπορεί να απορρίψει το δεδομένο θραύσμα. Ο πρώτος από αυτούς τους ελέγχους εξετάζει εάν ένα δεδομένο pixel αντιστοιχεί στο ορατό τμήμα του παραθύρου. Εάν όχι, τότε αυτό το κομμάτι απορρίπτεται αμέσως. Η ακόλουθη δοκιμή ελέγχει εάν το θραύσμα περιέχεται σε ένα δεδομένο ορθογώνιο (σε συντεταγμένες παραθύρου). Υπάρχουν επίσης δοκιμές στένσιλ και βάθους. Η δοκιμή στένσιλ ανακτά μια ομάδα δυαδικών ψηφίων που αντιστοιχούν σε ένα δεδομένο θραύσμα από την προσωρινή μνήμη του στένσιλ και ελέγχει ότι πληρούνται οι προϋποθέσεις για αυτά τα μπιτ. Η δοκιμή βάθους συγκρίνει το βάθος ενός θραύσματος με την αντίστοιχη τιμή από το buffer βάθους. Κάθε μία από αυτές τις δοκιμές μπορεί να έχει ως αποτέλεσμα την απόρριψη του αντίστοιχου θραύσματος. Επιπλέον, υπάρχει μια δοκιμή άλφα που σας επιτρέπει να απορρίψετε θραύσματα με βάση την τιμή του στοιχείου άλφα του χρώματός του.

Μετά από αυτό, εκτελείται το βήμα της ανάμειξης του χρώματος του θραύσματος με το χρώμα που αντιστοιχεί σε αυτό το θραύσμα στην προσωρινή μνήμη χρώματος. Αυτή η λειτουργίααπαιτείται για την υποστήριξη translucent™.

Ο υπολογισμός της τιμής χρώματος μπορεί να γίνει με πολύ μεγαλύτερη ακρίβεια από ό,τι μπορεί να αποθηκευτεί σε μια προσωρινή μνήμη χρώματος. Συνήθως σε αυτή την περίπτωση το χρώμα είναι απλά στρογγυλεμένο. Χρήση ραστεροποίηση (αναταραχή)παρέχει μια άλλη επιλογή: το χρώμα αλλάζει έτσι ώστε μέσοςμε βάση τα κοντινά pixel έδωσε την επιθυμητή τιμή.

Το τελευταίο βήμα είναι η εκτέλεση μιας καθορισμένης λογικής λειτουργίας bitwise μεταξύ των περιεχομένων της προσωρινής μνήμης χρώματος και της τιμής χρώματος που προκύπτει. Σημειώστε ότι πολλές από αυτές τις δοκιμές και λειτουργίες μπορούν να απενεργοποιηθούν εάν δεν χρειάζονται - αυτό συνήθως βελτιώνει την απόδοση.

Εάν γράφετε ένα πρόγραμμα χρησιμοποιώντας OpenGL σε C (ή C++), το πρώτο πράγμα που πρέπει να κάνετε είναι να συμπεριλάβετε το ακόλουθο αρχείο κεφαλίδας:

Για να διασφαλίσει τη συμβατότητα και τη φορητότητα του κώδικα, το OpenGL εισάγει έναν αριθμό από τους δικούς του τύπους δεδομένων, το όνομα καθενός από αυτούς τους τύπους αρχίζει με το πρόθεμα GL. Ταιριάζει GLint τυπικού τύπουακέραιοι, ο τύπος GLuint είναι ο τυπικός ανυπόγραφος ακέραιος τύπος και το GLfloat είναι ο τύπος float. Το OpenGL χρησιμοποιεί επίσης αρκετούς ειδικούς τύπους, όπως το GLsizei, που είναι ο τύπος που χρησιμοποιείται για τον ορισμό του μεγέθους και το GLclampf, το οποίο χρησιμοποιείται για τον ορισμό των τιμών κινητής υποδιαστολής που βρίσκονται στη γραμμή.

Ένας ειδικός τύπος GLenum εισάγεται επίσης για να υποδείξει τον τύπο των τιμών που αντιστοιχούν σε διάφορες σταθερές.

Η βιβλιοθήκη OpenGL (καθώς και οι βιβλιοθήκες GLU και GLUT που συνοδεύουν) τείνουν να χρησιμοποιούν μια αρκετά απλή σύμβαση ονομασίας για σταθερές και συναρτήσεις. Τα ονόματα όλων των εντολών (συναρτήσεων) του OpenGL ξεκινούν με το πρόθεμα gl (για συναρτήσεις από τις βιβλιοθήκες GLU και GLUT - με glu και glut, αντίστοιχα).

Τα ονόματα όλων των σταθερών ξεκινούν με GL_ (αντίστοιχα με GLU_ και GLUTJ.

Πολλές εντολές OpenGL έχουν πολλές διαφορετικές παραλλαγές, που διαφέρουν ως προς τον αριθμό των ορισμάτων που διαβιβάζονται και τους τύπους τους. Σε αυτήν την περίπτωση, το όνομα της εντολής περιλαμβάνει επίσης ένα ειδικό επίθημα που περιέχει τον αριθμό των παραμέτρων και ένα επίθημα που καθορίζει τον τύπο τους. Έτσι, το όνομα της εντολής στο OpenGL συνήθως μοιάζει με αυτό:

glCommand(1 2 3 4)(b s i f d ub us ui)(v)

Ο προαιρετικός αριθμός χρησιμοποιείται για τον καθορισμό του αριθμού των ορισμάτων που διαβιβάζονται (στην περίπτωση που υπάρχουν εκδόσεις αυτής της εντολής με διαφορετικό αριθμό ορισμάτων). Στη συνέχεια ακολουθεί ένα προαιρετικό επίθημα ενός ή δύο γραμμάτων που καθορίζει τον τύπο των ορισμάτων που μεταβιβάζονται (στην περίπτωση που υπάρχουν εκδόσεις αυτής της εντολής που δέχονται τιμές εισαγωγής διαφορετικών τύπων). Το επίθημα v υποδεικνύει ότι ένας αριθμός παραμέτρων (συνήθως το σύνολο των τελευταίων παραμέτρων) μεταβιβάζονται ως πίνακας - στην πραγματικότητα, η συνάρτηση λαμβάνει έναν δείκτη σε αυτόν τον πίνακα αντί για αυτές τις παραμέτρους.

Έτσι, η εντολή glVertex2i έχει δύο ακέραια ορίσματα, η εντολή glColor3f έχει τρία ορίσματα τύπου float και η εντολή glColor4ubv έχει τέσσερα ανυπόγραφα ορίσματα τύπου byte που μεταβιβάζονται ως πίνακας (δηλαδή, όταν καλείται η συνάρτηση, λαμβάνει μόνο ένα όρισμα - τη διεύθυνση της συστοιχίας).

Διαβάζετε το πρώτο μου σεμινάριο OpenGL!

Πριν ξεκινήσετε να μαθαίνετε το ίδιο το OpenGL, μου φαίνεται ότι είναι καλύτερο να σας πω πώς να μεταγλωττίσετε τον κώδικα, να τον εκτελέσετε και, κυρίως, πώς να πειραματιστείτε με τους πηγαίους κώδικες που δίνονται σε αυτά τα μαθήματα.

Τι πρέπει να ξέρετε

Αυτά τα μαθήματα απευθύνονται σε αναγνώστες χωρίς ιδιαίτερες γνώσεις προγραμματισμού. Φυσικά, η γνώση οποιασδήποτε γλώσσας προγραμματισμού (C, Java, Lisp, JavaSript) θα είναι ένα τεράστιο πλεονέκτημα, αλλά αυτό δεν είναι απαραίτητο, απλά πρέπει να μελετήσετε δύο μαθήματα ταυτόχρονα - τρισδιάστατα γραφικά και προγραμματισμό.

Όλος ο κώδικας σε αυτά τα μαθήματα είναι γραμμένος σε C++ με το απλούστερο δυνατό στυλ. Χωρίς πρότυπα, κλάσεις ή αριθμητική δείκτη. Επομένως, κοιτάζοντας τον κώδικα, μπορείτε να καταλάβετε τι κάνει, ακόμα κι αν είστε εξοικειωμένοι μόνο με τη JavaSript.

Ξεχάστε όλα όσα ξέρατε για το OpenGL 1/2

Αυτά τα μαθήματα υποθέτουν ότι δεν γνωρίζετε τίποτα για τα τρισδιάστατα γραφικά. Αλλά αν έχετε διαβάσει μαθήματα OpenGL και συναντήσετε κάτι σαν glBegin(), τότε ξεχάστε το. Εδώ θα μελετήσουμε το OpenGL 3 και 4 και αυτό που διαβάσατε ισχύει για το OpenGL 1 ή 2. Επομένως, σας συνιστώ να ξεχάσετε όλα όσα ξέρατε πριν, διαφορετικά ο εγκέφαλός σας θα αρχίσει να λιώνει από τις ασυνέπειες.

Κατασκευή του έργου

Ο κώδικας από αυτά τα μαθήματα μπορεί να μεταγλωττιστεί για Windows και Linux. Για να ξεκινήσετε τη μεταγλώττιση κώδικα για οποιαδήποτε από τις πλατφόρμες, πρέπει να κάνετε τα εξής:

  1. Ενημερώστε τα προγράμματα οδήγησης για την κάρτα γραφικών σας!! σε προειδοποίησα :)
  2. Κάντε λήψη του μεταγλωττιστή εάν δεν τον έχετε ήδη.
  3. Εγκαταστήστε το CMake
  4. Κατεβάστε έτοιμες πηγές μαθήματος.
  5. Δημιουργήστε το έργο χρησιμοποιώντας το CMake
  6. Συγκεντρώστε το έργο.
  7. Πειραματιστείτε με τον κώδικα για να κατανοήσετε καλύτερα τι συμβαίνει εκεί.

Παρακάτω έχω δώσει μια πιο λεπτομερή περιγραφή των έργων συναρμολόγησης για κάθε πλατφόρμα. Αλλά ανάλογα με την έκδοση του λειτουργικού συστήματος, τα στιγμιότυπα οθόνης μπορεί να διαφέρουν ελαφρώς από αυτά που θα εμφανιστούν στην οθόνη σας, αλλά γενικά, όλα θα πρέπει να είναι περίπου τα ίδια.

Συναρμολόγηση για Windows


Δημιουργία για Linux

Υπάρχει ένας τεράστιος αριθμός διαφορετικών παραλλαγών του Linux στον κόσμο, επομένως δεν θέλω να δώσω παραδείγματα συναρμολόγησης ενός έργου για το καθένα. Εάν κάτι δεν λειτουργεί όπως περιγράφεται παρακάτω, διαβάστε την τεκμηρίωση ή ψάξτε στο Διαδίκτυο.

  1. Εγκαταστήστε τα πιο πρόσφατα προγράμματα οδήγησης για την κάρτα γραφικών σας. Συνιστώ ανεπιφύλακτα προγράμματα οδήγησης που δεν είναι ανοιχτού κώδικα. Δεν περιλαμβάνονται στο GNU, αλλά συχνά λειτουργούν πολύ καλύτερα. Εάν η έκδοση Linux δεν παρέχειαυτόματο πρόγραμμα εγκατάστασης
  2. , δοκιμάστε να διαβάσετε τον οδηγό του Ubuntu. Εγκαταστήστε τον μεταγλωττιστή με όλααπαραίτητες βιβλιοθήκες
  3. και εργαλεία. Ακολουθεί μια λίστα με αυτά που χρειάζεστε: cmake make g++ libx11-dev libgl1-mesa-dev libglu1-mesa-dev libxrandr-dev libxext-dev. Χρησιμοποιήστε sudo apt-get install ***** ή su /yum install ******
  4. Μεταβείτε στο ~/Projects/OpenGLTutorials/ και πληκτρολογήστε τις ακόλουθες εντολές:
  • mkdir κατασκευή
  • κατασκευή cd
  • cmake..
  1. Εάν οι προηγούμενες εντολές εκτελέστηκαν με επιτυχία, θα δημιουργηθεί ένα makefile στο build/folder
  2. πληκτρολογήστε "make all" και μετά από αυτό θα συγκεντρωθούν όλα τα παραδείγματα και οι εξαρτήσεις τους. Εάν δεν υπάρχουν σφάλματα, τότε έτοιμο εκτελέσιμα αρχείαθα τοποθετηθεί στον φάκελο ~/Projects/OpenGLTutorials/

Μου αρέσει πολύ να χρησιμοποιώ το QtCreator IDE. Αυτό το IDE μπορεί να λειτουργήσει με το CMake out of the box και παρέχει ένα σωρό άλλα καλούδια, όπως εντοπισμό σφαλμάτων, αυτόματη συμπλήρωση κ.λπ.

Οδηγίες για την κατασκευή ενός έργου στο QtCreator:

1. Στο QtCreator κάντε κλικ Αρχείο->Εργαλεία->Επιλογές->Συμπλήρωση&Εκτέλεση->CMake

2. Καθορίστε τη διαδρομή προς το CMake. Αυτό πιθανότατα θα είναι /usr/bin/cmake

3. File-> Ανοίξτε το Project και επιλέξτε tutorials/CMakeLists.txt

4. Καθορίστε το φάκελο κατασκευής, ο φάκελος θα πρέπει κατά προτίμηση να βρίσκεται εκτός του φακέλου tutorials.

5. Προαιρετικά ορίζεται –DCMAKE_BUILD_TYPE=Εντοπισμός σφαλμάτων στο πεδίο επιλογών.

6. Κλικ στο σφυρί από κάτω.Μετά από αυτό, τα παραδείγματα μπορούν να εκτελεστούν από τον φάκελο tutorials/

7. Για να εκτελέσετε παραδείγματα από το QtCreator, επιλέξτε Έργα -> Παράμετροι εκτέλεσης -> Κατάλογος εργασίας και επιλέξτε τον κατάλογο όπου βρίσκονται οι σκιαδιστές υφής και μοντέλου. Για το tutorial 2 θα είναι ~/opengl -tutorial /tutorial02_red_triangle/

Παραδείγματα τρεξίματος

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

Πώς να πάρετε αυτά τα μαθήματα

Κάθε μάθημα συνοδεύεται από πηγαίος κώδικαςκαι δεδομένα. Όλα αυτά τα αρχεία βρίσκονται στον αντίστοιχο κατάλογο tutorialXX/.

Αλλά σας συνιστώ να μην αλλάξετε τίποτα σε αυτά τα αρχεία, είναι μόνο για αναφορά. Είναι καλύτερα να παίξετε σε playground/playground.cpp και να αλλάξετε ό,τι θέλετε εκεί. Εάν σπάσετε κάτι και δεν μπορείτε να το επαναφέρετε, μπορείτε να επιστρέψετε αυτό το αρχείο απλώς αντιγράφοντας το από οποιοδήποτε άλλο μάθημα.

Καθώς διαβάζετε αυτά τα σεμινάρια, θα βλέπετε κομμάτια κώδικα παντού. Μη διστάσετε να τα αντιγράψετε στο playground.cpp για να τα δείτε σε δράση - ο πειραματισμός είναι πάντα καλός. Θα το ξαναπώ, μην διαβάζετε μόνο. έτοιμος κωδικόςκαι προσπαθήστε να το εκκινήσετε. Δεν θα μάθετε πολλά μόνο διαβάζοντας τον πηγαίο κώδικα. Ακόμα και με απλό copy-paste, θα αποκτήσετε τον δικό σας κουβά με προβλήματα, λύνοντας τα οποία θα αποκτήσετε την απαραίτητη εμπειρία.

Ανοίγοντας το παράθυρο

Τελικά! OpenGL!

Ωστόσο, θα πρέπει να περιμένετε λίγο ακόμα. Σε όλα τα μαθήματα, οι τρισδιάστατες λειτουργίες θα εκτελούνται σε πολύ χαμηλό επίπεδο, οπότε δεν θα υπάρχει μαγεία για εσάς. Ωστόσο, η εργασία με παράθυρα συστήματος και μηνύματα δεν είναι ενδιαφέρουσα και βαρετή, επομένως θα αφήσουμε τη βιβλιοθήκη GLFW να κάνει τη βρώμικη δουλειά για εμάς. Εάν το θέλετε πραγματικά, μπορείτε να χρησιμοποιήσετε το Win32 Api για Windows ή το X11 API για Linux ή να χρησιμοποιήσετε κάτι άλλο όπως SFML, FreeGLUT, SDL, ... διαβάστε τη σελίδα συνδέσμου.

Εντάξει, ας ξεκινήσουμε ήδη. Ας ξεκινήσουμε με το γεγονός ότι πρέπει να συνδέσουμε εξαρτήσεις. Εφόσον πρέπει να εξάγουμε μηνύματα στην κονσόλα, θα γράψουμε τα εξής:

// Σύνδεση τυπικών κεφαλίδων

#συμπεριλαμβάνω

#συμπεριλαμβάνω

Στη συνέχεια συνδέουμε το GLEW

// Δεν πρέπει να το ξεχνάμε αυτό GLEW πρέπει να συνδεθεί πριν gl . η ή glfw . η

#συμπεριλαμβάνω

Στη συνέχεια συνδέουμε το GLFW. Αυτή η βιβλιοθήκη θα κάνει όλη τη μαγική διαχείριση παραθύρων.

#συμπεριλαμβάνω

Δεν χρειαζόμαστε αυτήν τη βιβλιοθήκη σε αυτό το στάδιο, αλλά περιέχει μαθηματικές συναρτήσεις και θα τη χρειαστούμε σύντομα. Δεν υπάρχει μαγεία στο GLM, και αν το θέλετε πραγματικά, μπορείτε να χρησιμοποιήσετε οποιαδήποτε άλλη βιβλιοθήκη για εργασία με πίνακες και διανύσματα. Περιλαμβάνουμε "χρήση χώρου ονομάτων" για να γράψουμε "vec3" και όχι "glm::vec3"

#συμπεριλαμβάνω

χρήση χώρου ονομάτων glm.

Εάν αντιγράψετε αυτά τα κομμάτια κώδικα στο playground.cpp, ο μεταγλωττιστής θα αρχίσει να παραπονιέται ότι δεν υπάρχει συνάρτηση main(). Ας προσθέσουμε λοιπόν:

int main())(

Θα ήταν καλύτερα να αρχικοποιήσετε πρώτα το GLFW:

// Αρχικοποίηση GLFW

if(!glfwInit())

{

fprintf(stderr, "Απέτυχε η προετοιμασία του GLFW\n");

επιστροφή -1;

}

Τώρα ας δημιουργήσουμε το παράθυρο OpenGL μας:

glfwOpenWindowHint( GLFW_ FSAA_ ΔΕΙΓΜΑΤΑ, 4); // 4 xεξομάλυνση

glfwOpenWindowHint(GLFW_OPENGL_VERSION_MAJOR, 3); //μας χρειάζεται OpenGL 3.3

glfwOpenWindowHint(GLFW_OPENGL_VERSION_MINOR, 3);

glfwOpenWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); // μας Δεν χρειάζεται παλιός OpenGL

// Ας ανοίξουμε ένα παράθυρο και ας δημιουργήσουμε ένα πλαίσιο

if(!glfwOpenWindow(1024, 768, 0,0,0,0, 32,0, GLFW_WINDOW))

{

fprintf(stderr, "Αποτυχία ανοίγματος παραθύρου GLFW\n");

Η υποβολή της καλής σας δουλειάς στη βάση γνώσεων είναι εύκολη. Χρησιμοποιήστε την παρακάτω φόρμα

Φοιτητές, μεταπτυχιακοί φοιτητές, νέοι επιστήμονες που χρησιμοποιούν τη βάση γνώσεων στις σπουδές και την εργασία τους θα σας είναι πολύ ευγνώμονες.

Δημοσιεύτηκε στις http://www.allbest.ru/

Το OpenGL είναι διεπαφή λογισμικούστο υλικό γραφικών. Αυτή η διεπαφή αποτελείται από περίπου 250 ατομικές ομάδες(περίπου 200 εντολές στο ίδιο το OpenGL και άλλες 50 στη βιβλιοθήκη του βοηθητικού προγράμματος) που χρησιμοποιούνται για τον καθορισμό αντικειμένων και λειτουργιών που πρέπει να εκτελεστούν για την απόκτηση διαδραστική εφαρμογή, δουλεύοντας με 3D γραφικά. γραφική διεπαφή προγραμματισμού opengl

Η βιβλιοθήκη OpenGL έχει σχεδιαστεί ως μια γενικευμένη, ανεξάρτητη διεπαφή που μπορεί να υλοποιηθεί για διάφορους μηχανήματα υπολογιστών. Για το λόγο αυτό, το ίδιο το OpenGL δεν περιλαμβάνει λειτουργίες για τη δημιουργία παραθύρων ή για τη λήψη εισαγωγή χρήστη; Για αυτές τις λειτουργίες, πρέπει να χρησιμοποιήσετε τα εργαλεία του λειτουργικού συστήματος στο οποίο εργάζεστε. Για τους ίδιους λόγους, το OpenGL δεν διαθέτει λειτουργίες υψηλού επιπέδου για την περιγραφή μοντέλων τρισδιάστατων αντικειμένων. Τέτοιες εντολές θα σας επιτρέψουν να περιγράψετε σχετικά πολύπλοκα σχήματα, όπως αυτοκίνητα, μέρη ανθρώπινου σώματος ή μόρια. Όταν χρησιμοποιείτε τη βιβλιοθήκη OpenGL, πρέπει να δημιουργήσετε τα απαραίτητα μοντέλα χρησιμοποιώντας ένα μικρό σύνολο γεωμετρικών αρχέγονων στοιχείων - σημεία, γραμμές και πολύγωνα (πολύγωνα).

Ωστόσο, μια βιβλιοθήκη που παρέχει τις περιγραφόμενες δυνατότητες μπορεί να δημιουργηθεί πάνω από το OpenGL. Η OpenGL Utility Library (GLU) παρέχει πολλά εργαλεία μοντελοποίησης, όπως τετραγωνικές επιφάνειες, καμπύλες και επιφάνειες NURBS. Το GLU είναι ένα τυπικό μέρος οποιασδήποτε εφαρμογής OpenGL. Υπάρχουν επίσης βιβλιοθήκες υψηλότερου επιπέδου, όπως το Fahrenheit Scene Graph (FSG), οι οποίες κατασκευάζονται με χρήση OpenGL και διανέμονται ξεχωριστά για πολλές από τις υλοποιήσεις του.

Η ακόλουθη λίστα περιγράφει συνοπτικά τις βασικές λειτουργίες γραφικών που εκτελεί το OpenGL για την εμφάνιση εικόνων στην οθόνη.

1. Κατασκευάζει σχήματα από γεωμετρικά πρωτόγονα, δημιουργώντας μια μαθηματική περιγραφή αντικειμένων (τα πρωτόγονα στο OpenGL είναι σημεία, γραμμές, πολύγωνα, bitmaps και εικόνες).

2. Τοποθετεί αντικείμενα σε τρισδιάστατο χώρο και επιλέγει ένα σημείο παρατήρησης για να προβάλει τη σύνθεση που προκύπτει.

3. Υπολογίζει τα χρώματα για όλα τα αντικείμενα. Τα χρώματα μπορούν να καθοριστούν από την εφαρμογή, που προέρχονται από συνθήκες φωτισμού, που υπολογίζονται χρησιμοποιώντας υφές που εφαρμόζονται σε αντικείμενα ή οποιονδήποτε συνδυασμό αυτών των παραγόντων.

4. Μετατρέπει μια μαθηματική περιγραφή αντικειμένων και τις σχετικές πληροφορίες χρώματος σε pixel στην οθόνη. Αυτή η διαδικασία ονομάζεται ραστεροποίηση (ή ραστεροποίηση).

Κατά τη διάρκεια όλων αυτών των σταδίων, το OpenGL μπορεί να εκτελέσει άλλες λειτουργίες, όπως αφαίρεση τμημάτων αντικειμένων που είναι κρυμμένα από άλλα αντικείμενα. Επιπλέον, μετά την ραστεροποίηση της σκηνής αλλά προτού αποδοθεί στην οθόνη, μπορείτε να εκτελέσετε ορισμένες λειτουργίες στα δεδομένα pixel εάν είναι απαραίτητο.

Γενική διαδικασία για την εργασία με Βιβλιοθήκη OpenGlείναι:

1. Αρχικοποιήστε το παράθυρο (λάβετε την περιοχή για την εμφάνιση της εικόνας)

2. Εγκαταστήστε την κάμερα

3. Ανάψτε το φως (αν χρειάζεται)

4. Στον βρόχο, ξεκινήστε να σχεδιάζετε πρωτόγονα (σημεία, γραμμές, πολύγωνα), καθαρίζοντας πρώτα το παράθυρο από το προηγούμενο σχέδιο.

Αρχικοποίηση του παραθύρου.

Εάν εργάζεστε σε Visual C++, τότε το παράθυρο δημιουργείται χρησιμοποιώντας τις συναρτήσεις

auxInitDisplayMode

Ο κύριος βρόχος σχεδίασης πλαισίου δημιουργείται στη συνάρτηση Draw και καταχωρείται χρησιμοποιώντας τη συνάρτηση

auxMainLoop(Draw);

static void CALLBACK Draw(void) // δημιουργήθηκε από χρήστη

// θέση του παραθύρου OpenGL στην οθόνη

auxInitPosition(100, 100, windowW, windowH);

// ρύθμιση βασικών παραμέτρων για τη λειτουργία OpenGL

// Λειτουργία χρώματος RGB | ενεργοποίηση του buffer Z για ταξινόμηση βάθους

// |Διπλή προσωρινή αποθήκευση

auxInitDisplayMode(AUX_RGB | AUX_DEPTH | AUX_DOUBLE);

// αρχικοποιήστε το παράθυρο OpenGL με τίτλο

if(auxInitWindow("Παράδειγμα1") ==GL_FALSE) auxQuit();

// καταχωρήστε μια συνάρτηση που καλείται κατά την επανασχεδίαση

// και ξεκινήστε τον βρόχο συμβάντος

// Draw() - συνάρτηση χρήστη

auxMainLoop(Draw);

Εάν εργάζεστε στο Borland C++ Builder, τότε για να αρχικοποιήσετε το παράθυρο, πρέπει να λάβετε ένα Handle (ένα μοναδικό αναγνωριστικό Windows windows) του παραθύρου στο οποίο θα σχεδιάσετε. Η λαβή υπάρχει σε όλα τα παράθυρα εφαρμογών ανώτατου επιπέδου και στα περισσότερα θυγατρικά παράθυρα. Στα παραδείγματά μας θα σχεδιάσουμε ένα θυγατρικό παράθυρο StaticText.

Στη συνέχεια πρέπει να δημιουργήσουμε ένα πλαίσιο σχεδίασης (πλαίσιο συσκευής) και να ορίσουμε τη μορφή του. Για να γίνει αυτό, αρχικοποιείται η δομή PIXELFORMATDESCRIPTOR (μορφή περιγραφής pixel). Αυτό το πλαίσιο περιγράφει εάν χρειαζόμαστε υποστήριξη buffer βάθους, διπλή αποθήκευσηκαι τα λοιπά.).

Στη συνέχεια, ακολουθήστε τις λειτουργίες:

ΕπιλέξτεPixelFormat

Δημιουργείται ένα πλαίσιο σχεδίασης OpenGL:

wglCreateContext(hdc);

Και στη συνέχεια συνδέονται τα περιβάλλοντα OpenGL και Windows:

wglMakeCurrent(hdc, hrc)

void __fastcall TFormMain::FormCreate(TObject *Sender)

// πάρτε το HANDLE του παραθύρου StaticText

στατικό HWND Handle=a->Handle;

// δημιουργήστε μια λαβή θέσης σχεδίασης για το παράθυρο StaticText

hdc = GetDC(Handle);

// ορίστε τις κατάλληλες ρυθμίσεις περιβάλλοντος συσκευής

PIXELFORMATDESCRIPTOR pfd = (

sizeof(PIXELFORMATDESCRIPTOR),

PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER,

// επιλέξτε την κατάλληλη μορφή

PixelFormat = ChoosePixelFormat(hdc, &pfd);

SetPixelFormat(hdc, PixelFormat, &pfd);

// δημιουργήστε ένα περιβάλλον συσκευής για το OpenGL

// χρησιμοποιώντας τη λαβή θέσης σχεδίασης

hrc = wglCreateContext(hdc);

ShowMessage(":-)~ hrc == NULL");

if(wglMakeCurrent(hdc, hrc) == false)

ShowMessage ("Δεν ήταν δυνατή η δημιουργία ρεύματος");

Εγκατάσταση κάμερας

Από προεπιλογή, η κάμερα είναι τοποθετημένη στην αρχή (0, 0, 0), στραμμένη κατά μήκος της κατεύθυνσης του αρνητικού άξονα z και το διάνυσμα κατεύθυνσης προς τα επάνω είναι (0, 1, 0).

Για να εγκαταστήσετε την κάμερα, είναι βολικό να χρησιμοποιήσετε τη λειτουργία gluLookAt(). Αν και έχει 9 παραμέτρους, είναι εύκολα κατανοητές. Χωρίζονται σε τρεις παραμέτρους, αντίστοιχα για τρία σημεία: Eye (Eye), Center, Up.

Το μάτι καθορίζει το σημείο από το οποίο κοιτάμε, το Κέντρο καθορίζει πού κοιτάμε και το διάνυσμα της κορυφής καθορίζει πού πρέπει να έχουμε την κορυφή (φανταστείτε έναν πιλότο σε ένα αεροπλάνο να πετάει με το κεφάλι κάτω). Είναι βολικό να περικλείονται διανύσματα σε κλάσεις με παρακαμφθείσες πράξεις.

gluLookAt(e.x,e.y,e.z, c.x,c.y,c.z, u.x,u.y,u.z);

Ο κύριος βρόχος περιλαμβάνει τα ακόλουθα βήματα σχεδίασης πλαισίου:

1. Διαγραφή buffer από τη σχεδίαση της προηγούμενης εικόνας

2. Λειτουργίες σχεδίασης πρωτόγονων

3. Λειτουργίες για την ολοκλήρωση της σχεδίασης και την αναμονή απάντησης από την κάρτα βίντεο

4. Λειτουργίες αντιγραφής εικόνων από τη μνήμη στην οθόνη

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

Εάν εργάζεστε σε Visual C, τότε αυτό γίνεται χρησιμοποιώντας συναρτήσεις των οποίων τα πρωτότυπα περιγράφονται στο αρχείο glaux.h:

auxReshapeFunc()

Εάν εργάζεστε στο Borland C, τότε η επεξεργασία εκδηλώσεων πραγματοποιείται παραδοσιακά για όσους δημιουργούνται από αυτό περιβάλλον λογισμικούτρόπος: απλά επιλέγετε ένα στοιχείο (για παράδειγμα, Κουμπί1), δημιουργείτε έναν χειριστή (για παράδειγμα, ένα πάτημα πλήκτρων) και μέσα περιγράφετε το σώμα της συνάρτησης.

Σχεδιάζοντας πρωτόγονα

Η σχεδίαση πρωτόγονων γίνεται με τις εντολές glBegin() και glEnd().

Η σταθερά που μεταβιβάζεται στη συνάρτηση glBegin καθορίζει τον τύπο του αρχέγονου που θα σχεδιαστεί

Οι συντεταγμένες των σημείων καθορίζονται από ένα τρισδιάστατο χωρικό διάνυσμα. Τα χρώματα καθορίζονται από τρεις (RGB) ή τέσσερις (RGBA) παραμέτρους. Στο παράδειγμά μας, η τιμή του στοιχείου χρώματος κάθε χρώματος μπορεί να ποικίλει από 0 έως 1. Εάν έχετε συνηθίσει στην τιμή του στοιχείου χρώματος από 0 έως 255 (MsPaint), τότε χρησιμοποιήστε το glColor3ub(255,0,0 ) λειτουργία. Το επίθημα ub σημαίνει ανυπόγραφο byte.

Φωτισμός μέσα Γραφικά υπολογιστώνέχει 3 εξαρτήματα

Η ακτινοβολία υποβάθρου είναι φως που κατανέμεται τόσο από το περιβάλλον (αντικείμενα, τοίχοι κ.λπ.) που δεν μπορεί να προσδιοριστεί η κατεύθυνσή του - φαίνεται να προέρχεται από παντού. Λυχνία φως ημέραςέχει ένα μεγάλο στοιχείο φόντου, επειδή το μεγαλύτερο μέρος του φωτός που φτάνει στο μάτι σας αντανακλάται πρώτα από πολλές επιφάνειες. Ένα φως του δρόμου έχει μια μικρή συνιστώσα φόντου: το μεγαλύτερο μέρος του φωτός του έρχεται προς μία κατεύθυνση, και εφόσον είναι σε εξωτερικό χώρο, πολύ λίγο φως χτυπά το μάτι σας αφού αναπηδήσει από άλλα αντικείμενα. Όταν το φως του φόντου χτυπά μια επιφάνεια, κατανέμεται εξίσου προς όλες τις κατευθύνσεις.

Η διάχυτη συνιστώσα είναι το φως που προέρχεται από μία κατεύθυνση, επομένως φαίνεται πιο φωτεινό εάν προσκρούσει σε μια επιφάνεια σε ορθή γωνία και εμφανίζεται αμυδρό εάν την ακουμπήσει μόνο για λίγο. Ωστόσο, όταν προσκρούει σε μια επιφάνεια, κατανέμεται εξίσου προς όλες τις κατευθύνσεις, που σημαίνει ότι η φωτεινότητά του είναι η ίδια ανεξάρτητα από την πλευρά που κοιτάξετε την επιφάνεια. Είναι πιθανό ότι οποιοδήποτε φως προέρχεται από μια συγκεκριμένη κατεύθυνση ή θέση έχει μια διάχυτη συνιστώσα.

Το κατοπτρικό φως προέρχεται από μια συγκεκριμένη κατεύθυνση και ανακλάται από μια επιφάνεια σε μια συγκεκριμένη κατεύθυνση. Όταν αντανακλάται μια καλά εστιασμένη ακτίνα λέιζερσχεδόν το 100 τοις εκατό προέρχεται από έναν καθρέφτη υψηλής ποιότητας εικόνα καθρέφτη. Το γυαλιστερό μέταλλο ή πλαστικό έχει ένα υψηλό κατοπτρικό συστατικό, αλλά ένα κομμάτι χαλί ή ένα βελούδινο παιχνίδι δεν έχει. Μπορείτε να σκεφτείτε την κερδοσκοπία ως το πόσο γυαλιστερό εμφανίζεται ένα υλικό.

Εκτός από τα χρώματα του φόντου, τα διάχυτα και τα κατοπτρικά χρώματα, τα υλικά μπορούν επίσης να έχουν ένα εκπεμπόμενο χρώμα που προσομοιώνει το φως που προέρχεται από το ίδιο το αντικείμενο. Στο μοντέλο φωτισμού OpenGL, το εξερχόμενο επιφανειακό φως προσθέτει ένταση σε ένα αντικείμενο, αλλά δεν επηρεάζεται από οποιεσδήποτε πηγές φωτός και δεν παράγει επιπλέον φως στη σκηνή στο σύνολό της.

Αν και η πηγή φωτός εκπέμπει μια ενιαία κατανομή συχνότητας, τα στοιχεία φόντου, διάχυσης και κατοπτρισμού μπορεί να είναι διαφορετικά. Για παράδειγμα, αν το δωμάτιό σας έχει κόκκινους τοίχους και λευκό φως, τότε αυτό το φως, που αντανακλάται από τους τοίχους, θα είναι περισσότερο κόκκινο παρά λευκό (παρά το γεγονός ότι το φως που πέφτει στον τοίχο είναι λευκό). Το OpenGL σάς επιτρέπει να ορίσετε τις τιμές του κόκκινου, του πράσινου και του μπλε ανεξάρτητα για κάθε φωτεινό στοιχείο.

Οι εντολές που χρησιμοποιούνται για τη ρύθμιση του υλικού είναι:

// περιπτώσεις για φως και υλικό

// Ενεργοποίηση πηγής φωτός με αριθμό μηδέν

glEnable(GL_LIGHT0);

// ορίστε τη θέση και τα στοιχεία χρώματος της πηγής φωτός

glLightfv(GL_LIGHT0, GL_POSITION, LL.pos);

glLightfv(GL_LIGHT0, GL_AMBIENT, LL.amb);

glLightfv(GL_LIGHT0, GL_DIFFUSE, LL.dif);

glLightfv(GL_LIGHT0, GL_SPECULAR, LL.spec);

// ενεργοποίηση λειτουργίας σκίασης/φωτισμού

glEnable(GL_LIGHTING);

// ορίστε τις παραμέτρους του υλικού του αντικειμένου

// στα μπροστινά πρόσωπα --- GL_FRONT για τα πίσω GL_BACK και για τα δύο - GL_FRONT_AND_BACK

// δεύτερη παράμετρος - ποιο συστατικό του υλικού

// πιθανά GL_AMBIENT, GL_DIFFUSE, GL_SPECULAR, GL_EMISSION, GL_SHININESS

// αντιστοίχως ΚΑΤΑΝΟΜΕΝΑ, ΑΝΑΠΤΥΛΑΣΜΕΝΟ, ΚΑΘΡΕΦΤΗΣ, ΑΥΤΟΕΚΠΟΜΠΗ, κατοπτρική ένδειξη έκλαμψης

glMaterialfv(GL_FRONT,GL_AMBIENT,MM.amb);

glMaterialfv(GL_FRONT,GL_DIFFUSE,MM.dif);

glMaterialfv(GL_FRONT,GL_SPECULAR,MM.spec);

glMaterialf(GL_FRONT,GL_SHININESS,MM.pos);

glNormal3f(0,0,1);

glBegin(GL_QUADS);

για(i=-10; i<20;i++)

for(j=-10;j<20;j++)

glVertex3f(i,j,0);

glVertex3f(i+1,j,0);

glVertex3f(i+1,j+1,0);

glVertex3f(i,j+1,0);

Σύναψη

Το σύστημα OpenGL είναι μια ευέλικτη διαδικαστική διεπαφή που επιτρέπει στον προγραμματιστή να αναπτύξει διάφορες εφαρμογές χρησιμοποιώντας τρισδιάστατα γραφικά. Το πρότυπο δεν περιέχει κανονισμούς για την περιγραφή της δομής των γραφικών αντικειμένων, η κύρια προσοχή δίνεται στην περιγραφή της διαδικασίας οπτικοποίησης τους. Χάρη σε αυτό, η απόδοση του υπάρχοντος εξοπλισμού αυξάνεται: από απλές συσκευές που χρησιμοποιούν μόνο buffer πλαισίων έως σύγχρονα συστήματα γραφικών ικανά να αποδίδουν τρισδιάστατα αντικείμενα σε επίπεδο υλικού. Το OpenGL παρέχει μόνο δυνατότητες για έξοδο εικόνας, η οργάνωση της εισαγωγής επαφίεται εξ ολοκλήρου στο συγκεκριμένο σύστημα παραθύρων, το οποίο επιτρέπει την πρόσθετη ανεξαρτησία του υλικού των εφαρμογών.

Λόγω της ελάχιστης χρήσης πολύπλοκων δομών για την αναπαράσταση τρισδιάστατων αντικειμένων, είναι δυνατό να χρησιμοποιηθεί το OpenGL ως βάση για τη δημιουργία βιβλιοθηκών για τη διαχείριση δομημένων αντικειμένων. Παραδείγματα τέτοιων βιβλιοθηκών περιλαμβάνουν αντικειμενοστραφή πακέτα εργαλείων που χρησιμοποιούνται για την απεικόνιση και τη μοντελοποίηση πολύπλοκων γραφικών δομών

Δημοσιεύτηκε στο Allbest.ru

Παρόμοια έγγραφα

    Κωδικός OpenGL. Σύνταξη εντολής OpenGL. Το OpenGL ως κρατική μηχανή. Σωλήνας απόδοσης OpenGL. Βιβλιοθήκες που σχετίζονται με το OpenGL. Βιβλιοθήκη OpenGL. Συμπεριλαμβανόμενα αρχεία. GLUT, μια εργαλειοθήκη βοηθητικών προγραμμάτων βιβλιοθήκης OpenGL.

    εργασία μαθήματος, προστέθηκε 06/01/2004

    Προγραμματισμός εφαρμογής με χρήση της βιβλιοθήκης OpenGL και συναρτήσεων σχεδίασης γεωμετρικών αντικειμένων. Ανάπτυξη διαδικασίας οπτικοποίησης τρισδιάστατης σκηνής και διεπαφής χρήστη. Λογική δομή και λειτουργική αποσύνθεση του έργου.

    εργασία μαθήματος, προστέθηκε 23/06/2011

    Εξοικείωση με τη διεπαφή, τα κύρια χαρακτηριστικά και τα πλεονεκτήματα της χρήσης του προγράμματος OpenGL - μια δημοφιλής βιβλιοθήκη για εργασία με γραφικά 2D και 3D. Εξέταση του σκοπού, των βασικών στοιχείων και των κανόνων αρχικοποίησης της μηχανής λογισμικού DirectX.

    παρουσίαση, προστέθηκε 14/08/2013

    Δημιουργία προγράμματος σε C++ χρησιμοποιώντας βιβλιοθήκες γραφικών OpenGL στο Microsoft Visual Studio. Κατασκευή δυναμικής εικόνας τρισδιάστατου μοντέλου του αντικειμένου «Oil platform». Λογική δομή και λειτουργική αποσύνθεση του έργου.

    εργασία μαθήματος, προστέθηκε 23/06/2011

    Η ουσία του προγραμματισμού χρησιμοποιώντας τη βιβλιοθήκη OpenGL, ο σκοπός, η αρχιτεκτονική, τα πλεονεκτήματα και οι βασικές δυνατότητες. Ανάπτυξη εφαρμογής για την κατασκευή δυναμικής εικόνας τρισδιάστατου μοντέλου αντικειμένου Υπολογιστή, εγχειρίδιο χρήσης.

    εργασία μαθήματος, προστέθηκε 22/06/2011

    Εργασία με χρώμα χρησιμοποιώντας τη βιβλιοθήκη γραφικών OpenGL. Ένα πρόγραμμα που εμφανίζει ένα τετράγωνο με μεταβαλλόμενο χρώμα ανάλογα με τις αλλαγές στις διαβαθμίσεις (R, G, B), ένα τρίγωνο, οι κορυφές του οποίου έχουν διαφορετικά χρώματα, μια ορθογώνια λωρίδα σε μορφή φάσματος.

    δοκιμή, προστέθηκε στις 21/01/2011

    Σκοπός και πρότυπα υλοποίησης του OpenGL για Windows, σειρά σύνδεσης της βιβλιοθήκης γραφικών. Βασικές συναρτήσεις και σύνταξη εντολών. Σχεδίαση πρωτόγονων, ειδών και μετασχηματισμών συγγενών. Μοντελοποίηση δισδιάστατων γραφικών αντικειμένων και κινούμενων εικόνων.

    εργαστηριακές εργασίες, προστέθηκε 07/04/2009

    Βασικά στοιχεία προγραμματισμού με χρήση της βιβλιοθήκης OpenGL. Εφαρμογή για την κατασκευή δυναμικής εικόνας μοντέλου του αντικειμένου Bathyscaphe: ανάπτυξη διαδικασίας οπτικοποίησης τρισδιάστατου διαγράμματος, διεπαφής χρήστη και υποσυστήματος διαχείρισης συμβάντων.

    εργασία μαθήματος, προστέθηκε 26/06/2011

    Κατανοήστε αυτή τη σφαίρα των γραφικών vikoristannya trivimirnoy. Περιγραφή των δυνατοτήτων της βιβλιοθήκης OpenGL. Μια λεπτομερής περιγραφή της διεπαφής προγραμματισμού Borland C++, μια λίστα προγραμμάτων που καταδεικνύουν τις δυνατότητές της. Έργο Rozrakhunok vitrat na vikonannya.

    διατριβή, προστέθηκε 24/06/2015

    Ανάπτυξη συστατικού για μαθηματικούς υπολογισμούς (πράξεις σε πίνακες) με χρήση τεχνολογίας OpenGL (πρόσθεση, αφαίρεση, πολλαπλασιασμός, μεταφορά, ορίζουσα, αντίστροφος πίνακας). Βασικές δεξιότητες εργασίας με τεχνολογία στο περιβάλλον .Net.



Συνιστούμε να διαβάσετε

Κορυφή