7 'ΓΡΑΦΙΚΑ ΚΑΙ ΕΙΚΟΝΙΚΗ ΠΡΑΓΜΑΤΙΚΟΤΗΤΑ' Μουστάκας Κ., Παλιόκας Ι., Τσακίρης A., Τζοβάρας Δ.








next

Περιεχόμενα

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

Πλοήγηση 


2015

ΚΕΦΑΛΑΙΟ 7: ΔΙΑΧΕΙΡΙΣΗ ΣΚΗΝΗΣ
img
  • 7.1. Εισαγωγή
  • 7.2. Πρότυπα και Στιγμιότυπα Αντικειμένων
  • 7.3. Ιεραρχικά Μοντέλα Αντικειμένων
  • 7.4. Αρθρωτές Δομές
  • 7.5. Δεντρικές Δομές και Διάσχιση Δέντρων
  • 7.6. Γράφοι Σκηνής
  • 7.7. Ορατότητα Αντικειμένων και Χωρική Κατάτμηση
  • 7.8. Υβριδική Οργάνωση και Κατανεμημένη Σχεδίαση
  • 7.9. Προτεινόμενες ασκήσεις και προβλήματα
  • 7.10. Αναφορές



icon

Σύνοψη

Στο κεφάλαιο αυτό θα μελετήσουμε τις έννοιες, τις χρήσεις και την υλοποίηση συστημάτων διαχείρισης σκηνών τρισδιάστατων γραφικών. Με το όρο «σκηνή» αναφερόμαστε στο σύνολο των τρισδιάστατων αντικειμένων και των σχέσεων μεταξύ τους που περιγράφουν την απεικόνιση ενός εικονικού τρισδιάστατου κόσμου. Θα δούμε αρχικά πώς μπορούμε να χρησιμοποιήσουμε αφαιρετικές δομές για να περιγράψουμε πολύπλοκα αντικείμενα και σχέσεις μεταξύ αυτών. Στη συνέχεια, θα περιγράψουμε τους τρόπους οργάνωσης της πληροφορίας που περιέχεται σε μια τρισδιάστατη σκηνή μέσα από τη χρήση διάφορων δομών, καταλήγοντας στην περιγραφή των δενδρικών δομών και δομών γράφου που χρησιμοποιούμε συνηθέστερα. Με τη γνώση των δομών αυτών, θα συνεχίσουμε περιγράφοντας τους τρόπους οργάνωσης μιας σκηνής σε γράφο καθώς και τον τρόπο που μπορούμε να υλοποιήσουμε τέτοιες δομές προγραμματιστικά. Προχωρώντας πέρα από την οργάνωση μιας σκηνής θα αναφερθούμε στη σημασία της ορατότητας των αντικειμένων σε μια σκηνή και στο πώς αυτή επηρεάζει την πολυπλοκότητα της επεξεργασίας της. Για να μειώσουμε αυτήν την πολυπλοκότητα, θα μελετήσουμε τους τρόπους με τους οποίους μπορούμε μέσω της χρήσης κατάλληλων δομών να κατατμήσουμε μια σκηνή και να δημιουργήσουμε ένα σύστημα που θα αποφαίνεται με ταχύτητα σχετικά με την ορατότητα των αντικειμένων. Τέλος, θα περιγράψουμε τους τρόπους με τους οποίους οι διεργασίες κατάτμησης και απεικόνισης μιας σκηνής μπορούν να κατανεμηθούν σε πολλαπλές υπολογιστικές μονάδες.

Προαπαιτούμενη γνώση

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


7.1. Εισαγωγή

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

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

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


7.2. Πρότυπα και Στιγμιότυπα Αντικειμένων

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

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

pixel

Εικόνα 7.1. Πρότυπο μοναδιαίου κύβου

Τα περισσότερα συστήματα τρισδιάστατων γραφικών διακρίνουν μεταξύ του πλαισίου ορισμού του προτύπου (πλαίσιο μοντέλου) και του πλαισίου χρήσης ή αναφοράς (πλαίσιο αντικειμένου ή κόσμου). Η διάκριση αυτή βοηθάει όταν τα πρότυπα αποτελούν αμιγώς σχήματα, όπως για παράδειγμα σύμβολα ηλεκτρονικών κυκλωμάτων σε μία εφαρμογή CAD που δεν εμπεριέχουν φυσικές ιδιότητες. Στην OpenGL [Segal, 1992] για παράδειγμα, χρειάζεται να ορίσουμε το μετασχηματισμό από το πλαίσιο του μοντέλου στο πλαίσιο του κόσμου για να αναπαραστήσουμε το αντικείμενο στο σύστημα συντεταγμένων μιας εφαρμογής. Επομένως, ο πίνακας μετασχηματισμού παρατήρησης για κάθε πρότυπο είναι το γινόμενο ενός πίνακα μετασχηματισμού που τοποθετεί ένα στιγμιότυπο του προτύπου στο σύστημα συντεταγμένων του κόσμου και του πίνακα μετασχηματισμού της παρατήρησης της σκηνής. Για το στιγμιότυπο ενός αντικειμένου κύβου cubeinst θα έχουμε:

ΜΣΣΠ = ΜΣΣΠ * Μ(cubeinst), όπου Μ(cubeinst) = ΜS(cubeinst) * ΜR (cubeinst) * ΜT(cubeinst),

με ΜS(cubeinst) τον πίνακα κλιμάκωσης, ΜR(cubeinst) τον πίνακα περιστροφής και ΜT(cubeinst) τον πίνακα μετακίνησης.

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

pixel

Εικόνα 7.2. Μετασχηματισμός στιγμιότυπου


7.3. Ιεραρχικά Μοντέλα Αντικειμένων

Ας υποθέσουμε ότι θέλουμε να δημιουργήσουμε ένα κινηματικό μοντέλο ενός αυτοκινήτου. Μπορούμε να συνθέσουμε το μοντέλο από πέντε μέρη, το σασί και τους τέσσερις τροχούς (Εικόνα 7.3) - καθέναν από τους οποίους μπορούμε να περιγράψουμε με τη χρήση ενός στιγμιότυπου του πρότυπου μοντέλου «τροχός» μετασχηματίζοντάς το κατάλληλα ώστε να τοποθετηθεί στη σωστή θέση. Δύο καρέ της κινηματικής που παρουσιάζουν μια απλή κίνηση του μοντέλου παρουσιάζονται στην Εικόνα 7.4.

pixel

Εικόνα 7.3. Αντικείμενο αυτοκίνητο

pixel

Εικόνα 7.4. Κινηματική Αντικειμένου: Γραμμική κίνηση σε έναν άξονα με περιστροφή των τροχών

Θα μπορούσαμε να γράψουμε ένα πρόγραμμα που να εκτελεί την παραπάνω κινηματική αν θυμηθούμε πως μία περιστροφική κίνηση των τροχών κατά 360° μεταφράζεται σε αντίστοιχη γραμμική κίνηση του αυτοκινήτου κατά 2πR, όπου R η ακτίνα των τροχών. Υπολογίζοντας, δηλαδή, την ταχύτητα, την κατεύθυνση και το χρόνο που διαρκεί η κίνηση, μπορούμε να σχεδιάσουμε σε κάθε καρέ τη νέα θέση και τη νέα περιστροφή του σασί και κάθε τροχού. Μια αρνητική πτυχή κατά τη χρήση αυτού του είδους προγράμματος, όμως, είναι πως ακολουθεί μια γραμμική λογική και δεν εκμεταλλεύεται ούτε τη σχέση μεταξύ των τροχών και του σασί ως μέρη ενός συνολικού αντικειμένου, ούτε το χαρακτηριστικό ότι κάθε τροχός είναι απλά αντίγραφο ενός προτύπου σε διαφορετική θέση και ότι η περιστροφή είναι κοινή για όλους τους τροχούς ενός αυτοκινήτου.

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

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

pixel

Εικόνα 7.5. Δεντρική δομή του αντικειμένου «αυτοκίνητο»

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

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

pixel

Εικόνα 7.6. Κατευθυνόμενος Ακυκλικός Γράφος για το αντικείμενο «αυτοκίνητο»

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

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


7.4. Αρθρωτές Δομές

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

pixel

α)

β)

γ)

δ)

ε)

στ)

ζ)

Εικόνα 7.7. Μοντέλο εκσκαφέα: α) συνολικό μοντέλο, β) απόδοση με στιγμιότυπα απλών προτύπων, γ)-ζ) επιμέρους στιγμιότυπα

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

Κάθε γωνία άρθρωσης μετράται στο τοπικό πλαίσιο του κάθε κόμβου∙ όπως η βάση του εκσκαφέα κατά τον κατακόρυφο άξονα y κατά γωνία φ1. Ο πρώτος βραχίονας συνδέεται με τη βάση μέσω μιας άρθρωσης που επιτρέπει στο βραχίονα να περιστραφεί κατά τον τοπικό άξονα x της βάσης γύρω από το σημείο ένωσης με τη βάση κατά γωνία φ2. Με τον ίδιο τρόπο οι βραχίονες 2 και 3 συνδέονται κατά σειρά με τον άξονα 1 και 2 και περιστρέφονται κατά τον άξονα x γύρω από το σημείο της σύνδεσης κατά γωνίες φ3 και φ4 αντίστοιχα. Τέλος, το σκαπτικό συνδέεται με το βραχίονα 3 και περιστρέφεται κατά τον άξονα x γύρω από το σημείο της σύνδεσης κατά γωνία φ5. Μεταβάλλοντας τις επιμέρους γωνίες μπορούμε να τοποθετήσουμε το σκαπτικό οπουδήποτε στις τρεις διαστάσεις.

Ας υποθέσουμε ότι θέλουμε να απεικονίσουμε τον εκσκαφέα. Αντί να τοποθετήσουμε κάθε επιμέρους αντικείμενο ξεχωριστά στη σκηνή και να χειριστούμε την κίνησή του ανεξάρτητα από των υπολοίπων. ακολουθούμε μια σταδιακή προσέγγιση. Ξεκινώντας από τη βάση μπορούμε να την περιστρέψουμε γύρω από τον άξονα y οπότε περιγράφουμε την κίνησή της εφαρμόζοντας έναν πίνακα περιστροφής Ry1). Προχωρώντας στον πρώτο βραχίονα για να περιγράψουμε την περιστροφή του Rx2) περί τη βάση γύρω από τον τοπικό άξονα x αυτής κατά γωνία φ2, πρέπει πρώτα να μετακινήσουμε το κέντρο της περιστροφής του βραχίονα στο σημείο σύνδεσης με έναν πίνακα μετατόπισης T(x1,y1,z1) όπου x1,y1,z1 το σημείο σύνδεσης του πρώτου βραχίονα με τη βάση. Όταν θα περιστραφεί η βάση, θα περιστραφεί μαζί της και ο βραχίονας. Η νέα θέση του βραχίονα προκύπτει από το γινόμενο των μετασχηματισμών Ry1) T(x1,y1,z1) Rx2). Ο επιμέρους μετασχηματισμός Ry1) T(x1,y1,z1) είναι αυτός που τοποθετεί το βραχίονα σε σχέση με τη βάση.

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

  • Βραχίονας 1: Μ1 = Ry(φ1) T(x1,y1,z1) Rx(φ2)
  • Βραχίονας 2: Μ2 = Μ1T(x2,y2,z2) Rx(φ3)
  • Βραχίονας 3: Μ3 = Μ2T(x3,y3,z3) Rx(φ4)
  • Σκαπτικό: Μ4 = Μ3T(x4,y4,z4) Rx(φ5)

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

pixel
pixel

Εικόνα 7.8. Oι σχετικές τοποθετήσεις (μετατόπιση και περιστροφή) των επιμέρους αντικειμένων του εκσκαφέα σε σχέση με τα μέρη στα οποία συνδέονται

Εικόνα 7.9. Αντικατάσταση των στιγμιότυπων απλών αντικειμένων με λεπτομερή

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

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

pixel

Εικόνα 7.10. Δενδρική αναπαράσταση του Εκσκαφέα

Αν οι απαραίτητες παράμετροι τοποθέτησης και απεικόνισης κάθε αντικειμένου αποθηκευτούν στον αντίστοιχο κόμβο παρά στην ακμή, τότε κάθε κόμβος θα πρέπει να ενσωματώνει τα παρακάτω στοιχεία:

  • Μία μέθοδο σχεδιασμού του αντικειμένου που αντιπροσωπεύει ο κόμβος
  • Έναν ομογενή πίνακα μετασχηματισμού που μετατοπίζει, προσανατολίζει και κλιμακώνει το αντικείμενο
  • Συνδέσεις προς τους κόμβους-παιδιά του

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

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


7.5. Δεντρικές Δομές και Διάσχιση Δέντρων

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

pixel

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

Από τη στιγμή που θα τοποθετήσουμε το οστό-ρίζα (root bone), η θέση και ο προσανατολισμός των άλλων τμημάτων του μοντέλου καθορίζονται από τις γωνίες των αρθρώσεων. Μπορούμε να κινήσουμε το μοντέλο, καθορίζοντας τις κινήσεις των αρθρώσεών του [Watt, 1992]. Σε ένα βασικό μοντέλο, οι αρθρώσεις του γόνατου, του αγκώνα και των δακτύλων πέραν του αντίχειρα μπορεί να έχουν το καθένα μόνο ένα βαθμό ελευθερίας, ενώ άλλες αρθρώσεις, όπως του λαιμού ή του ώμου, 2 ή και 3 βαθμούς ελευθερίας.

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

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

pixel

Εικόνα 7.12. Δενδρική δομή του ανθρώπινου μοντέλου (η δεξιά πλευρά θεωρείται συμμετρική της αριστερής και παραλείπεται για λόγους απλοποίησης)

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

pixel

Εικόνα 7.13. Διάσχιση δέντρου από αριστερά προς δεξιά, κατά προτεραιότητα βάθους

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

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

Ο μετασχηματισμός ενός κόμβου στο επίπεδο k σε ένα κλαδί A που σχετίζεται με έναν άλλο κόμβο που βρίσκεται στο επίπεδο m σε ένα κλαδί B με κοινή ρίζα στο επίπεδο r είναι:

MAB=j=mr+1MBj-1i=r+1kMAi

{Εξ. 7.1}

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