You are on page 1of 63

Αλγόριθμοι Απόκρυψης

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

Κατά αντιστοιχία, αφού δοθούν οι παράμετροι παρατήρησης ενός συνθετικού


κόσμου, δημιουργείται το ερώτημα ποιο είναι το εμφανές αντικείμενο σε κάθε σημείο
του επιπέδου προβολής και ποιο χρώμα αντιστοιχεί σε αυτό.
Αλγόριθμοι Απόκρυψης
• Ζητούμενο: Εύρεση κατάλληλων αλγορίθμων οι οποίοι θα «κρύβουν» τα
αντικείμενα που είναι πίσω από άλλα κατά τη διεύθυνση της
παρατήρησης.
Αλγόριθμοι Απόκρυψης
• Αποκοπή από το παράθυρο
προβολής (view – frustrum culling).
• Διαγραφή Πίσω Επιφανειών (back-
face culling).
• Απόκρυψη Επιφανειών (Occlusion
Culling).
Αλγόριθμοι Απόκρυψης
• Διαγραφή Πίσω Επιφανειών (back-face culling).
• Απόκρυψη Επιφανειών (Occlusion Culling)
• Αλγόριθμος Z-buffer
• Αλγόριθμος ταξινόμησης κατά βάθος
Αλγόριθμοι Απόκρυψης
• Χρησιμοποιούνται άμεσα ή έμμεσα διαδικασίες ταξινόμησης.
• Ταξινόμηση στη διάσταση του βάθους (Ζ): όσο μακρύτερα είναι ένα
αντικείμενο, τόσο λιγότερο είναι πιθανό να είναι ορατό.
Αλγόριθμοι Απόκρυψης
• Ταξινόμηση στην οριζόντια και κάθετη διάσταση (X και Y), ώστε να βρεθούν πια
αντικείμενα τέμνονται από την κάθε ακτίνα προβολής και να επιλέξουμε το
πλησιέστερο σε αυτά σαν εμφανές στο αντίστοιχο σημείο.
• Το είδος και η αποτελεσματικότητα της ταξινόμησης που χρησιμοποιείται από κάθε
αλγόριθμο επηρεάζει την απόδοση του.
• Δύο κατηγορίες αλγορίθμων:
• Αλγόριθμοι απόκρυψης ακμών.
• Αλγόριθμοι απόκρυψης επιφανειών.
• Οι αλγόριθμοι αυτοί χωρίζονται σε άλλες δύο κατηγορίες:
• Αλγόριθμοι χώρου αντικειμένων (Object space algorithm).
• Αλγόριθμοι χώρου εικόνας (Image space algorithm)
Αλγόριθμοι
Απόκρυψης
Έστω σκηνή με π={πi} αντικείμενα με
μέσο όρο Π={Πi} πολύγωνα.
Αλγόριθμοι Απόκρυψης
• Ο στόχος των αλγορίθμων απόκρυψης είναι να εντοπίσουν τα ορατά προς
τον παρατηρητή πολύγωνα ώστε να χρωματιστούν κατάλληλα όλα τα
πολύγωνα της σκηνής.
Αλγόριθμοι Απόκρυψης
Αλγόριθμοι χώρου αντικειμένων
• Συγκρίνουν τα αντικείμενα μίας σκηνής μεταξύ τους για να βρουν το
πλησιέστερο σε κάθε σημείο του επιπέδου προβολής:
• Για κάθε αντικείμενο π:
1. Εύρεση των ορατών τμημάτων του π μέσω σύγκρισης (Χ,Υ,Ζ) με όλα τα άλλα
αντικείμενα.
2. Χρωματισμός των ορατών τμημάτων του π στην οθόνη.
• Πολυπλοκότητα: Π2, όπου Π το πλήθος των πολυγώνων.
• Χρησιμοποιούν την ακρίβεια με την οποία έχουν οριστεί τα αντικείμενα, που
τυπικά είναι η ακρίβεια του υπολογιστή.
• Αν χρειαστεί να εστιάσουμε σε ένα τμήμα της σκηνής, ο αλγόριθμος δεν χρειάζεται να
κάνει νέους υπολογισμούς, γιατί δεν θα έχει αλλάξει κάτι στους υπολογισμούς
(αποτέλεσμα).
Αλγόριθμοι Απόκρυψης
Αλγόριθμοι χώρου εικόνας
• Για κάθε pixel p της εικόνας:
• Διέρχεται από αυτό μία ακτίνα προβολής.
• Εύρεση του πλησιέστερου αντικειμένου που τέμνεται από την ακτίνα προβολής
που περνά από το p.
• Χρωματισμός του p με το χρώμα του πλησιέστερου αντικειμένου στο σημείο
τομής.
• Πολυπλοκότητα: Π*P, όπου P το πλήθος των pixels και Π το πλήθος των
πολυγώνων.
• Λειτουργούν στην ακρίβεια που απαιτείται για την κάθε εικόνα.
• Αν αυξηθεί η ανάλυση της εικόνας, ο αλγόριθμος πρέπει να ξανατρέξει και να λύσει
ξανά το πρόβλημα της απόκρυψης με τα νέα δεδομένα ανάλυσης.
Αλγόριθμοι Απόκρυψης

Χρήση της πληροφορίας βάθους που έχει υπολογιστεί στην προβολή.


Αλγόριθμοι Απόκρυψης
• Τεχνικές που χρησιμοποιούν οι αλγόριθμοι απόκρυψης για την
βελτίωση της αποτελεσματικότητας τους:
• Προοπτικός Μετασχηματισμός.
• Συνάφεια (coherence)
• Περιβάλλοντες όγκοι
• Διαμερισμός χώρου
Προοπτικός Μετασχηματισμός
• Ταξινόμηση των αντικειμένων μίας
σκηνής που τέμνονται από τις
ακτίνες προβολής.
• Έστω δύο σημεία Σ1 = (𝑥1 , 𝑦1 , 𝑧1 )
και Σ2 = 𝑥2 , 𝑦2 , 𝑧2 στο ΣΣΠ.
• Συνθήκες απόκρυψης για τους δύο
τύπους προβολής.

Το ερώτημα είναι αν τα δύο σημεία βρίσκονται στην ίδια ακτίνα προβολής και
συνεπώς το ένα κρύβει το άλλο.
Προοπτικός Μετασχηματισμός
Συνθήκες Απόκρυψης
• Παράλληλη Προβολή: 𝑥1 = 𝑥2 & (𝑦1 = 𝑦2 )

𝑥1 𝑥2 𝑦1 𝑦2
• Προοπτική Προβολή: = & =
𝑧1 𝑧2 𝑧1 𝑧2

• Αν είναι πάνω στην ίδια ακτίνα προβολής τότε αποτελούν ένα ζεύγος
παρεμπόδισης.
• Από την τιμή βάθους z συμπεραίνεται το πλησιέστερο αντικείμενο το
οποίο παρεμποδίζει το άλλο.
Συνάφεια (Coherence)
• Είναι η ιδιότητα που έχουν γεωμετρικές οντότητες (όπως πολύγωνα, γραμμές
σάρωσης κτλ) να διατηρούν τοπικά σταθερές τις τιμές των χαρακτηριστικών
τους ή να τις μεταβάλλουν ομαλά.
• Οι αλγόριθμοι στα γραφικά εκμεταλλεύονται την συνάφεια για να μειώσουν το
υπολογιστικό κόστος μετατρέποντας ακριβούς μαθηματικούς υπολογισμούς σε
αυξητικούς (προσθετικούς).
• Πχ. Έστω ένα πολύγωνο που καλύπτει πολλά pixels και θέλουμε να
υπολογίσουμε το βάθος z σε όλα τα pixels που καλύπτει.
• Δεν χρειάζεται να υπολογιστεί η τομή του επιπέδου πολυγώνου με την ακτίνα προβολής
που ορίζει το κάθε pixel.
• Αφού το βάθος μεταβάλλεται γραμμικά, μπορεί να υπολογιστεί στο βάθος z0 ενός αρχικού
pixel και στην συνέχεια προστίθεται κατάλληλη σταθερά για να βρεθεί το βάθος των
γειτονικών pixels.
Συνάφεια (Coherence)
Είδη συνάφειας:
• Συνάφεια ακμής (πχ. κλίση)
• Συνάφεια επιφάνειας (πχ. επίπεδα)
• Συνάφεια αντικειμένου (πχ. συμμετρία)
• Συνάφεια γραμμών σάρωσης (πχ. αντικείμενα
που τέμνουν μία γραμμή σάρωσης)
• Συνάφεια καρέ (υποστηρίζεται στο animation)
Περιβάλλοντες όγκοι
• Απλά 3Δ σχήματα (πχ. ορθογώνιο
παραλληλεπίπεδο) που περιβάλλουν ένα
αντικείμενο της σκηνής και περιγράφουν τον όγκο
και τον χώρο που καταλαμβάνει σε αυτή.
• Χρησιμοποιούνται για να μειώσουν το
υπολογιστικό κόστος των απαιτούμενων
συγκρίσεων κατά την ταξινόμηση των
αντικειμένων.
• Αν οι περιβάλλοντες όγκοι δύο αντειμένων δεν τέμνονται, τότε ούτε τα
αντικείμενα τέμνονται.
• Αν οι περιβάλλοντες όγκοι τέμνονται, τότε απαιτείται να διερευνηθεί αν
τέμνονται ή όχι και τα αντικείμενα.
Περιβάλλοντες όγκοι
(a) Οι περιβάλλοντες όγκοι δεν τέμνονται άρα δεν τέμνονται ούτε τα
αντικείμενα.
(b) Οι περιβάλλοντες όγκοι τέμνονται → έλεγχος αν τέμνονται τα αντικείμενα:
τα αντικείμενα τέμνονται.
(c) Οι περιβάλλοντες όγκοι τέμνονται → έλεγχος αν τέμνονται τα αντικείμενα:
τα αντικείμενα δεν τέμνονται.
Διαμερισμός Χώρου
• Ο 3Δ χώρος της σκηνής διαμερίζεται σε ένα
σύνολο διατεταγμένων μερών (πχ. κυβικά
voxels).
• Το μέρος ή τα μέρη που καταλαμβάνει ένα
αντικείμενο ορίζουν έμμεσα και τη διάταξη
του σε σχέση με τα υπόλοιπα αντικείμενα
της σκηνής.
Διαγραφή Πίσω Επιφανειών (Back-face culling)
• Πίσω επιφάνεια: κάθε επίπεδη επιφάνεια που δεν είναι ορατή από τον
χρήστη σύμφωνα με το σημείο και την ακτίνα παρατήρησης.
• Επιφάνεια Α.

• Αν 𝑉 το διάνυσμα που σχηματίζει η ακτίνα


παρατήρησης με την επιφάνεια, και
• Ν το κάθετο διάνυσμα μίας επιφάνειας,
τότε μία επιφάνεια είναι ορατή αν:

𝑉∗Ν>0
Διαγραφή Πίσω Επιφανειών (Back-face culling)
• Αν η γωνία μεταξύ των διανυσμάτων 𝑉 𝜅𝛼𝜄 Ν είναι > 90ο, τότε η
επιφάνεια είναι πίσω επιφάνεια.
• Αν η γωνία μεταξύ των διανυσμάτων 𝑉 𝜅𝛼𝜄 Ν είναι <90ο , τότε η επιφάνεια
είναι ορατή στον παρατηρητή.
• Αν η γωνία μεταξύ των διανυσμάτων
𝑉 𝜅𝛼𝜄 Ν είναι = 90ο, τότε κάποιες μόνο
ακμές της επιφάνειας είναι ορατές.
• Μπορούν να αγνοηθούν αφού είναι κοινές με
κάποιες άλλες ορατές επιφάνειες.
Διαγραφή Πίσω Επιφανειών (Back-face culling)
• Υπολογισμός Διανύσματος 𝑉 :
• Το διάνυσμα 𝑉 μπορεί να υπολογιστεί μεταξύ του σημείου Παρατήρησης Π και
ενός σημείου της επιφάνειας P, με 𝑉 = ΠP .
• Αν ο παρατηρητής βρίσκεται στο κέντρο του ΣΣΠ, τότε 𝑉 = −P.
• Υπολογισμός Διανύσματος Ν:
• Τα αντικείμενα μίας σκηνής στην πλειοψηφία τους προσεγγίζονται από
πολύγωνα (συνήθως τρίγωνα).
• Ο έλεγχος ορατότητας γίνεται για κάθε πολύγωνο/τρίγωνο.
• Το κάθετο διάνυσμα Ν υπολογίζεται για κάθε πολύγωνο/τρίγωνο:

𝑃1 𝑃2 × 𝑃1 𝑃3
Ν=
𝑃1 𝑃2 × 𝑃1 𝑃3
Διαγραφή Πίσω Επιφανειών (Back-face culling)
𝑃1 𝑃2 ×𝑃1 𝑃3
• Υπολογισμός Διανύσματος Ν =
𝑃1 𝑃2 ×𝑃1 𝑃3

𝑃3

𝑃1

𝑃2

• Οι κορυφές των πολυγώνων πρέπει να έχουν φορά αντίθετη από τους


δείκτες του ρολογιού, ώστε το κάθετο διάνυσμα να έχει κατεύθυνση στο
εξωτερικό του αντικειμένου.
• Διαφορετικά θα υπολογιστεί κάθετο διάνυσμα με κατεύθυνση προς το
εσωτερικό του αντικειμένου.
Διαγραφή Πίσω Επιφανειών (Back-face culling)
• Οι μη-ορατές επιφάνειες (πίσω επιφάνειες) απομακρύνονται (διαγράφονται)
από την γραφική σωλήνωση εξόδου.
• Περίπου το 50% των πολυγώνων της σκηνής.
• Αν η σκηνή αποτελείται από ένα μόνο κυρτό σχήμα, τότε με τη διαγραφή πίσω
επιφανειών έχει επιτευχθεί και η απόκρυψη των πίσω επιφανειών.
• Αν στην σκηνή υπάρχουν μη κυρτά αντικείμενα, αντικείμενα με τρύπες ή
περισσότερα του ενός αντικειμένων, τότε χρειάζεται να χρησιμοποιηθεί και
αλγόριθμος «απόκρυψης πίσω επιφανειών».
• Η απόκρυψη των πίσω επιφανειών συμβαίνει νωρίς στη γραφική σωλήνωση,
μετά τον μετασχηματισμό παρατήρησης, ώστε να αποκλειστούν οι μη –ορατές
επιφάνειες από τους υπολογισμούς που απαιτούνται στα επόμενα στάδια
αποκοπής και προβολής.
Διαγραφή Πίσω Επιφανειών (Back-face culling)
Διαγραφή Πίσω Επιφανειών (Back-face culling)
Διαγραφή Πίσω Επιφανειών (Back-face culling)
Διαγραφή Πίσω Επιφανειών (Back-face culling)
• Όταν οι πίσω επιφάνειες γίνουν ορατές μετά από περιστροφή του
αντικειμένου;
Διαγραφή Πίσω Επιφανειών (Back-face culling)
• Λάθη που οφείλονται σε λάθος
κατεύθυνση των κάθετων
διανυσμάτων.
Αλγόριθμοι Απόκρυψης Επιφανειών
• Το πρόβλημα της απόκρυψης επιφανειών είναι ένα πρόβλημα
ταξινόμησης στη διάσταση του βάθους (z).
• Σύγκριση βάθους μεταξύ δύο σημείων.
• Τέσσερις γενικές κατηγορίες:
• Αλγόριθμος z-buffer (από τους πιο διαδεδομένους)
• Αλγόριθμοι scanline
• Αλγόριθμοι ταξινόμησης κατά βάθους (depth sort)
• Αλγόριθμοι υποδιαίρεσης επιφάνειας (area subdivision)
Αλγόριθμος z-buffer
• Αλγόριθμος χώρου εικόνας.
• Η εικόνα αποτελείται από
pixels.

Το ερώτημα είναι: το κάθε pixel τι χρώμα θα


έχει στην τελική εικόνα;
Αλγόριθμος z-buffer
• Γιατί επιλέχθηκαν τα συγκεκριμένα χρώματα στα αντικείμενα της
σκηνής;
Αλγόριθμος z-buffer
• Έστω ένα τμήμα μίας σκηνής η οποία
αποτελείται από τρία διαφορετικά
αντικείμενα με διαφορετικά χρώματα.
• Τα αντικείμενα προβάλλονται στην
οθόνη (επίπεδο προβολής).
• Έστω το pixel στο σημείο M(xp, yp)
ανήκει σε τρία διαφορετικά τρίγωνα
(που προέρχονται από τρία
διαφορετικά αντικείμενα).
• Τι χρώμα θα έχει το pixel στην τελική
εικόνα;
Αλγόριθμος z-buffer
• Για κάθε pixel (xp, yp), διατηρείται μία τιμή
• z-buffer:= τιμή βάθους zp (όπως έχει υπολογιστεί στην προβολή → η τιμή βάθους)
• frame_buffer:= χρωματική τιμή pixel

• Ένα pixel μπορεί να ανήκει σε πολλά διαφορετικά τρίγωνα, που μπορεί να προέρχονται από
διαφορετικά αντικείμενα της σκηνής.
• Από κάθε τρίγωνο στο οποίο ανήκει, το ίδιο pixel (xp, yp) λαμβάνει διαφορετική τιμή βάθους zp.
• Το z-buffer φυλάει για κάθε pixel (xp, yp) την ελάχιστη zp τιμή που έχει βρεθεί.
• Ο αλγόριθμος ψάχνει για κάθε pixel (xp, yp) να βρει το τρίγωνο που είναι πιο μπροστά, αυτό
δηλαδή που δίνει στο pixel τη μικρότερη τιμή βάθους ώστε να αναθέσει την αντίστοιχη
χρωματική τιμή frame_buffer.
• Το pixel θα έχει το χρώμα του τριγώνου από το οποίο έχει λάβει τη μικρότερη τιμή βάθους.
Αλγόριθμος z-buffer
Αρχικοποίηση Αλγορίθμου
• z_buffer[x,y] = f //όπου f το βάθος του πίσω επιπέδου αποκοπής (μέγιστο βάθος)

• Frame_buffer[x,y] = background //χρωματική τιμή background (φόντο)


Βήματα Αλγορίθμου:
(Για κάθε αντικείμενο της σκηνής και για κάθε τρίγωνο / πολύγωνο του)
1. Υπολογισμός της τιμής βάθους zp στο εσωτερικό pixel (xp, yp) του πολυγώνου, πάνω
σε συγκεκριμένη γραμμή σάρωσης y=ys (=yp).
• Η τιμή βάθους για κάθε εσωτερικό pixel ενός πολυγώνου/τριγώνου υπολογίζεται με παρεμβολή
των αντίστοιχων τιμών που έχουν οι κορυφές του πολυγώνου/τριγώνου στο οποίο ανήκει.
2. Αν 𝑧𝑝 < 𝑧_𝑏𝑢𝑓𝑓𝑒𝑟(𝑥𝑝 , 𝑦𝑝 ) τότε
• frame_buffer (𝑥𝑝 , 𝑦𝑝 ) = χρώμα του pixel (𝑥𝑝 , 𝑦𝑝 )
• z_buffer (𝑥𝑝 , 𝑦𝑝 ) = 𝑧𝑝 (παίρνει την τιμή βάθους του pixel (𝑥𝑝 , 𝑦𝑝 )
Αλγόριθμος z-buffer: Παράδειγμα
• Αρχικοποίηση τιμών:
z_buffer = f = 11.
frame_buffer: λευκό (χρώμα background)
• Για το pixel Μ(xp, yp) και το μπλε τρίγωνο:
• Βήμα 1: Υπολογισμός τιμής βάθους, έστω zp = 10.
• Βήμα 2: 𝑧𝑝 = 10 < z_buffer 𝑥𝑝 , 𝑦𝑝 =11

Άρα ανατίθεται νέα τιμή


z_buffer 𝑥𝑝 , 𝑦𝑝 =10, frame_buffer (𝑥𝑝 , 𝑦𝑝 ) = μπλε
Αλγόριθμος z-buffer: Παράδειγμα
• Τρέχουσες τιμές
z_buffer = 10.
frame_buffer: μπλε
• Για το pixel Μ(xp, yp) και το κόκκινο
τρίγωνο:
• Βήμα 1: Υπολογισμός τιμής βάθους, έστω zp = 5.
• Βήμα 2: 𝑧𝑝 = 5 < z_buffer 𝑥𝑝 , 𝑦𝑝 =10

Άρα ανατίθεται νέα τιμή


z_buffer 𝑥𝑝 , 𝑦𝑝 =5, frame_buffer (𝑥𝑝 , 𝑦𝑝 ) = κόκκινο
Αλγόριθμος z-buffer: Παράδειγμα
• Τρέχουσες τιμές
z_buffer = 5.
frame_buffer: κόκκινο
• Για το pixel Μ(xp, yp) και το κίτρινο τρίγωνο:
• Βήμα 1: Υπολογισμός τιμής βάθους, έστω zp = 7.
• Βήμα 2: 𝑧𝑝 = 7 > z_buffer 𝑥𝑝 , 𝑦𝑝 =5
Άρα δεν ανατίθεται νέα τιμή για το pixel, καθώς η τιμή βάθους που
λαμβάνει από το κίτρινο τρίγωνο είναι πιο μεγάλη από αυτή του
κόκκινου.
Αυτό σημαίνει ότι το κόκκινο τρίγωνο είναι πιο «μπροστά» από το
κίτρινο τρίγωνο (και από το μπλε, όπως υπολογίστηκε σε
προηγούμενο βήμα).
• Τελικές τιμές pixel:
• z_buffer 𝑥𝑝 , 𝑦𝑝 =5,
• frame_buffer (𝑥𝑝 , 𝑦𝑝 ) = κόκκινο
Αλγόριθμος z-buffer
• Το σημαντικότερο βήμα στον αλγόριθμο είναι ο υπολογισμός της τιμής
βάθους του pixel σε κάθε τρίγωνο.
• Η εικόνα σαρώνεται με γραμμές σάρωσης παράλληλες στο άξονα x.
• Γραμμή σάρωσης y = ys.

Σε κάθε γραμμή σάρωσης υπάρχουν


pixels που ανήκουν σε αυτή.

Η κάθε γραμμή σάρωσης τέμνει το κάθε


τρίγωνο σε διαφορετικά σημεία.
y = ys
Αλγόριθμος z-buffer
• Καθώς μελετάμε το πρόβλημα χρωματικής τιμής για κάθε pixel, μας
ενδιαφέρει η γραμμή σάρωσης που διέρχεται από αυτό.
• Η γραμμή σάρωσης που διέρχεται από κάθε pixel 𝑥𝑝 , 𝑦𝑝 είναι αυτή που
υποδεικνύεται από την y συντεταγμένη του pixel. Δηλαδή ισχύει
ys = yp
• Η τιμή βάθους ενός pixel zp υπολογίζεται χωριστά για κάθε τρίγωνο στο
οποίο ανήκει το pixel.
• Το κάθε τρίγωνο για το δεδομένο pixel 𝑥𝑝 , 𝑦𝑝 τέμνεται από την αντίστοιχη
γραμμή σάρωσης.
• Στη συνέχεια συγκρίνουμε τα αποτελέσματα από κάθε τρίγωνο.
Αλγόριθμος z-buffer
Ο υπολογισμός της τιμής βάθους του pixel γίνεται για κάθε τρίγωνο βάσει των σημείων
που ορίζουν το τρίγωνο και της γραμμής σάρωσης που διέρχεται από το pixel.

ys = yp 𝑥𝑝 , 𝑦𝑝

ys = yp ys = yp
𝑥𝑝 , 𝑦𝑝 𝑥𝑝 , 𝑦𝑝
Αλγόριθμος z-buffer
Υπολογισμός της τιμής βάθους 𝑧𝑝 για το 𝑃2 𝑥2 , 𝑦2

pixel Μ 𝑥𝑝 , 𝑦𝑝 , σε ένα τρίγωνο. ys = yp


• Δεδομένα: Συντεταγμένες οθόνης και 𝑀 𝑥𝑝 , 𝑦𝑝
τιμή βάθους των σημείων P0, P1, και P2 𝑃0 𝑥0 , 𝑦0
που ορίζουν το τρίγωνο.
𝑃1 𝑥1 , 𝑦1
• Χρήση γραμμικής παρεμβολής μεταξύ
δύο σημείων Α και Β:
𝑏−𝑢 𝑢−𝑎 Πρέπει να βρούμε τις συντεταγμένες
•𝑃 𝑢 = 𝐴 + 𝐵 με 𝑢 ∈ [𝑎, 𝑏] θέσης και την τιμή βάθους για το σημείο
𝑏−𝑎 𝑏−𝑎
Μ και τα σημεία που η γραμμή σάρωσης
τέμνει το τρίγωνο.
Αλγόριθμος z-buffer
• Για να υπολογιστεί το βάθος του pixel M πρέπει να υπολογιστεί η θέση
και το βάθος των σημείων A και Β:
• Παρεμβολή μεταξύ των σημείων P0 και P2 → υπολογίζεται η θέση 𝑥𝑎 , 𝑦𝑎 και η
τιμή βάθους 𝑧𝑎 για το σημείο Α.
• Παρεμβολή μεταξύ των σημείων P1 και P2 →
υπολογίζεται η θέση 𝑥𝑏 , 𝑦𝑏 και η τιμή
𝑃2 𝑥2 , 𝑦2 , 𝑧2
βάθους 𝑧𝑏 για το σημείο B.
• Παρεμβολή μεταξύ των σημείων A και B →
Α 𝑥𝑎 , 𝑦𝑎 , 𝑧𝑎 B 𝑥𝑏 , 𝑦𝑏 , 𝑧𝑏
υπολογίζεται η θέση 𝑥𝑝 , 𝑦𝑝 και
ys = yp
𝑀 𝑥𝑝 , 𝑦𝑝 𝑧𝑝
τιμή βάθους 𝑧𝑝 για το σημείο M.
(Αν οι υπολογισμοί είναι σωστοί, η τιμή 𝑥𝑝 , 𝑦𝑝 που θα 𝑃0 𝑥0 , 𝑦0 , 𝑧0
υπολογιστεί θα είναι ίση με την δεδομένη τιμή του pixel)
𝑃1 𝑥1 , 𝑦1 , 𝑧1
Παράδειγμα Αλγορίθμου z-buffer
Παράδειγμα 1: Η προβολή ενός μπλε τριγώνου στο επίπεδο προβολής δίνει ως αποτέλεσμα:
Συντεταγμένες κορυφών P0 (0,0), P1 (100, 20), P2 (50,50) και βάθος κορυφών 𝑧0 = 1, 𝑧1 = 8, 𝑧2 =
5 αντίστοιχα.
(α) Να υπολογιστεί το βάθος του σημείου M=(41,22) του τριγώνου.
(β) Αν αρχικά το pixel που αντιστοιχεί στο σημείο M έχει βάθος 𝑧Μ = 6 και χρώμα κόκκινο, ποιο
θα είναι το τελικό χρώμα του pixel, μετά τη σχεδίαση του τριγώνου P0 P1 P2 σύμφωνα με τον
αλγόριθμο z-buffer.
P2 (50,50), 𝑧2 = 5

Λύση: Θέλουμε να υπολογίσουμε τη τιμή


βάθους zp του σημείου Μ(41, 22) = (𝑥𝑝 , 𝑦𝑝 ) M(41,22)
που βρίσκεται εσωτερικά του τριγώνου P1 (100,20), 𝑧1 = 8
P0 P1 P2 . P0 (0,0), 𝑧0 = 1
Παράδειγμα Αλγορίθμου z-buffer
Το σημείο Μ βρίσκεται πάνω στη γραμμή σάρωσης 𝑦𝑠 = 𝑦𝑝 = 22

P2 (50,50), 𝑧2 = 5 P2 (50,50), 𝑧2 = 5

𝑦𝑠 = 𝑦𝑝 = 22 𝐴 𝐵

M(41,22) M(41,22)
P1 (100,20), 𝑧1 = 8 P1 (100,20), 𝑧1 = 8
P0 (0,0), 𝑧0 = 1 P0 (0,0), 𝑧0 = 1

• Η γραμμή σάρωσης τέμνει τις πλευρές του τριγώνου στα σημεία A και Β που επίσης
κείτονται στην γραμμή σάρωσης.
• Για να υπολογιστεί η τιμή βάθους 𝑧𝑝 του pixel Μ πρέπει πρώτα να υπολογιστεί
• Για το σημείο Α: η θέση 𝑥𝑎 , 𝑦𝑎 και το βάθος 𝑧𝑎 .
• Για το σημείο B: η θέση 𝑥𝑏 , 𝑦𝑏 και το βάθος 𝑧𝑏 .
Παράδειγμα Αλγορίθμου z-buffer
Υπολογισμός σημείου Α:
• Χρήση γραμμικής παρεμβολής μεταξύ των σημείων του τριγώνου P0 0,0 και
P2 (50,50).
• Το σημείο Α βρίσκεται πάνω στην γραμμή σάρωσης, άρα η y-
συντεταγμένη του είναι 𝑦𝑎 =22.
• Εξίσωση παρεμβολής μεταξύ των σημείων
P0 0,0,1 και P2 (50,50,5) P2 (50,50), 𝑧2 = 5

𝐴 𝐵
𝑏−𝑢 𝑢−𝑎
Α 𝑢 = P + P με 𝑢 ∈ [𝑎, 𝑏] M(41,22)
𝑏−𝑎 0 𝑏−𝑎 2
P1 (100,20), 𝑧1 = 8
P0 (0,0), 𝑧0 = 1
Θεωρούμε τα σημεία 3Δ διότι στους τύπους εισάγουμε και την τιμή
βάθους z. Διαφορετικά θα χρησιμοποιούσαμε τους ίδιους τύπους
ξεχωριστά.
Παράδειγμα Αλγορίθμου z-buffer
• Το ερώτημα είναι πιο είναι το παραμετρικό διάστημα 𝑢 ∈ [𝑎, 𝑏] στο οποίο
ορίζεται η ευθεία.
• Αφού γνωρίζουμε τη y- συντεταγμένη όλων των σημείων μπορούμε να κάνουμε
παρεμβολή αντιστοιχίζοντας την παράμετρο u με την y-συντεταγμένη.
• Άρα στο διάστημα [a,b]=[0,50] το σημείο Α θα αντιστοιχεί στο u=22.
𝑏−𝑢 𝑢−𝑎
Α 𝑢 = P + P με 𝑢 ∈ [0,50]
𝑏−𝑎 0 𝑏−𝑎 2 P2 (50,50), 𝑧2 = 5

50 − 𝑢 0 𝑢 − 0 50 50 − 𝑢 0 𝑢 50 𝐴(𝑥𝑎 , 22), 𝑧𝑎 𝐵
Α 𝑢 = 0 + 50 = 0 + 50
50 − 0 50 − 0 50 50
1 5 1 5 M(41,22)

0 50 0 50 22 P1 (100,20), 𝑧1 = 8
50−22 22 28 22
Α 22 =
50
0 + 50 50 = 50 0 + 50 50 = 22 P0 (0,0), 𝑧0 = 1
1 5 1 5 2.76
Παράδειγμα Αλγορίθμου z-buffer
Υπολογισμός σημείου B:
• Χρήση γραμμικής παρεμβολής μεταξύ των σημείων του τριγώνου P1 100,20 και
P2 (50,50).
• Το σημείο B βρίσκεται πάνω στην γραμμή σάρωσης, άρα η y-
συντεταγμένη του είναι 𝑦𝑏 =22.
• Εξίσωση παρεμβολής μεταξύ των σημείων
P1 100,20,8 και P2 (50,50,5) P2 (50,50), 𝑧2 = 5

𝐴 𝐵
𝑏−𝑢 𝑢−𝑎
B 𝑢 = P + P με 𝑢 ∈ [𝑎, 𝑏] M(41,22)
𝑏−𝑎 1 𝑏−𝑎 2
P1 (100,20), 𝑧1 = 8
P0 (0,0), 𝑧0 = 1
Παράδειγμα Αλγορίθμου z-buffer
• Το ερώτημα είναι πιο είναι το παραμετρικό διάστημα 𝑢 ∈ [𝑎, 𝑏] στο οποίο ορίζεται η
ευθεία.
• Αφού γνωρίζουμε τη y- συντεταγμένη όλων των σημείων μπορούμε να κάνουμε παρεμβολή
αντιστοιχίζοντας την παράμετρο u με την y-συντεταγμένη.
• Άρα στο διάστημα [a, b]=[20,50] το σημείο B θα αντιστοιχεί στο u=22.

𝑏−𝑢 𝑢−𝑎 P2 (50,50), 𝑧2 = 5


B 𝑢 = P + P με 𝑢 ∈ [20,50]
𝑏−𝑎 1 𝑏−𝑎 2
𝐴(22,22), B(𝑥𝑏 , 22), 𝑧𝑏
50 − 𝑢 100 𝑢 − 20 50 50 − 𝑢 100 𝑢 − 20 50 𝑧𝑎 = 2.76
B 𝑢 = 20 + 50 = 20 + 50 M(41,22)
50 − 20 50 − 20 30 30
8 5 8 5 P1 (100,20), 𝑧1 = 8
P0 (0,0), 𝑧0 = 1
100 50 100 50 96.6
50−22 22−20 28 2
B 22 =
30
20 + 30 50 = 30 20 + 30 50 = 22
8 5 8 5 7.8
Παράδειγμα Αλγορίθμου z-buffer
Υπολογισμός σημείου M:
• Χρήση γραμμικής παρεμβολής μεταξύ των σημείων 𝐴 22,22 και τιμή βάθους 𝑧𝑎 =
2.76 και 𝐵(96.6,22) και τιμή βάθους 𝑧𝑏 = 7.8 .
• Εξίσωση παρεμβολής μεταξύ των σημείων 𝐴 22, 22, 2.76 και 𝐵(96.6, 22, 7.8)
𝑏−𝑢 𝑢−𝑎
Μ 𝑢 = Α + Β με 𝑢 ∈ [𝑎, 𝑏]
𝑏−𝑎 𝑏−𝑎

Το ερώτημα είναι πιο είναι το παραμετρικό διάστημα


P2 (50,50), 𝑧2 = 5
𝑢 ∈ [𝑎, 𝑏] στο οποίο ορίζεται η ευθεία Μ(u).
• Επειδή η γραμμή σάρωσης είναι παράλληλη στον άξονα X
𝐴 𝐵
μπορούμε να κάνουμε παρεμβολή αντιστοιχίζοντας την
παράμετρο u με την x-συντεταγμένη. M(41,22)
Άρα στο διάστημα [a, b]=[22,96.6] το σημείο M θα P1 (100,20), 𝑧1 = 8
αντιστοιχεί στο u=41. P0 (0,0), 𝑧0 = 1
Παράδειγμα Αλγορίθμου z-buffer
𝑏−𝑢 𝑢−𝑎 P2 (50,50), 𝑧2 = 5
M 𝑢 = 𝐴 + 𝐵 με 𝑢 ∈ [22, 96.6]
𝑏−𝑎 𝑏−𝑎

96.6 − 𝑢 22 𝑢 − 22 96.6 𝐴(22,22), 𝑧𝑎 = 2.76 B(96.6,22), 𝑧𝑏 =7.8


M 𝑢 = 22 + 22
96.6 − 22 96.6 − 22 M(41,22)
2.76 7.8
96.6 − 𝑢 22 𝑢 − 22 96.6 P1 (100,20), 𝑧1 = 8
= 22 + 22
74.6 74.6 P0 (0,0), 𝑧0 = 1
2.76 7.8

22 96.6 22 96.6 41
96.6−41 41−22 55.6 19
M 41 = 22 + 22 = 22 + 22 = 22
74.6 74.6 74.6 74.6
2.76 7.8 2.76 7.8 4.043

Άρα η τιμή βάθους 𝑧𝑝 =4.043 που προέρχεται από το μπλε τρίγωνο P0 P1 P2


Παράδειγμα Αλγορίθμου z-buffer
(β) Αν αρχικά το pixel που αντιστοιχεί στο σημείο M έχει βάθος 𝑧Μ = 6 και χρώμα
κόκκινο, ποιο θα είναι το τελικό χρώμα του pixel, μετά τη σχεδίαση του τριγώνου
P0 P1 P2 σύμφωνα με τον αλγόριθμο z-buffer.
Το pixel Μ έχει τιμή βάθους 𝑧𝑝 =4.043 από το μπλε τρίγωνο P0 P1 P2 και προηγούμενη τιμή
βάθους 𝑧Μ = 6 και χρώμα κόκκινο. Βάσει του αλγορίθμου z-buffer αφού 𝑧𝑝 =4.043 <
𝑧Μ = 6 , το pixel Μ θα έχει στην εικόνα χρώμα μπλε.
Άσκηση προς λύση: Αλγόριθμος z-buffer
Άσκηση 1: Έστω προοπτική προβολή στον ΜΠΙ όπου το έμπροσθεν επίπεδο
αποκοπής βρίσκεται σε απόσταση d=1 και όπισθεν επίπεδο αποκοπής βρίσκεται σε
απόσταση f=10 από τον παρατηρητή, ενώ h=1.
(α) Να προβληθεί το τρίγωνο με συντεταγμένες P0= (1,0,3), P1= (9,3,9), P2= (5,5,6) στο
επίπεδο προβολής και να υπολογιστούν οι τιμές βάθους των κορυφών του.
(β) Χρησιμοποιώντας τον αλγόριθμο z-buffer και τις τιμές βάθους που
υπολογίστηκαν παραπάνω βρείτε το βάθος του pixel που αντιστοιχεί στο σημείο
M’(2Τ3 , 1Τ3).
𝑑∗𝑥𝜋 𝑑∗𝑦𝜋
(Δίνονται οι τύποι για τον υπολογισμό των συντεταγμένων οθόνης: 𝑥𝑜 = , 𝜅𝛼𝜄 𝑦𝑜 = και για
𝑧𝜋 ∗ℎ 𝑧𝜋 ∗ℎ
𝑓∗(1−𝑑ൗ𝑧𝜋 )
την τιμή βάθους 𝑧𝜊 = )
𝑓−𝑑
Ενεργοποίηση z-buffer στην OpenGL
void my_display()
{
glClearDepth(1); // set clear depth val
glEnable(GL_DEPTH_TEST); // enable z-buffer (glDisable(GL_DEPTH_TEST);)
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); // clear z & f buffers

}
int main(int argc, char** argv)
{…
glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);

}
Αλγόριθμοι Λίστας Προτεραιότητας
• Ταξινόμηση πολυγώνων ώστε να εμφανιστεί στην οθόνη μία σωστή εικόνα.
• Αν δεν υπάρχει αλληλοεπικάλυψη στον άξονα Ζo, τα πολύγωνα μπορούν να ταξινομηθούν
ως προς την z-συντεταγμένη τους.
• Συνήθως απαιτείται μία σειρά ελέγχων ή και διαμερισμός πολυγώνων για να επιτευχθεί
μία σωστή ταξινόμηση.
• Η ταξινόμηση και το αποτέλεσμα που αποτυπώνεται στην εικόνα εξαρτάται από τη
θέση του παρατηρητή.
• Είναι αλγόριθμοι χώρου αντικειμένου.
• Το αποτέλεσμα τους είναι ίδιο για κάθε ανάλυση εικόνας.
• Δεν είναι ιδιαίτερα διαδεδομένοι λόγω της χαμηλής απόδοσης τους σε πεπλεγμένες
σκηνές.
Αλγόριθμος ταξινόμησης κατά βάθος (depth sort)
Αλγόριθμος του ζωγράφου
• Οι επιφάνειες των αντικειμένων αναπαρίστανται στην
οθόνη με σειρά που καθορίζεται από την απόσταση
τους από τον παρατηρητή.
• Οι επιφάνειες ταξινομούνται με βάση τη φθίνουσα
απόσταση τους από το κέντρο προβολής, που
βρίσκεται στην αρχή των αξόνων.
• Η επιφάνεια με το μέγιστο z θα είναι μακρύτερα από το
χρήστη και αντίστροφα.
• Η βασική ιδέα είναι πως ένα πολύγωνο Q που
βρίσκεται πιο κοντά στον παρατηρητή μπορεί να
καλύπτει τα πολύγωνα P επειδή βρίσκονται σε
μεγαλύτερη απόσταση από τον παρατηρητή (από ότι
το Q).
Αλγόριθμος ταξινόμησης κατά βάθος (depth sort)

Αλγόριθμος του ζωγράφου


• Ο αλγόριθμος σχεδιάζει τα πολύγωνα,
ξεκινώντας από αυτό που βρίσκεται
μακρύτερα από τον παρατηρητή και
καταλήγοντας στο κοντινότερο.
• Έτσι σχεδιάζεται πρώτα το P στην
οθόνη και στη συνέχεια για την
παράσταση του Q που καλύπτει το P ή
τμήμα του P ενημερώνεται εκ νέου το
frame buffer.
Αλγόριθμος ταξινόμησης κατά βάθος (depth sort)
• Ο αλγόριθμος είναι σε θέση να αναπαραστήσει εύκολα σκηνές για τις οποίες είναι εφικτή μία
ξεκάθαρη ταξινόμηση των επιφανειών με βάση την απόσταση τους από τον παρατηρητή.
• Αν τα αντικείμενα στη σκηνή είναι πολύ κοντά, η ταξινόμηση δεν είναι πολύ εύκολη, καθώς
δεν μπορεί να αποφασιστεί από μία απλή σύγκριση των z τιμών για το αν ένα Q καλύπτεται
από το P.

• Έστω P το πολύγωνο με την μεγαλύτερη


απόσταση από τον παρατηρητή → τιμή
zmax(P).

• Προτού παρασταθεί το P στην οθόνη, πρέπει


να εξασφαλισθεί ότι για κάθε Q που η z-
έκταση του επικαλύπτεται με την z-έκταση
του P, το P δεν καλύπτει το Q.
Αλγόριθμος ταξινόμησης κατά βάθος (depth sort)
• Για τον έλεγχο επικάλυψης γίνονται πέντε (5) διαδοχικοί έλεγχοι διαφορετικής
πολυπλοκότητας για να βρεθεί η σωστή σειρά στη λίστα σχεδίασης.
• Οι έλεγχοι αφορούν όλα τα Q για τα οποία υπάρχει επικάλυψη κατά την z-έκταση με το πολύγωνο
P με τη μέγιστη τιμή z: zmax(P).
• Αν έστω και ένας έλεγχος βγει θετικός σημαίνει ότι το P δεν καλύπτει το Q.
• Αν κάποιος έλεγχος αποτύχει τότε
σημαίνει ότι το P μπορεί να καλύπτει Έλεγχος 1: Επιτυχής Έλεγχος 2: Επιτυχής
τμήμα του Q και χρειάζεται περεταίρω
ανάλυση.
• Έλεγχος 1: Δεν επικαλύπτονται οι x-
εκτάσεις των P και Q.
• Έλεγχος 2: Δεν επικαλύπτονται οι y-
εκτάσεις των P και Q.
Αλγόριθμος ταξινόμησης κατά βάθος (depth sort)
• Έλεγχος 3: Το P βρίσκεται στον ημιχώρο Έλεγχος 3: Επιτυχής Έλεγχος 4: Επιτυχής
του επιπέδου που ορίζεται από το Q και
στον οποίο δεν βρίσκεται το κέντρο
προβολής (παρατηρητής).
• Έλεγχος 4: Το Q βρίσκεται στον ημιχώρο
του επιπέδου που ορίζεται από το P και
στον οποίο βρίσκεται και το κέντρο
προβολής.

• Έλεγχος 5: Δεν επικαλύπτονται οι


προβολές των P και Q στο επίπεδο XY.

Έλεγχος 5: Επιτυχής
Αλγόριθμος ταξινόμησης κατά βάθος (depth sort)
• Αν για δεδομένο πολύγωνο P με zmax(P), και για κάθε πολύγωνο Q έστω ένας
έλεγχος είναι επιτυχής, τότε το P σχεδιάζεται στην οθόνη.
• Στην συνέχεια, οι έλεγχοι επαναλαμβάνονται για το επόμενο πολύγωνο με την αμέσως
μικρότερη τιμή z.
Αν και οι πέντε έλεγχοι αποτύχουν τότε:
• Υποθέτουμε ότι το P καλύπτει το Q ή κάποιο τμήμα του Q.
• Πρέπει να ελεγχθεί αν και το Q καλύπτει το P.
• Εναλλάσσονται οι ρόλοι στον αλγόριθμο και τρέχουν τα βήματα 3 & 4.
• Αν κάποιος έλεγχος βγει θετικός/επιτυχής τότε ο αλγόριθμος
συνεχίζεται με το Q.
• Αν και οι δύο έλεγχοι δεν ισχύουν, τότε τα P και Q δεν μπορούν να απεικονισθούν
σωστά με την παραπάνω μέθοδο.
• Το πολύγωνο Q (ή P) κόβεται με βάση το επίπεδο P (ή Q) και δημιουργούνται δύο
πολύγωνα για τα οποία τρέχουν ξανά οι 5 έλεγχοι επικάλυψης.
Αλγόριθμος ταξινόμησης κατά βάθος (depth sort)

You might also like