Ιεραρχική και ανικειμενοστραφής μοντελοποίηση
Θέματα Πώς παριστάνουμε ένα σύνθετο αντικείμενο και την σχέση-αλληλεξάρτηση μεταξύ των μερών του? Πώς παριστάνουμε μια σκηνή με διάφορα (σύνθετα) αντικείμενα και τη μεταξύ τους σχέση?
Σύμβολα και στιγμιότυπα Σύμβολα: απλά γεωμετρικά αντικείμενα ορισμένα σε «βολικές» προκαθορισμένες θέσεις Αρχή των αξόνων με «μοναδιαίες» διαστάσεις Model frame Ένα αντικείμενο/σκηνή ως σύνολο συμβόλων με κατάλληλους μετασχηματισμούς στιγμιότυπου (instance transform) M=TRS
Σύμβολα και στιγμιότυπα Αρίθμηση των συμβόλων και παράσταση της σκηνής σαν πίνακα με σύμβολα και μετασχηματισμούς Δεν δίνει πληροφορία για τη σχέση μεταξύ των συμβόλων, τα σύμβολα ανεξάρτητα μεταξύ τους
Σύμβολα και στιγμιότυπα
Ιεραρχικά μοντέλα Αυτοκίνητο που κινείται Κίνηση του σασί συνεπάγεται κίνηση και περιστροφή των τροχών (ή αντίστροφα) Αναπαράσταση της σχέσης των μερών με δένδρα. Κατευθυντικοί γράφοι χωρίς βρόγχους (κλειστά μονοπάτια) Κάθε κόμβος εκτός της ρίζας έχει ένα κλάδο που καταλήγει σε αυτόν (έναν πατέρα).
Ιεραρχικά μοντέλα Κάθε κόμβος περιέχει πληροφορία για κάποιο γεωμετρικό σχήμα (σασί, τροχοί) Η πληροφορία για τη θέση των τροχών αποθηκεύεται στους αντίστοιχους κόμβους ή κλάδους.
Ιεραρχικά μοντέλα Αποθήκευση της πληροφορίας για το ζωγράφισμα των τροχών σε 4 κόμβους: πλεονασμός. Κατευθυντικοί ακυκλικοί γράφοι (directed acyclic graph, DAG) Υπάρχουν βρόγχοι αλλά δεν μπορούμε να τους διατρέξουμε
Ρομποτικός βραχίονας Τρεις βαθμοί ελευθερίας: Γωνία περιστροφής της βάσης Γωνίες στις αρθρώσεις Μετρώνται στο σύστημα συντεταγμένων (frame) του αντίστοιχου μέρους
Ρομποτικός βραχίονας Καθώς μεταβάλλονται οι γωνίες των βραχιόνων τα αντικείμενα ή τα frames τους βραχιόνων μετακινούνται ως προς τη βάση Έχει προηγηθεί τοποθέτηση στη σωστή σχετική θέση
Ρομποτικός βραχίονας Κατασκευή & κίνηση με σταδιακό τρόπο Κάθε μέρος πρέπει να τοποθετηθεί ως προς τον πατέρα Η κίνηση ενός μέρους πρέπει να μεταδοθεί στα μέρη κατωθεν αυτού Περιστρέφω, μετατοπίζω κάθε μέρος για να τοποθετηθεί σωστά ως προς τον πατέρα Εφαρμόζω τους μετασχηματισμούς του πατέρα
Ρομποτικός βραχίονας Περιστροφή βάσης με πίνακα περιστροφής R y (θ) Οκάτωβραχίοναςπρέπειναπεριστραφεί, να τοποθετηθεί στην κορυφή της βάσης και να περιστραφεί μαζί της: R y (θ) T(0,h 1,0) R z (φ) Οπάνωβραχίοναςπρέπειναπεριστραφεί κατά ψ και να τοποθετηθεί στην κορυφή του κάτω βραχίονα: R y (θ) T(0,h 1,0) R z (φ) T(0,h 2,0) R z (ψ)
Ρομποτικός βραχίονας glrotate() base() gltranslate() glrotate() lower_arm() gltranslate() glrotate() upper_arm()
Ρομποτικός βραχίονας Αποθήκευση της πληροφορίας στους κόμβους Δείκτης στη συνάρτηση σχεδίασης Πίνακας μετασχηματισμού που τοποθετεί το μέρος σε σχέση με τον πατέρα Δείκτες στα παιδιά Άλλες πληροφορίες (χρώμα, υλικό) Αλγόριθμος διάσχισης του δένδρου, από πατέρα προς παιδιά
Διάσχιση δένδρων Απλό μοντέλο ανθρωπίνου σώματος Τοποθέτηση των μερών στις σχετικές αρχικές θέσεις Κίνηση: λαιμός 2 βαθμοί ελευθερίας, υπόλοιπες αρθρώσεις 1 Οι κλάδοι δίνουν τις αλληλεπιδράσεις των τμημάτων
Διάσχιση δένδρων Κάθε πίνακας μετασχηματισμού δίνει τη διαφορική μεταβολή από τον κόμβο πατέρα Πολλαπλασιασμός των αντίστοιχων πινάκων
Διάσχιση δένδρων Διάσχιση του δένδρου για την απεικόνιση του σύνθετου αντικειμένου Preorder διάσχιση: αναδρομική διάσχιση ρίζας, αριστερού υποδένδρου, δεξιού υποδένδρου Συνάρτηση που πραγματοποιεί την διάσχιση Αναλυτικά με κατάλληλη χρήση σωρών για αποθήκευση των απαιτούμενων μετασχηματισμών Με αναδρομικό τρόπο
Διάσχιση με βάση τους σωρούς Χρήση push και pop για απομόνωση των μετασχηματισμών glpushmatrix() torso(); gltranslate(); glrotate; Head(); glpopmatrix(); glpushmatrix() gltranslate(); glrotate; Left_upper_leg(); gltranslate(); glrotate; Left_lower_leg(); glpopmatrix(); //end of a subtree, pop
Διάσχιση με βάση τους σωρούς Για χρώματα κλπ μπορούμε να χρησιμοποιήσουμε glpushattrib, glpopattrib Η μέθοδος με τους σωρούς απαιτεί κώδικα γραμμένο για το συγκεκριμένο αντικείμενο δεν δίνει μια γενική συνάρτηση διάσχισης δένδρου.
Δενδρικές δομές δεδομένων Χρήση κατάλληλων δομών δεδομένων για την αναπαράσταση των δένδρων και ένα γενικό αλγόριθμο διάσχισης Αναπαράσταση δένδρου: left child, right sibling Κάθε κόμβος έχει δείκτη στο αριστερότερο παιδί και στον δεξιό αδερφό (κόμβος στο ίδιο επίπεδο, παιδί του ίδιου πατέρα)
Δενδρικές δομές δεδομένων
Δενδρικές δομές δεδομένων Σε κάθε κόμβο αποθηκεύουμε: Δείκτη σε συνάρτηση που ζωγραφίζει το αντικείμενο Πίνακα μετασχηματισμού που τοποθετεί το αντικείμενοσεσχέσημετονπατέρα Δείκτες σε αριστερό παιδί, αδερφό typedef struct treenode{ GLfloat m[16]; void (*f)(); struct treenode *sibling; struct treenode *child; }treenode;
Δενδρικές δομές δεδομένων Κατά την απεικόνιση ο πίνακας m πολλαπλασιάζεται με τον τρέχοντα modelview matrix καικαλείταιηf Αρχικοποιούμε κατάλληλα τον κάθε κόμβο Δίνουμε την αρχική θέση και την συσχέτιση με τους υπόλοιπους κόμβους
Δενδρικές δομές δεδομένων treenode torso_node, head_node, lua_node,.. glloadidentity(); glrotatef(theta[0], 0.0, 1.0, 0.0); //φτιάχνουμε κατάλληλο modelview και τον αποθηκεύουμε στον m glgetfloatv(gl_modelview_matrix,torso_node.m); torso_node.f = torso; torso_node.sibling = NULL; torso_node.child = &head_node; //Το theta είναι μεταβλητή που αλλάζει για να πετύχω την κίνηση
Δενδρικές δομές δεδομένων glloadidentity(); gltranslatef(-(torso_radius+upper_arm_radius), 0.9*TORSO_HEIGHT, 0.0); //το μετακινώ στη σωστή θέση glrotatef(theta[3], 1.0, 0.0, 0.0); //μεταβλητή γωνία glgetfloatv(gl_modelview_matrix,lua_node.m); lua_node.f = left_upper_arm; lua_node.sibling = &rua_node; lua_node.child = &lla_node;
Δενδρικές δομές δεδομένων Αναδρομική συνάρτηση διάσχισης (preorder) Γενική, ανεξάρτητη από το συγκεκριμένο δέντρο void traverse(treenode* root){ if(root==null) return; glpushmatrix(); glmultmatrixf(root->m); root->f(); if(root->child!=null) traverse(root->child); glpopmatrix(); if(root->sibling!=null) traverse(root->sibling); }
Δενδρικές δομές δεδομένων Όταν μετακινούμαι σε αδερφό πρέπει να επαναφέρω τον modelview (popmatrix) Όταν πάω σε παιδί ο modelview του πατέρα κληρονομείται όπως θα έπρεπε Μπορούμε να προσθέσουμε / διαγράψουμε κόμβους δυναμικά. Αλλαγές στο αντικείμενο
Animation Τα ιεραρχικά μοντέλα είναι κατάλληλα για περιγραφή αρθρωτών αντικειμένων Απεικονίζουν τη σχέση μεταξύ των μερών Πώς θα κινήσουμε το μοντέλο μεταβάλλοντας τις παραμέτρους (βαθμούς ελευθερίας) στο χρόνο?
Animation Ρομποτικός βραχίονας με 3 βαθμούς ελευθερίας Η τριάδα των γωνιών περιγράφει πλήρως το αντικείμενο Κάθε τριάδα γωνιών τοποθετεί το άκρο του βραχίονα σε κάποια θέση Αντίστροφα για δεδομένη θέση του άκρου μπορεί να υπάρχει καμία, μία, ή πολλές τριάδες που να το πετυχαίνουν
Animation Κινηματική (kinematics): εύρεση/έλεγχος της θέσης των σημείων του αντικειμένου για δεδομένο διάνυσμα γωνιών στις αρθρώσεις P=f(θ) Καθορίζοντας τους ρυθμούς μεταβολής των γωνιών στις αρθρώσεις μπορώ να προσδιορίσω τις ταχύτητες των σημείων Dynamics: καθορισμός της κίνησης του μοντέλου από τις ασκούμενες δυνάμεις Λαμβάνοντας υπ όψιν τριβή, αδράνεια,...
Animation Kinematics και dynamics ασχολούνται με την forward συμπεριφορά του μοντέλου Στο animation είναι πολλές φορές χρήσιμα τα inverse kinematics Δεδομένης μιας επιθυμητής θέσης του μοντέλου (π.χ. άκρη βραχίονα) πώς θα βρούμε της γωνίες αρθρώσεων που την πετυχαίνουν θ=f(p)
Animation Εναλλακτικά μπορούμε να βρούμε τις ενδιάμεσες γωνίες που θα δώσουν τις ενδιάμεσες θέσεις του αντικειμένου καθώς κινείται στην τελική θέση. Λύση από τον χώρο του κλασσικού animation με το χέρι Key-frame animation: ζωγράφισμα του αντικειμένου σε σημαντικά στιγμιότυπα (key frames) Ζωγράφισμα των ενδιάμεσων θέσεων: inbeetweening
Animation Στα γραφικά με Η/Υ υπολογίζουμε τις γωνίες ή θέσεις σε σημαντικά στιγμιότυπα, κάνουμε παρεμβολή για ενδιάμεσες γωνίες/θέσεις και σχηματίζουμε τα ενδιάμεσα frames. Πρόκειται ουσιαστικά για κινηματική προσέγγιση. Χρήση splines γιαναδιαγράψουμετηνομαλή πορεία των αντικειμένων Απαιτείται αλληλεπίδραση
Morphing Αλλαγή του σχήματος του αντικειμένου: αρχικό και τελικό σχήμα Εύρεση αντιστοιχιών σε σημεία αρχικού και τελικού σχήματος και αυτόματος σχηματισμός των ενδιαμέσων καταστάσεων για ομαλή μετάβαση Εισαγωγή & διαγραφή σημείων
Constructive solid geometry (CSG) Η αναπαράσταση αντικειμένων μόνο με την επιφάνεια έχει μειονεκτήματα Δεν μπορούμε να παραστήσουμε τις ογκομετρικές ιδιότητες αντικειμένων Βάρος σε εφαρμογές CAD Ασάφειες
Constructive solid geometry (CSG) Χρήση στοιχειωδών συμπαγών γεωμετρικών στερεών: κύλινδροι, σφαίρες, παραλληλεπίπεδα Ιδιότητες επιφάνειας αλλά και ογκομετρικές Αναπαράσταση αντικειμένων με πράξεις άλγεβρας συνόλων στα στοιχειώδη στερεά Ένωση, τομή, διαφορά
Constructive solid geometry (CSG)
Constructive solid geometry (CSG) Οι εκφράσεις αναπαράστασης αντικειμένων μπορούν να αποθηκευθούν με κατάλληλα δένδρα εκφράσεων Εσωτερικοί κόμβοι: τελεστές Φύλλα: ορίσματα τελεστών (στοιχειώδη στερεά) Απεικόνιση του αντικειμένου με post order διάσχιση Αναδρομικός υπολογισμός αριστερού υποδένδρου, δεξιού υποδένδρου και ρίζας Απεικόνιση με χρήση παραλλαγής ray tracing
Constructive solid geometry (CSG)
Δένδρα σκίασης (Shading trees) Χρήση δένδρων για αποθήκευση & υπολογισμό μαθηματικών εκφράσεων που απαντώνται στη σκίαση I = klln + kl( rv a ) + kli d d s s a a a Χρήση για περιγραφή τεχνικών σκίασης στην RenderMan shading language
Δένδρα σκίασης (Shade trees) Diffuse, specular, ambient reflection blocks
BSP trees Χρήση δένδρων για την περιγραφή της σχετικής θέσης στο χώρο των αντικειμένων Χρήσιμο για γρήγορες δοκιμές ορατότητας (visibility tests) Απόρριψη μή ορατών αντικειμένων χωρίς να τα εξετάσω όλα Ένα επίπεδο χωρίζει το χώρο σε σε δύο υποσύνολα Περισσότερα επίπεδα δίνουν περαιτέρω υποδιαιρέσεις.
BSP trees Αν προβάλω τα πολύγωνα με τη σωστή σειρά (back to front) δεν χρειάζεται depth buffer Απαιτείται διάταξη ως προς το βάθος Εναλλακτική λύση: αποθήκευση σχετικής θέσης σε δένδρο
BSP trees Binary space partitioning trees Διάσχιση με backward in-order διάσχιση Αναδρομική διάσχιση δεξιού υποδένδρου, ρίζας, αριστερού υποδένδρου Διάταξη από πίσω προς τα μπροστά
BSP trees Αν ο παρατηρητής μετακινηθεί πίσω πετυχαίνω αντίστοιχη διάταξη με κανονική inorder διάσχιση Αριστερό υποδένδρο, ρίζα, δεξιό υποδένδρο Χρήσιμη αναπαράσταση για γρήγορο rendering σε εφαρμογές όπως flight simulators όπου το μοντέλο του κόσμου δεν αλλάζει, αλλάζει μόνο η θέση του παρατηρητή
Τετραδικά δένδρα (quadtrees) Χρησιμοποιούνται συνήθως για την αποδοτική αποθήκευση εικόνων Υποδιαίρεση της εικόνας σε 4 περιοχές Περαιτέρω υποδιαίρεση μη ομογενών περιοχών. Κάθε κόμβος έχει τέσσερα παιδία Κάθε επίπεδο αντιστοιχεί σε μια υποδιάιρεση
Τετραδικά δένδρα (quadtrees)
Οκταδικά δένδρα (octrees)