ΤΕΙ Θεσσαλονίκης Τμήμα Πληροφορικής Γραφικά Υπολογιστών: Αποκοπή στις 3D Διαστάσεις Πασχάλης Ράπτης ttp://aetos.it.teite.gr/~praptis praptis@it.teite.gr
2 Περιεχόμενα Θα δούμε μερικά demos προοπτικών προβολών και θα εξετάσουμε πως λειτουργεί η αποκοπή στις 3-D. OpenGL μαθήματα του Nate Robins Όγκος αποκοπής (clipping volume) Te zone labelling sceme 3-D αποκοπή Αποκοπή σημείου (point clipping) Αποκοπή γραμμών (line clipping) Αποκοπή πολυγώνων (polygon clipping)
3 Μαθήματα OpenGL του Nate Robins Ο Robins προσφέρει μια σειρά από OpenGL εφαρμογές στην ιστοσελίδα. ttp://www.mission.com/~nate/tutors.tml
4 Αποκοπή 3D Αποκόπτονται αντικείμενα από μια σκηνή που δεν είναι ορατά Ο σκοπός της αποκοπής είναι να μειωθεί ο υπολογιστικός χρόνος Η αποκοπή 3D επιτυγχάνεται σε δύο βασικά βήματα: Πετάμε τα αντικείμενα που δεν μπορούν να ιδωθούν δηλ. αντικείμενα που είναι πίσω από την κάμερα, εκτός πεδίου όρασης, ή πολύ απομακρυσμένα Αποκόπτουμε αντικείμενα που τέμνονται με το επίπεδο αποκοπής (clipping plane)
5 Διαγραφή Αντικειμένων Αντικείμενα που δεν είναι δυνατόν να ιδωθούν (παρατηρηθούν) απορρίπτονται => (εκτός όγκου θέασης-view volume). Τα όρια των αντικειμένων κύβος / παραλληλεπίπεδο / σφαίρα συγκρίνονται με τις διαστάσεις του όγκου θέασης Μπορεί να γίνει πριν ή μετά την προβολή.
6 Αποκοπή Αντικειμένων (Clipping) Αντικείμενα που είναι μερικώς μέσα στο όγκο θέασης (viewing volume) χρειάζεται να αποκοπούν όπως και στην περίπτωση με τις 2D Κοντινό Πλάνο Αποκοπής Μακρινό Πλάνο Αποκοπής Απορρίπτεται Δημιουργείται Αποκόπτεται Απορρίπτεται
7 Όγκος Αποκοπής (Clipping Volume) Images taken from Hearn & Baker, Computer Grapics wit OpenGL (2004) Μετά την προοπτική μετατροπή ο κωνικός όγκος θέασης (frustum viewing volume) μετατρέπεται σε ένα παραλληλεπίπεδο [διατηρούμε όλες τις z συντεταγμένες που είναι πληροφορίες για το βάθος]
8 Κανονικοποίηση (Normalisation) Images taken from Hearn & Baker, Computer Grapics wit OpenGL (2004) Ο μετασχηματιζόμενος όγκος κανονικοποιείται στην θέση (0, 0, 0) και ο z άξονας αναστρέφεται (reversed)
9 Πότε εφαρμόζεται η αποκοπή; Η αποκοπή εκτελείται μετά το μετασχηματισμό προβολής και την κανονικοποίηση Έχουμε: Εκτελούνται όλες οι αποκοπές σε αυτές τις ομογενείς συντεταγμένες. = z y M z y
0 Διαίρεση του χώρου (Dividing Up Te World) Όπως και στις δύο διαστάσεις διαιρούμε τον χώρο σε περιοχές. Στις 3D χρησιμοποιούμε έναν κωδικό περιοχής 6-bit που δίνει 27 διαφορετικούς κωδικούς περιοχών Τα bits σε αυτούς τους κωδικούς περιοχών ειναι: bit 6 Far bit 5 Near bit 4 Top bit 3 Bottom bit 2 Rigt bit Left
Διαίρεση του χώρου (Dividing Up Te World) Επειδή κανονικοποιήσαμε τον όγκο αποκοπής (clipping volume) ελέγχουμε για αυτές τις περιοχές ως εξής: y z Μετά από απλές πράξεις λαμβάνουμε: y y z if > 0 z if < 0
Images taken from Hearn & Baker, Computer Grapics wit OpenGL (2004) 2 Κωδικοί Περιοχών (Region Codes)
3 Αποκοπή Σημείου (Point Clipping) Η αποκοπή σημείου είναι απλή διαδικασία και δεν αναπτύσσεται.
4 Αποκοπή Γραμμών - Line Clipping Σε όλες τις άκρες των γραμμών (αρχή-τέλος) δίνουμε τους κατάλληλους κώδικες περιοχής. Οι γραμμές όπου οι δύο άκρες τους είναι μέσα στην περιοχή [000000] δεν αποκόπτονται. Αποκόπτουμε όλες τις γραμμές που οι άκρες τους έχουν ένα κοινό bit σε οποιαδήποτε θέση Αυτές οι γραμμές πουθενά δεν τέμνουν τον όγκο θέασης (viewing volume) (Όπως και στις δυο διαστάσεις) Στο επόμενο παράδειγμα η γρήμμη από το P 3 [000] ως το P 4 [000] μπορεί να αποκοπεί.
5 Αποκοπή γραμμής Παράδειγμα Images taken from Hearn & Baker, Computer Grapics wit OpenGL (2004)
6 Εξίσωση γραμμής για την αποκοπή στις 3D Οι εξισώσεις για την αποκοπή τμήματος (segment) γραμμής στις 3D δίνονται στην παραμετρική τους μορφή form Για ένα τμήμα γραμμής με άκρα στο P (, y, z, ) και P 2 (2, y2, z2, 2) η παραμετρική εξίσωση που περιγράφει κάθε σημείο της γραμμής είναι: P = P + P P ) u 0 u ( 2
7 Εξίσωση γραμμής για την αποκοπή στις 3D (2) Από την παραμετρική εξίσωση της γραμμής δημιουργούμε τις εξισώσεις για τις ομογενείς συντεταγμένες: u u z z z z u y y y y u ) 2 ( ) 2 ( ) 2 ( ) 2 ( + = + = + = + =
Images taken from Hearn & Baker, Computer Grapics wit OpenGL (2004) 8 3D Αποκοπή γραμμής Παράδειγμα Θεωρούμε την γραμμή από το P [00000] ως το P 2 [0000] Επειδή τα άκρα της γραμμής έχουν διαφορετική τιμή στο bit 2 συμπεραίνουμε ότι η γραμμή τέμνει το δεξιό όριο (boundary)
9 3D Αποκοπή γραμμής Παράδειγμα (2) Καθώς το δεξί όριο είναι στο = γνωρίζουμε ότι ισχύει η παρακάτω εξίσωση: την οποία μπορούμε να λύσουμε ως προς u: χρησιμοποιώντας αυτή την τιμή για το u μπορούμε να υπολογίσουμε το y p και το z p ) 2 ( ) 2 ( = + + = = u u p 2) 2 ( ) ( u =
20 3D Αποκοπή γραμμής Παράδειγμα (3) Στην συνέχεια εφαρμόζουμε τον αλγόριθμο αποκοπής γραμμής όπως στις δυο διαστάσεις.
Images taken from Hearn & Baker, Computer Grapics wit OpenGL (2004) 2 3D Αποκοπή Πολυγώνων (Polygon Clipping) Η πιο συχνή περίπτωση αποκοπής στις 3D είναι η αποκοπή γραφικών αντικειμένων που αποτελούνται (made up) από πολύγωνα.
22 3D Αποκοπή Πολυγώνων (2) Σε αυτήν την περίπτωση πρώτα προσπαθούμε να απορρίψουμε ολόκληρα αντικείμενα χρησιμοποιώντας τον περιβάλλοντα όγκο τους. Στην συνέχεια ένα-ένα πολύγωνο αποκόπτεται εφαρμόζοντας τον αλγόριθμο Suterland- Hodgman που έχουμε δει σε προηγούμενο μάθημα.
23 Τρικ με την αποκοπή πλάνων Για την αποκοπή απομακρυσμένων πλάνων τοποθετείται ομίχλη (fog) κάτι που κάνει ασαφή τα απομακρυσμένα αντικείμενα Τα πολύ κοντινά στην κάμερα αντικείμενα γίνονται διαφανή.
Σύνοψη Σήμερα είδαμε πως επιτυγχάνεται η αποκοπή στις 3-D