Πώς να φτιάξετε έναν κύβο στο OpenGL (με εικόνες)

Πίνακας περιεχομένων:

Πώς να φτιάξετε έναν κύβο στο OpenGL (με εικόνες)
Πώς να φτιάξετε έναν κύβο στο OpenGL (με εικόνες)

Βίντεο: Πώς να φτιάξετε έναν κύβο στο OpenGL (με εικόνες)

Βίντεο: Πώς να φτιάξετε έναν κύβο στο OpenGL (με εικόνες)
Βίντεο: Δημιουργία vm & εγκατάσταση λειτουργικού συστήματος 2024, Απρίλιος
Anonim

Το OpenGL είναι ένα ισχυρό εργαλείο προγραμματισμού 3D που χρησιμοποιείται για να σχεδιάσει πολύπλοκες τρισδιάστατες σκηνές από απλά πρωτόγονα. Αυτό το άρθρο θα σας διδάξει πώς να σχεδιάσετε έναν απλό κύβο που μπορείτε να περιστρέψετε για να δείτε σε τρεις διαστάσεις!

Για αυτό το έργο θα χρειαστείτε έναν επεξεργαστή κώδικα και κάποια γνώση προγραμματισμού C.

Βήματα

Μέρος 1 από 3: Αρχική ρύθμιση

1994315 1 1
1994315 1 1

Βήμα 1. Εγκατάσταση OpenGL Για να ξεκινήσετε ακολουθήστε αυτά τα βήματα για να εγκαταστήσετε το OpenGL στο σύστημά σας

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

1994315 2 1
1994315 2 1

Βήμα 2. Δημιουργήστε το έγγραφο

Δημιουργήστε ένα νέο αρχείο στον αγαπημένο σας επεξεργαστή κώδικα και αποθηκεύστε το ως mycube.c

1994315 3 1
1994315 3 1

Βήμα 3. Προσθέστε #περιλαμβάνει

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

    // Περιλαμβάνει #include #include #include #define GL_GLEXT_PROTOTYPES #ifdef _APPLE_ #include #else #include #endif

1994315 4 1
1994315 4 1

Βήμα 4. Προσθέστε πρωτότυπα συνάρτησης και καθολικές μεταβλητές

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

    // Λειτουργία Πρωτότυπα void display (); void specialKeys (); // Global Variables double rotate_y = 0; διπλό rotate_x = 0;

1994315 5 1
1994315 5 1

Βήμα 5. Ρυθμίστε τη συνάρτηση main ()

    int main (int argc, char* argv ) {// Αρχικοποίηση GLUT και επεξεργασία παραμέτρων χρήστη glutInit (& argc, argv); // Αίτημα διπλού ρυθμιστικού παραθύρου πραγματικού χρώματος με Z-buffer glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH).

  • Αυτή η δήλωση δημιουργεί το περιβάλλον σας. Ένα μεγάλο πράγμα που πρέπει να θυμάστε όταν γράφετε προγράμματα OpenGL είναι ότι πρέπει να ζητήσετε τα πάντα. Αυτό απαιτεί να έχετε μεγαλύτερη κατανόηση για το πώς λειτουργεί το πρόγραμμά σας και τι πρέπει να συμπεριλάβετε για να αποκτήσετε τη λειτουργικότητα που θέλετε. Σε αυτή τη γραμμή, θα ρυθμίσετε την οθόνη με διπλό buffer, χρώμα RGB και ένα Z-buffer.
  • Διπλή αποθήκευση είναι μια τεχνική που χρησιμοποιείται σε προγράμματα γραφικών για την εξάλειψη ενός προβλήματος που προκύπτει λόγω του τρόπου με τον οποίο οι εικόνες τραβιούνται στην οθόνη. Κάθε φορά που ξανασχεδιάζετε τη σκηνή, η οθόνη πρέπει πρώτα να διαγραφεί και στη συνέχεια να σχεδιαστούν οι νέες πληροφορίες. Χωρίς διπλή αποθήκευση, θα παρατηρήσετε ένα τρεμόπαιγμα εφόσον η οθόνη διαγράφεται και επανασχεδιάζεται επανειλημμένα.
  • Αυτό το πρόβλημα διορθώνεται με την προσθήκη ενός δεύτερου buffer στο οποίο θα σχεδιαστεί. Με αυτήν τη μέθοδο, σχεδιάζεται μια εικόνα στο πρώτο buffer και σας εμφανίζεται αυτό το buffer. Το επόμενο πλαίσιο θα τραβηχτεί στο δεύτερο buffer και όταν ολοκληρωθεί, τα δύο buffer θα αλλάξουν θέση. Θα δείτε αμέσως το δεύτερο buffer, αλλά, κρυμμένο από εμάς, το πρώτο buffer διαγράφεται και ξανασχεδιάζεται με το τρίτο πλαίσιο το οποίο θα αντικατασταθεί όταν ολοκληρωθεί.
  • Θέλετε επίσης να ενεργοποιήσετε το Χρώμα RGB σύστημα στο παράθυρό σας.
  • Ζ-ρυθμιστικό είναι πώς αποκτάτε τα εφέ 3D που θέλετε. Το OpenGL χρησιμοποιεί ένα τρισδιάστατο σύστημα συντεταγμένων με άξονες x, y και z. Για να δώσει το αποτέλεσμα ότι ένα αντικείμενο είναι πιο κοντά σας, η θέση του στον άξονα z αυξάνεται, ωστόσο, για να φαίνεται πιο μακριά η θέση του στον άξονα z μειώνεται.
1994315 6 1
1994315 6 1

Βήμα 6. Δημιουργήστε το παράθυρο

Το επόμενο βήμα είναι να δημιουργήστε το παράθυρο μέσα στο οποίο θα σχεδιάσετε τον κύβο. Σε αυτό το σεμινάριο, το παράθυρο ονομάζεται "Awesome Cube".

    // Δημιουργία παραθύρου glutCreateWindow ("Awesome Cube");

1994315 7 1
1994315 7 1

Βήμα 7. Ενεργοποιήστε τη δοκιμή βάθους

Το OpenGL είναι μια αυστηρή γλώσσα, καθώς δεν υποθέτει ότι είναι ενεργοποιημένες ειδικές δυνατότητες. Για να εμφανιστεί σωστά το πρόγραμμά σας σε 3 διαστάσεις χρησιμοποιώντας το buffer Z που κοιτάξατε νωρίτερα, πρέπει ενεργοποιήστε τη δοκιμή βάθους Το Καθώς συνεχίζετε να εξερευνάτε το OpenGL, θα ανακαλύψετε πολλές δυνατότητες που θα χρειαστεί να ενεργοποιήσετε, συμπεριλαμβανομένου του φωτισμού, των υφών, της όψης και πολλών άλλων.

    // Ενεργοποίηση δοκιμής βάθους buffer Z glEnable (GL_DEPTH_TEST);

1994315 8 1
1994315 8 1

Βήμα 8. Προσθέστε λειτουργίες επανάκλησης

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

    // Λειτουργίες επανάκλησης glutDisplayFunc (οθόνη); glutSpecialFunc (specialKeys);

1994315 9 1
1994315 9 1

Βήμα 9. Ξεκινήστε το MainLoop

Αυτό θα ανακαλέσει την κύρια λειτουργία μέχρι να κλείσετε το πρόγραμμα για να επιτρέψετε κινούμενες εικόνες και αλληλεπίδραση με τον χρήστη.

    // Περάστε τον έλεγχο στο GLUT για συμβάντα glutMainLoop (); // Επιστροφή στο λειτουργικό σύστημα return 0; }

Μέρος 2 από 3: Λειτουργία οθόνης ()

1994315 10 1
1994315 10 1

Βήμα 1. Κατανοήστε τον σκοπό αυτής της συνάρτησης

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

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

1994315 11 1
1994315 11 1

Βήμα 2. Προσθέστε το glClear ()

Το πρώτο βήμα που πρέπει να κάνετε σε αυτήν τη λειτουργία είναι να διαγράψτε το χρώμα και το ρυθμιστικό Ζ Το Χωρίς αυτά τα βήματα, τα παλιά σχέδια ενδέχεται να είναι ακόμα ορατά κάτω από τα νέα σχέδια και τα αντικείμενα που έχουν σχεδιαστεί δεν θα βρίσκονται στη σωστή θέση στην οθόνη.

    void display () {// Clear screen and Z-buffer glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

1994315 12 1
1994315 12 1

Βήμα 3. Προσθέστε το glBegin () και το glEnd ()

Το OpenGL ορίζει τα αντικείμενα ως συνδυασμούς διαφορετικών πολυγώνων. Χρησιμοποιώντας το glBegin () εντολή, βάζετε αποτελεσματικά ένα μολύβι που θα σχεδιάσει ένα σχήμα. Για να σηκώσετε το μολύβι και να ξεκινήσετε ένα νέο σχήμα, πρέπει να χρησιμοποιήσετε το glEnd () εντολή. Σε αυτό το σεμινάριο θα χρησιμοποιήσετε το GL_POLYGON για να σχεδιάσετε κάθε πλευρά του κύβου, αλλά είναι δυνατό να χρησιμοποιήσετε άλλες επιλογές παραμέτρων όπως GL_LINE, GL_QUAD ή GL_TRIANGLE για να δημιουργήσετε άλλα σχήματα.

  • Εδώ θα ξεκινήσετε με το μπροστινό μέρος του κύβου σας. Αργότερα θα προσθέσετε χρώμα και στις 6 πλευρές.
  • // Πολύχρωμη πλευρά - FRONT glBegin (GL_POLYGON); // Οι κορυφές θα προστεθούν στο επόμενο βήμα glEnd ();

1994315 13 1
1994315 13 1

Βήμα 4. Προσθέστε το glVertex3f ()

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

  • Το πρώτο είναι σε πόσες διαστάσεις εργάζεστε. Το 3 παραπάνω στο glVertex3f λέει ότι σχεδιάζετε σε 3 διαστάσεις. Είναι επίσης δυνατή η εργασία σε 2 ή 4 διαστάσεις. Το παραπάνω f στο glVertex3f λέει ότι εργάζεστε με αριθμούς κινητού σημείου. Μπορείτε επίσης να χρησιμοποιήσετε σορτς, ακέραιους ή διπλούς.
  • Παρατηρήστε ότι αυτά τα σημεία ορίζονται στο α αριστερόστροφα τρόπος. Αυτό δεν είναι πολύ σημαντικό αυτή τη στιγμή, αλλά όταν αρχίσετε να εργάζεστε με φωτισμό, υφές και όψεις, αυτό θα γίνει απίστευτα σημαντικό, οπότε συνηθίστε να καθορίζετε τα σημεία σας αριστερόστροφα.
  • Προσθέστε προσθέστε τις κορυφές μεταξύ των γραμμών glBegin () και glEnd ().
  • // Πολύχρωμη πλευρά - FRONT glBegin (GL_POLYGON); glVertex3f (-0,5, -0,5, -0,5); // P1 glVertex3f (-0,5, 0,5, -0,5); // P2 glVertex3f (0.5, 0.5, -0.5); // P3 glVertex3f (0,5, -0,5, -0,5); // P4 glEnd ();

1994315 14 1
1994315 14 1

Βήμα 5. Προσθέστε το glColor3f ()

Το glColor λειτουργεί με παρόμοιο τρόπο με το glVertex. Μπορείτε να ορίσετε σημεία ως σορτς, ακέραιους, διπλούς ή πλωτούς. Κάθε χρώμα έχει μια τιμή από 0 έως 1. Όλα τα 0 κάνουν το σημείο μαύρο και όλα τα 1 κάνουν το σημείο λευκό. Το 3 στο glColor3f () αναφέρεται στο χρωματικό σύστημα RGB χωρίς κανάλι άλφα. Το άλφα ενός χρώματος καθορίζει τη διαφάνειά του. Για να αλλάξετε το επίπεδο άλφα, χρησιμοποιήστε το glColor4f () με την τελευταία παράμετρο να είναι τιμή 0 έως 1 για αδιαφανές έως διαφανές.

  • Όταν καλείτε το glColor3f () κάθε κορυφή που τραβιέται από εκείνο το σημείο και μετά θα είναι αυτού του χρώματος. Επομένως, εάν θέλετε και οι τέσσερις κορυφές να είναι κόκκινες, απλώς ορίστε το χρώμα μία φορά οποιαδήποτε στιγμή πριν από τις εντολές glVertex3f () και όλες οι κορυφές θα είναι κόκκινες.
  • Η μπροστινή πλευρά που ορίζεται παρακάτω δείχνει πώς να ορίσετε ένα νέο χρώμα για κάθε κορυφή. Όταν το κάνετε αυτό, μπορείτε να δείτε μια ενδιαφέρουσα ιδιότητα των χρωμάτων OpenGL. Δεδομένου ότι κάθε κορυφή του πολυγώνου έχει το δικό του χρώμα, το OpenGL θα συνδυάσει αυτόματα τα χρώματα! Το επόμενο βήμα θα δείξει τον τρόπο εκχώρησης τεσσάρων κορυφών με το ίδιο χρώμα.
  • // Πολύχρωμη πλευρά - FRONT glBegin (GL_POLYGON); glColor3f (1.0, 0.0, 0.0); glVertex3f (0.5, -0.5, -0.5); // Το Ρ1 είναι κόκκινο glColor3f (0.0, 1.0, 0.0). glVertex3f (0.5, 0.5, -0.5); // Το P2 είναι πράσινο glColor3f (0.0, 0.0, 1.0). glVertex3f (-0,5, 0,5, -0,5); // Το P3 είναι μπλε glColor3f (1.0, 0.0, 1.0). glVertex3f (-0,5, -0,5, -0,5); // Το P4 είναι μοβ glEnd ();

1994315 15 1
1994315 15 1

Βήμα 6. Χειριστείτε τις άλλες πλευρές

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

    // Λευκή πλευρά - ΠΙΣΩ glBegin (GL_POLYGON); glColor3f (1.0, 1.0, 1.0); glVertex3f (0.5, -0.5, 0.5); glVertex3f (0.5, 0.5, 0.5); glVertex3f (-0,5, 0,5, 0,5); glVertex3f (-0,5, -0,5, 0,5); glEnd (); // Μωβ πλευρά - RIGHT glBegin (GL_POLYGON); glColor3f (1.0, 0.0, 1.0); glVertex3f (0.5, -0.5, -0.5); glVertex3f (0.5, 0.5, -0.5); glVertex3f (0.5, 0.5, 0.5); glVertex3f (0.5, -0.5, 0.5); glEnd (); // Πράσινη πλευρά - ΑΡΙΣΤΕΡΑ glBegin (GL_POLYGON); glColor3f (0.0, 1.0, 0.0); glVertex3f (-0,5, -0,5, 0,5); glVertex3f (-0,5, 0,5, 0,5); glVertex3f (-0,5, 0,5, -0,5); glVertex3f (-0,5, -0,5, -0,5); glEnd (); // Μπλε πλευρά - TOP glBegin (GL_POLYGON); glColor3f (0.0, 0.0, 1.0); glVertex3f (0.5, 0.5, 0.5); glVertex3f (0.5, 0.5, -0.5); glVertex3f (-0,5, 0,5, -0,5); glVertex3f (-0,5, 0,5, 0,5); glEnd (); // Κόκκινη πλευρά - BOTTOM glBegin (GL_POLYGON); glColor3f (1.0, 0.0, 0.0); glVertex3f (0.5, -0.5, -0.5); glVertex3f (0.5, -0.5, 0.5); glVertex3f (-0,5, -0,5, 0,5); glVertex3f (-0,5, -0,5, -0,5); glEnd (); glFlush (); glutSwapBuffers (); }

  • Θέλουμε επίσης να προσθέσουμε δύο τελευταίες γραμμές κώδικα για αυτήν τη συνάρτηση. Αυτά είναι glFlush ();

    και glutSwapBuffers ();

    που μας δίνουν το εφέ διπλής προστασίας που μάθατε νωρίτερα.

Μέρος 3 από 3: Διαδραστικότητα χρηστών

1994315 16 1
1994315 16 1

Βήμα 1. Προσθέστε ειδικά κλειδιά ()

Έχετε σχεδόν τελειώσει, αλλά προς το παρόν, μπορείτε να σχεδιάσετε έναν κύβο αλλά δεν έχετε τρόπο να τον περιστρέψετε. Για να το κάνετε αυτό, θα το κάνετε δημιουργήστε ένα ειδικόKeys () λειτουργία για να μας επιτρέψει να πατήσουμε τα πλήκτρα βέλους και να περιστρέψουμε τον κύβο!

  • Αυτή η συνάρτηση είναι ο λόγος που δηλώσατε τις καθολικές μεταβλητές rotate_x και rotate_y. Όταν πατάτε τα δεξιά και αριστερά πλήκτρα βέλους, το rotate_y θα αυξηθεί ή μειωθεί κατά 5 μοίρες. Ομοίως, όταν πατάτε τα πάνω και κάτω βέλη, το rotate_x θα αλλάξει ανάλογα.
  • void specialKeys (int key, int x, int y) {// Δεξί βέλος - αύξηση περιστροφής κατά 5 μοίρες εάν (key == GLUT_KEY_RIGHT) rotate_y += 5; // Αριστερό βέλος - μειώστε την περιστροφή κατά 5 μοίρες αλλιώς εάν (κλειδί == GLUT_KEY_LEFT) περιστρέψετε_y - = 5; αλλιώς εάν (κλειδί == GLUT_KEY_UP) περιστρέψτε_x += 5; αλλιώς εάν (κλειδί == GLUT_KEY_DOWN) περιστρέψτε_x -= 5; // Αίτημα ενημέρωσης οθόνης glutPostRedisplay (); }

1994315 17 1
1994315 17 1

Βήμα 2. Προσθέστε το glRotate ()

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

    // Επαναφορά μετασχηματισμών glLoadIdentity (); // Περιστροφή όταν ο χρήστης αλλάζει rotate_x και rotate_y glRotatef (rotate_x, 1.0, 0.0, 0.0). glRotatef (rotate_y, 0.0, 1.0, 0.0); // Πολύχρωμη πλευρά - ΜΠΡΟΣΤΑ….

  • Πρώτη παρατήρηση ότι η σύνταξη του glRotatef () είναι παρόμοιο με αυτό των glColor3f () και glVertex3f () αλλά απαιτεί πάντα 4 παραμέτρους. Η πρώτη παράμετρος είναι ο βαθμός περιστροφής που πρέπει να εφαρμοστεί. Οι επόμενες τρεις παράμετροι καθορίζουν τον άξονα περιστροφής με τον πρώτο να είναι ο άξονας x, δεύτερος ο άξονας y και τρίτος ο άξονας z. Αυτή τη στιγμή χρειάζεται μόνο να περιστρέψετε τον άξονα x και y.
  • Όλοι οι μετασχηματισμοί που γράφετε στο πρόγραμμά σας χρειάζονται παρόμοιες γραμμές. Εννοιολογικά, μπορείτε να το σκεφτείτε ως περιστροφή του αντικειμένου σας γύρω από τον άξονα x κατά το ποσό που ορίζεται από το rotate_x και στη συνέχεια περιστροφή γύρω από τον άξονα y με rotate_y. Ωστόσο, το OpenGL συνδυάζει όλες αυτές τις δηλώσεις σε έναν μετασχηματισμό μήτρας. Κάθε φορά που καλείτε τη λειτουργία εμφάνισης, δημιουργείτε έναν πίνακα μετασχηματισμού και glLoadIdentity () διαβεβαιώνει ότι θα ξεκινήσετε με μια νέα μήτρα σε κάθε πάσο.
  • Οι άλλες συναρτήσεις μετασχηματισμού που θα μπορούσατε να εφαρμόσετε είναι το glTranslatef () και το glScalef (). Αυτές οι συναρτήσεις είναι παρόμοιες με το glRotatef () με εξαίρεση ότι παίρνουν μόνο 3 παραμέτρους, τα x, y και z για να μεταφράσουν ή να κλιμακώσουν το αντικείμενο.
  • Για να έχετε το σωστό αποτέλεσμα όταν εφαρμόζετε και τους τρεις μετασχηματισμούς σε ένα αντικείμενο, πρέπει να τους εφαρμόσετε με τη σωστή σειρά. Να τα γράφετε πάντα με τη σειρά glTranslate, glRotate, στη συνέχεια glScale Το Το OpenGL εφαρμόζει ουσιαστικά τους μετασχηματισμούς από κάτω προς τα πάνω. Για να το καταλάβετε, προσπαθήστε να φανταστείτε πώς θα έμοιαζε ένας απλός κύβος 1x1x1 με τους μετασχηματισμούς αν το OpenGL τους εφάρμοζε από πάνω προς τα κάτω και αν το OpenGL τους εφάρμοζε από κάτω προς τα πάνω.
1994315 18 1
1994315 18 1

Βήμα 3. Προσθέστε τις ακόλουθες εντολές για να κλιμακώσετε τον κύβο κατά 2 κατά μήκος του άξονα x, 2 κατά μήκος του άξονα y, περιστρέψτε τον κύβο κατά 180 μοίρες γύρω από τον άξονα y και μεταφράστε τον κύβο κατά 0,1 κατά μήκος του άξονα x

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

    // Άλλοι μετασχηματισμοί glTranslatef (0.1, 0.0, 0.0); glRotatef (180, 0.0, 1.0, 0.0); glScalef (2.0, 2.0, 0.0);

1994315 19 1
1994315 19 1

Βήμα 4. Μεταγλωττίστε και εκτελέστε τον κώδικά σας

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

    Σε Linux: gcc cube.c -o cube -lglut -lGL./ mycube Σε Mac: gcc -o foo foo.c -framework GLUT -framework OpenGL./ mycube Στα Windows: gcc -Wall -ofoo foo.c -lglut32cu - lglu32 -lopengl32./ mycube

1994315 20 1
1994315 20 1

Βήμα 5. Ελέγξτε τον πλήρη κωδικό σας

Θα πρέπει να είναι έτσι:

    // // Αρχείο: mycube.c // Συντάκτης: Matt Daisley // Δημιουργήθηκε: 4/25/2012 // Έργο: Πηγαίος κώδικας για το Make a Cube στο OpenGL // Περιγραφή: Δημιουργεί ένα παράθυρο OpenGL και σχεδιάζει έναν κύβο 3D/ / Ότι ο χρήστης μπορεί να περιστρέφεται χρησιμοποιώντας τα πλήκτρα βέλους // // Στοιχεία ελέγχου: Αριστερό βέλος -Περιστροφή Αριστερά // Δεξί βέλος -Περιστροφή δεξιά // Πάνω βέλος -Περιστροφή επάνω // Κάτω βέλος -Περιστροφή κάτω // ------ ------------------------------------------------------ -// Περιλαμβάνει // ----------------------------------------------- --------------- #include #include #include #define GL_GLEXT_PROTOTYPES #ifdef _APPLE_ #include #else #include #endif // ------------- ---------------------------------------------- // Πρωτότυπα συνάρτησης / / ----------------------------------------------------- --------- κενή οθόνη (); void specialKeys (); // ---------------------------------------------------- ---------- // Παγκόσμια μεταβλητές // -------------------------------------- ------------------------ διπλό rotate_y = 0; διπλό rotate_x = 0; // ---------------------------------------------------- ---------- // οθόνη () Λειτουργία επανάκλησης // ---------------------------------- --------------------------- άκυρη εμφάνιση () {// Εκκαθάριση οθόνης και Z-buffer glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Επαναφορά μετασχηματισμών glLoadIdentity (); // Άλλοι μετασχηματισμοί // glTranslatef (0.1, 0.0, 0.0); // Δεν περιλαμβάνεται // glRotatef (180, 0.0, 1.0, 0.0); // Δεν περιλαμβάνεται // Περιστροφή όταν ο χρήστης αλλάζει rotate_x και rotate_y glRotatef (rotate_x, 1.0, 0.0, 0.0). glRotatef (rotate_y, 0.0, 1.0, 0.0); // Άλλοι μετασχηματισμοί // glScalef (2.0, 2.0, 0.0); // Δεν περιλαμβάνεται // Πολύχρωμη πλευρά - FRONT glBegin (GL_POLYGON); glColor3f (1.0, 0.0, 0.0); glVertex3f (0.5, -0.5, -0.5); // Το Ρ1 είναι κόκκινο glColor3f (0.0, 1.0, 0.0). glVertex3f (0.5, 0.5, -0.5); // Το P2 είναι πράσινο glColor3f (0.0, 0.0, 1.0). glVertex3f (-0,5, 0,5, -0,5); // Το P3 είναι μπλε glColor3f (1.0, 0.0, 1.0). glVertex3f (-0,5, -0,5, -0,5); // Το P4 είναι μοβ glEnd (); // Λευκή πλευρά - ΠΙΣΩ glBegin (GL_POLYGON); glColor3f (1.0, 1.0, 1.0); glVertex3f (0.5, -0.5, 0.5); glVertex3f (0.5, 0.5, 0.5); glVertex3f (-0,5, 0,5, 0,5); glVertex3f (-0,5, -0,5, 0,5); glEnd (); // Μωβ πλευρά - RIGHT glBegin (GL_POLYGON); glColor3f (1.0, 0.0, 1.0); glVertex3f (0.5, -0.5, -0.5); glVertex3f (0.5, 0.5, -0.5); glVertex3f (0.5, 0.5, 0.5); glVertex3f (0.5, -0.5, 0.5); glEnd (); // Πράσινη πλευρά - ΑΡΙΣΤΕΡΑ glBegin (GL_POLYGON); glColor3f (0.0, 1.0, 0.0); glVertex3f (-0,5, -0,5, 0,5); glVertex3f (-0,5, 0,5, 0,5); glVertex3f (-0,5, 0,5, -0,5); glVertex3f (-0,5, -0,5, -0,5); glEnd (); // Μπλε πλευρά - TOP glBegin (GL_POLYGON); glColor3f (0.0, 0.0, 1.0); glVertex3f (0.5, 0.5, 0.5); glVertex3f (0.5, 0.5, -0.5); glVertex3f (-0,5, 0,5, -0,5); glVertex3f (-0,5, 0,5, 0,5); glEnd (); // Κόκκινη πλευρά - BOTTOM glBegin (GL_POLYGON); glColor3f (1.0, 0.0, 0.0); glVertex3f (0.5, -0.5, -0.5); glVertex3f (0.5, -0.5, 0.5); glVertex3f (-0,5, -0,5, 0,5); glVertex3f (-0,5, -0,5, -0,5); glEnd (); glFlush (); glutSwapBuffers (); } // --------------------------------------------------- ----------- // specialKeys () Λειτουργία επανάκλησης // ------------------------------ ---------------------------- void specialKeys (κλειδί int, int x, int y) {// Δεξί βέλος-αύξηση περιστροφής κατά 5 βαθμός if (κλειδί == GLUT_KEY_RIGHT) rotate_y += 5; // Αριστερό βέλος - μειώστε την περιστροφή κατά 5 μοίρες αλλιώς εάν (κλειδί == GLUT_KEY_LEFT) περιστρέψετε_y - = 5; αλλιώς εάν (κλειδί == GLUT_KEY_UP) περιστρέψτε_x += 5; αλλιώς εάν (κλειδί == GLUT_KEY_DOWN) rotate_x -= 5; // Αίτημα ενημέρωσης οθόνης glutPostRedisplay (); } // --------------------------------------------------- ----------- // κύρια λειτουργία // ------------------------------- --------------------------- int main (int argc, char* argv ) {// Αρχικοποίηση GLUT και επεξεργασία παραμέτρων χρήστη glutInit (& argc, argv); // Ζητήστε διπλό ρυθμιστικό παράθυρο πραγματικού χρώματος με Z-buffer glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH). // Δημιουργία παραθύρου glutCreateWindow ("Awesome Cube"); // Ενεργοποίηση δοκιμής βάθους buffer Z glEnable (GL_DEPTH_TEST); // Λειτουργίες επανάκλησης glutDisplayFunc (οθόνη); glutSpecialFunc (specialKeys); // Περάστε τον έλεγχο στο GLUT για συμβάντα glutMainLoop (); // Επιστροφή στο λειτουργικό σύστημα return 0; }

Συνιστάται: