Professional Documents
Culture Documents
Αλγόριθμοι Απόκρυψης
Αλγόριθμοι Απόκρυψης
Αλγόριθμοι Απόκρυψης
• Στον πραγματικό κόσμο, τα αντικείμενα επικαλύπτουν το
ένα το άλλο κατά τη διεύθυνση παρατήρησης.
• Κάποια είναι πιο κοντά στον παρατηρητή και άλλα πιο μακριά.
Το ερώτημα είναι αν τα δύο σημεία βρίσκονται στην ίδια ακτίνα προβολής και
συνεπώς το ένα κρύβει το άλλο.
Προοπτικός Μετασχηματισμός
Συνθήκες Απόκρυψης
• Παράλληλη Προβολή: 𝑥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
• Ένα 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 το βάθος του πίσω επιπέδου αποκοπής (μέγιστο βάθος)
ys = yp 𝑥𝑝 , 𝑦𝑝
ys = yp ys = yp
𝑥𝑝 , 𝑦𝑝 𝑥𝑝 , 𝑦𝑝
Αλγόριθμος z-buffer
Υπολογισμός της τιμής βάθους 𝑧𝑝 για το 𝑃2 𝑥2 , 𝑦2
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.
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
}
int main(int argc, char** argv)
{…
glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
…
}
Αλγόριθμοι Λίστας Προτεραιότητας
• Ταξινόμηση πολυγώνων ώστε να εμφανιστεί στην οθόνη μία σωστή εικόνα.
• Αν δεν υπάρχει αλληλοεπικάλυψη στον άξονα Ζo, τα πολύγωνα μπορούν να ταξινομηθούν
ως προς την z-συντεταγμένη τους.
• Συνήθως απαιτείται μία σειρά ελέγχων ή και διαμερισμός πολυγώνων για να επιτευχθεί
μία σωστή ταξινόμηση.
• Η ταξινόμηση και το αποτέλεσμα που αποτυπώνεται στην εικόνα εξαρτάται από τη
θέση του παρατηρητή.
• Είναι αλγόριθμοι χώρου αντικειμένου.
• Το αποτέλεσμα τους είναι ίδιο για κάθε ανάλυση εικόνας.
• Δεν είναι ιδιαίτερα διαδεδομένοι λόγω της χαμηλής απόδοσης τους σε πεπλεγμένες
σκηνές.
Αλγόριθμος ταξινόμησης κατά βάθος (depth sort)
Αλγόριθμος του ζωγράφου
• Οι επιφάνειες των αντικειμένων αναπαρίστανται στην
οθόνη με σειρά που καθορίζεται από την απόσταση
τους από τον παρατηρητή.
• Οι επιφάνειες ταξινομούνται με βάση τη φθίνουσα
απόσταση τους από το κέντρο προβολής, που
βρίσκεται στην αρχή των αξόνων.
• Η επιφάνεια με το μέγιστο z θα είναι μακρύτερα από το
χρήστη και αντίστροφα.
• Η βασική ιδέα είναι πως ένα πολύγωνο Q που
βρίσκεται πιο κοντά στον παρατηρητή μπορεί να
καλύπτει τα πολύγωνα P επειδή βρίσκονται σε
μεγαλύτερη απόσταση από τον παρατηρητή (από ότι
το Q).
Αλγόριθμος ταξινόμησης κατά βάθος (depth sort)
Έλεγχος 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)