Εικονική κάμερα. Προοπτική προβολή

Αυτο 16.05.2019
Επισκόπηση προγράμματος Η έκδοση υπολογιστή του Microsoft Excel Viewer θα επιτρέψει...

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

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

Προοπτική προβολή

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

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

Το απλούστερο μοντέλο προοπτικής προβολής

Ας εξετάσουμε την απλούστερη περίπτωση όταν το κέντρο της προβολής της κάμερας (εστίαση) τοποθετείται στην αρχή του συστήματος συντεταγμένων και το επίπεδο της εικόνας συμπίπτει με το επίπεδο Z=1. Έστω (X,Y,Z) οι συντεταγμένες ενός σημείου σε τρισδιάστατο χώρο και (x,y) η προβολή αυτού του σημείου στην εικόνα I. Προοπτική προβολήσε αυτή την περίπτωση περιγράφεται από τις ακόλουθες εξισώσεις:

Σε μορφή πίνακα χρησιμοποιώντας ομοιογενείς συντεταγμένες, αυτές οι εξισώσεις ξαναγράφονται ως εξής:

(2.2)

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

Βαθμονόμηση εσωτερικής κάμερας

Η πιο απλή περίπτωση προοπτικής προβολής σχεδόν πάντα δεν αντιστοιχεί στην πραγματική κάμερα. Η απόσταση από το κέντρο προβολής στο επίπεδο εικόνας, δηλ. η εστιακή απόσταση, που συμβολίζεται με f, συνήθως δεν είναι ίση με 1. Επίσης, οι συντεταγμένες ενός σημείου στο επίπεδο της εικόνας μπορεί να μην συμπίπτουν με απόλυτες συντεταγμένες. Κατά τη χρήση ψηφιακή φωτογραφική μηχανή, η σχέση μεταξύ των συντεταγμένων ενός σημείου στην εικόνα και των απόλυτων συντεταγμένων ενός σημείου σε ένα ιδανικό επίπεδο, καθορίζεται από το σχήμα και το μέγεθος των pixel του πίνακα.

Ας υποδηλώσουμε τις διαστάσεις των εικονοστοιχείων της μήτρας της ψηφιακής φωτογραφικής μηχανής ως p x , p y , τη γωνία κλίσης των εικονοστοιχείων ως α και το κύριο σημείο ως , Εικ. 2. Τότε οι συντεταγμένες του σημείου (x,y) της εικόνας που αντιστοιχεί στο σημείο (x R , y R) στο ιδανικό επίπεδο καθορίζονται από την έκφραση:

(2.3)

Αν f x,f y είναι η εστιακή απόσταση f, μετρούμενη σε πλάτη και ύψη εικονοστοιχείων, και το tan(α)*f/p y συμβολίζεται ως s, τότε ο τύπος 2.3 μετατρέπεται σε:

(2.4)

Ο πίνακας K ονομάζεται εσωτερικός πίνακας βαθμονόμησης της κάμερας. Στις περισσότερες περιπτώσεις, στις πραγματικές ψηφιακές φωτογραφικές μηχανές η γωνία pixel είναι κοντά στην ευθεία, δηλ. παράμετρος s=0 και το πλάτος και το ύψος του εικονοστοιχείου είναι ίσα. Το βασικό σημείο βρίσκεται συνήθως στο κέντρο της εικόνας. Επομένως, ο πίνακας K μπορεί να γραφτεί ως:

(2.5)

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

Βαθμονόμηση εξωτερικής κάμερας

Έστω M ένα σκηνικό σημείο σε τρισδιάστατο χώρο. Οποιαδήποτε κίνηση είναι ένας Ευκλείδειος μετασχηματισμός του χώρου, επομένως σε ομοιογενείς συντεταγμένες εκφράζεται ως:

(2.6)

όπου R είναι ο πίνακας περιστροφής, T= T είναι το διάνυσμα μετάφρασης.

Η κίνηση της κάμερας σε σχέση με τη σκηνή είναι ισοδύναμη με την αντίστροφη κίνηση των σημείων της σκηνής σε σχέση με την κάμερα, επομένως είναι ίση με:

(2.7)

όπου R, T είναι ο πίνακας περιστροφής και το διάνυσμα κίνησης της κάμερας σε σχέση με τη σκηνή. Ο πίνακας C ονομάζεται μήτρα εξωτερική βαθμονόμησηκάμερες. Ο πίνακας C-1 ονομάζεται πίνακας κινήσεις της κάμερας. Έτσι, η μήτρα βαθμονόμησης της εξωτερικής κάμερας μεταφράζει τις συντεταγμένες των σημείων σκηνής από το σύστημα συντεταγμένων σκηνής στο σύστημα συντεταγμένων που σχετίζεται με την κάμερα.

Ολοκληρωμένο μοντέλο προβολής προοπτικής

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

Σε πιο συνοπτική μορφή, λαμβάνοντας υπόψη την προηγούμενη σημείωση, αυτός ο τύπος μπορεί να γραφτεί ως:

Ο πίνακας P ονομάζεται μήτρα προβολής κάμερας.

Κατ' αναλογία με τον γενικό μετασχηματισμό προοπτικής, ας εξετάσουμε πρώτα την απλούστερη περίπτωση πολλά υποσχόμενη μεταμόρφωσηεπίπεδο. Έστω το επίπεδο p συμπίπτει με το επίπεδο Z=0, τότε οι ομοιογενείς τρισδιάστατες συντεταγμένες οποιουδήποτε σημείου του είναι M=. Για οποιαδήποτε κάμερα με πίνακα προβολής P, ο μετασχηματισμός προοπτικής του επιπέδου περιγράφεται από έναν πίνακα 3*3:


Δεδομένου ότι οποιοδήποτε επίπεδο στον τρισδιάστατο χώρο μπορεί να μεταφερθεί στο επίπεδο Z = 0 με τον Ευκλείδειο μετασχηματισμό της περιστροφής και της μετάφρασης, που ισοδυναμεί με τον πολλαπλασιασμό του πίνακα της κάμερας P με τον πίνακα μετασχηματισμού L, η προοπτική εμφάνιση ενός αυθαίρετου επιπέδου στο διάστημα περιγράφεται από γραμμικός μετασχηματισμόςμε μήτρα 3*3.

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

Γεωμετρία δύο εικόνων

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

Μετασχηματισμός προοπτικού επιπέδου

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

Εάν ολόκληρη η σκηνή ή μέρος της είναι ένα αεροπλάνο, τότε οι εικόνες της είναι αναμμένες διαφορετικούς τύπουςμε μη συμπίπτοντα κέντρα κάμερας μπορούν να μετατραπούν το ένα στο άλλο με μετασχηματισμό ομογραφίας. Έστω p το παρατηρούμενο επίπεδο, H 1 ο μετασχηματισμός ομογραφίας μεταξύ του επιπέδου p και της εικόνας Ι 1, H 2 - μετασχηματισμός ομογραφίας μεταξύ επιπέδου p και εικόνας Ι 2. Στη συνέχεια ο μετασχηματισμός ομογραφίας H 12 μεταξύ των εικόνων Ι 1Και Ι 2μπορεί να βγει ως εξής:

Το H 12 δεν εξαρτάται από την παραμετροποίηση του επιπέδου p και επομένως δεν εξαρτάται από το σύστημα συντεταγμένων στο διάστημα

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

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

Θεμελιώδης μήτρα

Ας εξετάσουμε την περίπτωση που τα κέντρα των δύο τύπων καμερών δεν συμπίπτουν. Αφήνω Γ 1Και Γ 2- κέντρα δύο καμερών, M - τρισδιάστατο σημείο της σκηνής, m 1Και m 2- προβολές του σημείου Μ στην πρώτη και στη δεύτερη εικόνα, αντίστοιχα. Έστω P ένα επίπεδο που διέρχεται από το σημείο M και τα κέντρα των καμερών Γ 1Και Γ 2. Το επίπεδο P τέμνει το επίπεδο εικόνας της πρώτης και της δεύτερης όψης κατά μήκος ευθειών l 1Και l 2. Από τις ακτίνες Γ 1 ΜΚαι Γ 2 Μβρίσκονται στο επίπεδο P, τότε είναι προφανές ότι τα σημεία m 1Και m 2ξαπλώστε σε ευθείες γραμμές l 1Και l 2αντίστοιχα. Μπορούμε να δώσουμε μια γενικότερη δήλωση ότι οι προβολές οποιουδήποτε σημείου Μ" που βρίσκεται στο επίπεδο Π και στις δύο εικόνες πρέπει να βρίσκονται σε ευθείες γραμμές l 1Και l 2. Αυτές οι γραμμές ονομάζονται επιπολικές γραμμές. Το επίπεδο P ονομάζεται επιπολικό επίπεδο.

Δύο όψεις της ίδιας σκηνής ονομάζονται στερεοφωνικό ζεύγος και τμήμα C 1 C 2, η σύνδεση των κέντρων των καμερών ονομάζεται βάση του στερεοφωνικού ζεύγους (γραμμή βάσης) ή στερεοφωνική βάση. Οποιοδήποτε επιπολικό επίπεδο διέρχεται από το τμήμα C 1 C 2. Αφήνω C 1 C 2τέμνει την πρώτη και τη δεύτερη εικόνα σε σημεία ε 1Και ε 2αντίστοιχα. Πόντοι ε 1Και ε 2ονομάζονται επιπολικά σημεία ή επίπολοι. Όλες οι επιπολικές γραμμές τέμνονται σε σημεία ε 1Και ε 2στην πρώτη και στη δεύτερη εικόνα αντίστοιχα. Το σύνολο των επιπολικών επιπέδων είναι μια δέσμη που τέμνεται κατά μήκος της στερεοφωνικής βάσης C 1 C 2. Οι πολλές επιπολικές γραμμές και στις δύο εικόνες αντιπροσωπεύουν επίσης δέσμες ευθειών που τέμνονται στο ε 1Και ε 2 .

Πόντοι m 1Και m 2ονομάζονται αντίστοιχες αν είναι προβολές του ίδιου σκηνικού σημείου Μ. Επιπολικές γραμμές l 1Και l 2λέγονται αντίστοιχα αν βρίσκονται στο ίδιο επιπολικό επίπεδο P. Αν το επιπολικό επίπεδο P διέρχεται από ένα σημείο m 1, μετά οι επιπολικές γραμμές l 1Και l 2, που βρίσκονται σε αυτό ονομάζονται αντίστοιχα με το σημείο m 1.

Περιορισμός στη θέση των αντίστοιχων σημείων m 1Και m 2, που προκύπτει από την επιπολική γεωμετρία, μπορεί να διατυπωθεί ως εξής: σημείο m 2, αντίστοιχο m 1, πρέπει να βρίσκεται στην επιπολική γραμμή l 2, αντίστοιχο m 1. Αυτή η κατάσταση ονομάζεται επιπολικός περιορισμός. Σε ομοιογενείς συντεταγμένες, η προϋπόθεση ότι ένα σημείο mβρίσκεται στη γραμμή μεγάλογραμμένο ως l T m=0. Η επιπολική γραμμή διέρχεται επίσης από το επιπολικό σημείο. Εξίσωση ευθείας που διέρχεται από σημεία m 1Και ε 1μπορεί να γραφτεί ως:

l 1 ~ x m 1,

Οπου x - αντισυμμετρική μήτραδιαστάσεις 3*3 έτσι ώστε, x m 1- διανυσματικό προϊόν m 1Και ε 1.

Για τις αντίστοιχες επιπολικές γραμμές l 1Και l 2δικαίωμα:

Οπου Ρ+- ψευδοαναστροφή του πίνακα P.

Ο πίνακας F ονομάζεται θεμελιώδης πίνακας. Εκπροσωπεί γραμμικός τελεστής, που αντιστοιχεί σε κάθε σημείο m 1την αντίστοιχη επιπολική γραμμή του l 2. Για κάθε ζευγάρι των αντίστοιχων πόντων m 1Και m 2δικαίωμα

m T 2 Fm 1 =0

Αυτή είναι μια διατύπωση του επιπολικού περιορισμού μέσω της θεμελιώδους μήτρας.

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

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

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

Αφήνω P 1 =(I|0)Και P 2 =(R|-RT)- δύο πίνακες σχεδίασης με βαθμονόμηση K = I. Στη συνέχεια γράφονται οι εξισώσεις σχεδιασμού για το ιδανικό επίπεδο και των δύο καμερών με τη μορφή:

Ας βρούμε την επιπολική γραμμή στη δεύτερη όψη που αντιστοιχεί στο σημείο μ" 1στην πρώτη. Για να γίνει αυτό, αρκεί να προβάλετε στη δεύτερη όψη δύο σημεία που βρίσκονται στην ακτίνα (C 1 , m" 1)στη δεύτερη προβολή, για παράδειγμα στο κέντρο της πρώτης κάμερας (0,0,0,1) Τκαι ένα σημείο στο επίπεδο του απείρου (x" 1 ,y" 1 ,z" 1 ,0) Τ. Οι προβολές αυτών των σημείων θα είναι -RT, και R(x" 1,y" 1,z" 1,0) T. Εξίσωση Επιπολικής Γραμμής l 2, η διέλευση και από τα δύο αυτά σημεία δίνεται ως διανυσματικό γινόμενο:

l 2 =RT×R(x" 1 ,y" 1 ,z" 1) T =R(T×(x" 1 ,y" 1 ,z" 1) T)

Σε μορφή μήτρας, ένα διάνυσμα δεν είναι γινόμενο T×(x" 1 ,y" 1 ,z" 1) Τμπορεί να γραφτεί χρησιμοποιώντας τον πίνακα S:

Τότε ο επιπολικός περιορισμός σε σημεία στο ιδανικό επίπεδο γράφεται ως:

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

Γεωμετρικές ιδιότητες τριών ή περισσότερων εικόνων

Αφήνω Γ 1,Γ 2Και Γ 3- τα κέντρα τριών όψεων της ίδιας τρισδιάστατης σκηνής. Σε αυτή την περίπτωση, επιπολικοί περιορισμοί επιβάλλονται στα αντίστοιχα σημεία οποιουδήποτε ζεύγους ειδών. Αν είναι γνωστές οι προβολές δύο σημείων m 1Και m 2στην πρώτη και τη δεύτερη όψη, τότε η θέση της προβολής στην τρίτη εικόνα μπορεί να βρεθεί ως η τομή δύο επιπολικών όψεων που αντιστοιχούν στα σημεία m 1Και m 2.

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

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

Η μηχανή δεν κινεί το πλοίο. Το πλοίο παραμένει στη θέση του και η μηχανή κινεί το σύμπαν σε σχέση με αυτό.

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

Ομογενείς συντεταγμένες

Μέχρι τώρα, αντιμετωπίζαμε τις τρισδιάστατες κορυφές ως τριπλέτες (x, y, z). Ας εισάγουμε μια άλλη παράμετρο w και ας λειτουργήσουμε με διανύσματα της μορφής (x, y, z, w).

Να θυμάστε για πάντα ότι:

  • Αν w == 1, τότε το διάνυσμα (x, y, z, 1) είναι μια θέση στο χώρο.
  • Αν w == 0, τότε το διάνυσμα (x, y, z, 0) είναι η κατεύθυνση.

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

Οι ομοιογενείς συντεταγμένες μας επιτρέπουν, χρησιμοποιώντας μία μαθηματικός τύποςλειτουργούν με διανύσματα και στις δύο περιπτώσεις.

Πίνακες μετασχηματισμού

Εισαγωγή στις μήτρες

Ο ευκολότερος τρόπος να φανταστεί κανείς έναν πίνακα είναι ως ένας πίνακας αριθμών, με αυστηρά ένα ορισμένο ποσόσειρές και στήλες. Για παράδειγμα, ένας πίνακας 2x3 μοιάζει με αυτό:

Ωστόσο, σε 3D γραφικάΘα χρησιμοποιήσουμε μόνο πίνακες 4x4 που θα μας επιτρέψουν να μετασχηματίσουμε τις κορυφές μας (x, y, z, w). Η μετασχηματισμένη κορυφή είναι το αποτέλεσμα του πολλαπλασιασμού του πίνακα με την ίδια την κορυφή:

Matrix x Vertex (με αυτή τη σειρά!!) = Μετασχηματισμός. κορυφή

Αρκετά απλό. Θα το χρησιμοποιούμε αρκετά συχνά, επομένως είναι λογικό να το κάνει ο υπολογιστής:

Σε C++, χρησιμοποιώντας GLM:

glm::mat4 myMatrix; glm::vec4 myVector;

glm::

// Προσοχή στην παραγγελία! Είναι σημαντικός! Στο GLSL: mat4 myMatrix ; vec4 myVector ;

// Μην ξεχάσετε να γεμίσετε τον πίνακα και το διάνυσμα με τις απαραίτητες τιμές εδώ

vec4 transformedVector = myMatrix * myVector ;

// Ναι, μοιάζει πολύ με το GLM :)

Δοκιμάστε να πειραματιστείτε με αυτά τα αποσπάσματα.

Μήτρα μεταφοράς

Ο πίνακας μεταφοράς μοιάζει με αυτό:

όπου X, Y, Z είναι οι τιμές που θέλουμε να προσθέσουμε στο διάνυσμά μας.

Έτσι, αν θέλουμε να μετακινήσουμε το διάνυσμα (10, 10, 10, 1) κατά 10 μονάδες προς την κατεύθυνση Χ, παίρνουμε:

... παίρνουμε (20, 10, 10, 1) ένα ομοιογενές διάνυσμα! Θυμηθείτε ότι το 1 στην παράμετρο w σημαίνει θέση, όχι κατεύθυνση, και ο μετασχηματισμός μας δεν άλλαξε το γεγονός ότι εργαζόμαστε με τη θέση.

Τώρα ας δούμε τι συμβαίνει αν το διάνυσμα (0, 0, -1, 0) αντιπροσωπεύει μια κατεύθυνση:

... και παίρνουμε το αρχικό μας διάνυσμα (0, 0, -1, 0). Όπως αναφέρθηκε προηγουμένως, ένα διάνυσμα με παράμετρο w = 0 δεν μπορεί να μεταφερθεί. Τώρα είναι η ώρα να το βάλετε σε κώδικα. Σε C++, με GLM:

glm::

#συμπεριλαμβάνω

// μετά

glm::mat4 myMatrix = glm::translate(glm::mat4(), glm::vec3(10,0 f, 0,0 f, 0,0 f));

glm::vec4 myVector(10,0 f, 10,0 f, 10,0 f, 0,0 f);

glm::vec4 transformedVector = myMatrix * myVector ;

vec4 transformedVector = myMatrix * myVector ;

Στην πραγματικότητα, δεν θα το κάνετε ποτέ σε shader, τις περισσότερες φορές θα κάνετε glm::translate() σε C++ για να υπολογίσετε τον πίνακα, να τον μεταφέρετε στο GLSL και στη συνέχεια να εκτελέσετε τον πολλαπλασιασμό στο shader

Πίνακας ταυτότητας

Αυτός είναι ένας ειδικός πίνακας που δεν κάνει τίποτα, αλλά τον αγγίζουμε γιατί είναι σημαντικό να θυμόμαστε ότι A επί 1.0 ισούται με Α:

Σε C++: glm::mat4 myIdentityMatrix = glm::mat4(1.0 f);Πίνακας κλιμάκωσης Φαίνεται εξίσου απλό:πίνακες κλίμακας με συντελεστή κλίμακας ίσο με 1 σε όλους τους άξονες. Επίσης, ο πίνακας ταυτότητας είναι μια ειδική περίπτωση του πίνακα μεταφοράς, όπου (X, Y, Z) = (0, 0, 0), αντίστοιχα.

glm::vec4 transformedVector = myMatrix * myVector ;

// προσθήκη #include και #περιλαμβάνουν glm::mat4 myScalingMatrix = glm::scale(2,0 f, 2,0 f, 2,0 f);

Πίνακας περιστροφής

Πιο περίπλοκα από αυτά που συζητήθηκαν προηγουμένως. Θα παραλείψουμε τις λεπτομέρειες εδώ, καθώς δεν χρειάζεται να το γνωρίζετε σίγουρα. καθημερινή χρήση. Για να πάρετε περισσότερα λεπτομερείς πληροφορίεςμπορείτε να ακολουθήσετε τον σύνδεσμο Matrices and Quaternions FAQ (πολύ δημοφιλής πόρος και η γλώσσα σας μπορεί να είναι διαθέσιμη εκεί)

glm::vec4 transformedVector = myMatrix * myVector ;

// προσθήκη #include και #περιλαμβάνουν glm::vec3 myRotationAxis(??, ??, ??);

glm::rotate(angle_in_degrees, myRotationAxis);

Συνδυάζοντας μετασχηματισμούς

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

TransformedVector = TranslationMatrix * RotationMatrix * ScaleMatrix * OriginalVector ;

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

  • Φροντίστε να θυμάστε με ποια σειρά γίνονται όλα αυτά, γιατί η σειρά είναι πολύ σημαντική, μετά από όλα, μπορείτε να το ελέγξετε μόνοι σας:
  • Κάντε ένα βήμα μπροστά και στρίψτε αριστερά

Στρίψτε αριστερά και κάντε ένα βήμα μπροστά

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

Τώρα ας δούμε τι συμβαίνει αν το διάνυσμα (0, 0, -1, 0) αντιπροσωπεύει μια κατεύθυνση:

glm::mat4 myModelMatrix = myTranslationMatrix * myRotationMatrix * myScaleMatrix ;

glm::

glm::vec4 myTransformedVector = myModelMatrix * myOriginalVector ;

mat4 transform = mat2 * mat1 ;

vec4 out_vec = μετασχηματισμός * in_vec ;

Πίνακες κόσμου, προβολής και προβολής Για το υπόλοιπο αυτού του σεμιναρίου, θα υποθέσουμε ότι ξέρουμε πώς να αποδώσουμε το αγαπημένο τρισδιάστατο μοντέλο του Blender, τη Suzanne the Monkey.Οι μήτρες κόσμου, προβολής και προβολής είναι

εύχρηστο εργαλείο

για να διαχωρίσουν μετασχηματισμούς.

Παγκόσμια μήτρα

Αυτό το μοντέλο, όπως και το κόκκινο τρίγωνό μας, ορίζεται από ένα σύνολο κορυφών, οι συντεταγμένες των οποίων δίνονται σε σχέση με το κέντρο του αντικειμένου, δηλαδή η κορυφή με τις συντεταγμένες (0, 0, 0) θα βρίσκεται στο κέντρο του αντικείμενο. Στη συνέχεια θα θέλαμε να μετακινήσουμε το μοντέλο μας καθώς ο παίκτης το ελέγχει χρησιμοποιώντας το πληκτρολόγιο και το ποντίκι. Το μόνο που κάνουμε είναι να εφαρμόσουμε κλιμάκωση, μετά να περιστρέψουμε και να μεταφράσουμε. Αυτές οι ενέργειες εκτελούνται για κάθε κορυφή, σε κάθε πλαίσιο (εκτελούνται σε GLSL, όχι σε C++!) και έτσι το μοντέλο μας μετακινείται στην οθόνη.

Τώρα οι κορυφές μας στον παγκόσμιο χώρο. Αυτό φαίνεται από το μαύρο βέλος στο σχήμα.

Έχουμε μετακινηθεί από το χώρο αντικειμένων (όλες οι κορυφές ορίζονται σε σχέση με το κέντρο του αντικειμένου) στον παγκόσμιο χώρο (όλες οι κορυφές ορίζονται σε σχέση με το κέντρο του κόσμου).

Αυτό φαίνεται σχηματικά ως εξής:

Προβολή μήτρας

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

, αλλά είναι απίστευτα εύκολο

γραφικά υπολογιστή και #περιλαμβάνουν Έτσι, αρχικά η κάμερά σας βρίσκεται στο κέντρο του παγκόσμιου συστήματος συντεταγμένων. Για να μετακινήσετε τον κόσμο πρέπει να εισαγάγετε έναν άλλο πίνακα. Ας υποθέσουμε ότι θέλετε να μετακινήσετε την κάμερα 3 μονάδες προς τα ΔΕΞΙΑ (+X), που ισοδυναμεί με τη μετακίνηση ολόκληρου του κόσμου κατά 3 μονάδες προς τα ΑΡΙΣΤΕΡΑ (-X). Στον κώδικα μοιάζει με αυτό:

// Προσθήκη #include

glm::mat4 ViewMatrix = glm::translate(glm::mat4(), glm::vec3(-3,0 f, 0,0 f, 0,0 f));

glm::mat4 CameraMatrix = glm::LookAt(cameraPosition, // Θέση κάμερας στον παγκόσμιο χώρο cameraTarget // Υποδεικνύει πού κοιτάζετε στον παγκόσμιο χώροεπάνωΔιάνυσμα // Ένα διάνυσμα που δείχνει την ανοδική κατεύθυνση. Συνήθως (0, 1, 0));

Και εδώ είναι ένα διάγραμμα που δείχνει τι κάνουμε:

Ωστόσο, αυτό δεν είναι το τέλος.

Πίνακας προβολής

Τώρα λοιπόν βρισκόμαστε στο χώρο της κάμερας. Αυτό σημαίνει ότι μια κορυφή που λαμβάνει τις συντεταγμένες x == 0 και y == 0 θα εμφανιστεί στο κέντρο της οθόνης. Ωστόσο, κατά την προβολή ενός αντικειμένου, η απόσταση από την κάμερα (z) παίζει επίσης τεράστιο ρόλο. Για δύο κορυφές με τα ίδια x και y, η κορυφή με μεγαλύτερη τιμή z θα εμφανίζεται πιο κοντά από την άλλη.

Αυτό ονομάζεται προοπτική προβολή:

Και ευτυχώς για εμάς, ένας πίνακας 4x4 μπορεί να κάνει αυτή την προβολή:

// Δημιουργεί μια πραγματικά δυσανάγνωστη μήτρα, αλλά εξακολουθεί να είναι μια τυπική μήτρα 4x4 glm::mat4 projectionMatrix = glm::προοπτική (glm::radians (FoV), // Κατακόρυφο οπτικό πεδίο σε ακτίνια. Συνήθως μεταξύ 90° (πολύ πλάτος) και 30° (στενό) 4,0 f/3,0 f, // Λόγος διαστάσεων. Εξαρτάται από το μέγεθος του παραθύρου σας. Σημειώστε ότι 4/3 == 800/600 == 1280/960 0,1 στ // Κοντά στο επίπεδο αποκοπής. Πρέπει να είναι μεγαλύτερο από 0. 100,0 στ // Μακρινό αεροπλάνο.);

Έχουμε μετακινηθεί από το Camera Space (όλες οι κορυφές ορίζονται σε σχέση με την κάμερα) στο Homogeneous Space (όλες οι κορυφές βρίσκονται σε έναν μικρό κύβο. Όλα όσα βρίσκονται μέσα στον κύβο εμφανίζονται στην οθόνη).

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

Η χρήση της μήτρας προβολής δίνει το ακόλουθο αποτέλεσμα:

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

Έτσι θα μοιάζει:

Η εικόνα είναι τετράγωνη, επομένως εφαρμόζονται οι παρακάτω μαθηματικοί μετασχηματισμοί για να τεντωθεί η εικόνα σύμφωνα με τρέχοντα μεγέθηπαράθυρα:

Και αυτή η εικόνα είναι αυτό που θα βγει στην πραγματικότητα.

Συνδυασμός μετασχηματισμών: Πίνακας ModelViewProjection

... Μόνο οι τυπικοί μετασχηματισμοί μήτρας που ήδη αγαπάτε!

// C++ : υπολογισμός μήτρας glm::mat4 MVPmatrix = προβολή * προβολή * μοντέλο ; // Θυμηθείτε! Με αντίστροφη σειρά!

// GLSL: Εφαρμογή Matrix transformed_vertex = MVP * in_vertex ;

Βάζοντάς τα όλα μαζί

  • Το πρώτο βήμα είναι η δημιουργία του πίνακα MVP μας. Αυτό πρέπει να γίνει για κάθε μοντέλο που εμφανίζετε.

// Throw matrix: 45° οπτικό πεδίο, αναλογία διαστάσεων 4:3, εύρος: 0,1 μονάδα<->100 μονάδες glm::mat4 Προβολή = glm::προοπτική(glm::radians(45,0 f), 4,0 f / 3,0 f, 0,1 f, 100,0 f); // Ή, για την ορθοκάμερα glm::mat4 Προβολή = glm::lookAt(glm::vec3(4, 3, 3), // Η κάμερα είναι σε συντεταγμένες του κόσμου (4,3,3) glm::vec3(0, 0, 0), // Και κατευθύνεται στην καταγωγή glm::vec3(0, 1, 0) // Το "Head" βρίσκεται στην κορυφή); // Πίνακας μοντέλου: μήτρα ταυτότητας (Το μοντέλο βρίσκεται στην αρχή) glm::mat4 Μοντέλο = glm::mat4(1,0 f); // Μεμονωμένα για κάθε μοντέλο // Ο τελικός πίνακας ModelViewProjection, ο οποίος είναι το αποτέλεσμα του πολλαπλασιασμού των τριών πινάκων μας glm::mat4 MVP = Προβολή * Προβολή * Μοντέλο ; // Θυμηθείτε ότι ο πολλαπλασιασμός του πίνακα γίνεται με αντίστροφη σειρά

  • Το δεύτερο βήμα είναι να περάσετε αυτό στο GLSL:

// Πάρτε τη λαβή της μεταβλητής στο shader // Μόνο μία φορά κατά την προετοιμασία. GLuint MatrixID = glGetUniformLocation(αναγνωριστικό προγράμματος, "MVP"); // Περάστε τους μετασχηματισμούς μας στον τρέχοντα shader // Αυτό γίνεται στον κύριο βρόχο, καθώς κάθε μοντέλο θα έχει διαφορετικό πίνακα MVP (τουλάχιστον μέρος M) glUniformMatrix4fv(MatrixID, 1, GL_FALSE, &MVP[0][0]);

  • Το τρίτο βήμα είναι να χρησιμοποιήσουμε τα δεδομένα που λαμβάνονται στο GLSL για να μετατρέψουμε τις κορυφές μας.

// Δεδομένα εισαγωγής Vertex, διαφορετικά για όλες τις εκτελέσεις αυτού του shader.διάταξη (τοποθεσία = 0 ) στο vec3 vertexPosition_modelspace ; // Τιμές που παραμένουν σταθερές για ολόκληρο το πλέγμα.ομοιόμορφο mat4 MVP ; void main ()(// Θέση εξόδου της κορυφής μας: MVP * θέση

  • gl_Position = MVP * vec4(vertexPosition_modelspace, 1);

)

Ετοιμος! Τώρα έχουμε το ίδιο τρίγωνο όπως στο Μάθημα 2, που βρίσκεται ακόμα στην αρχή (0, 0, 0), αλλά τώρα το βλέπουμε σε προοπτική από το σημείο (4, 3, 3).

  • Στο Μάθημα 6, θα μάθετε πώς να αλλάζετε αυτές τις τιμές δυναμικά χρησιμοποιώντας το πληκτρολόγιο και το ποντίκι σας για να δημιουργήσετε την κάμερα που έχετε συνηθίσει να βλέπετε στα παιχνίδια. Αλλά πρώτα, θα μάθουμε πώς να δίνουμε στα μοντέλα μας χρώματα (Μάθημα 4) και υφές (Μάθημα 5).
  • αποστολές
  • Τροποποιήστε το ModelMatrix για να μετακινήσετε, να περιστρέψετε και να κλιμακώσετε το τρίγωνο
  • Χρησιμοποιήστε την προηγούμενη εργασία, αλλά με διαφορετική σειρά λειτουργιών. Δώστε προσοχή στο αποτέλεσμα.

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

Πίνακας 3.3.Μήτρες σχεδιαστικών μετασχηματισμών και προβολής

Ορθογραφική προβολή σε XOY

Ορθογραφική προβολή σε YOZ

Ορθογραφική προβολή σε XOZ

Ορθογραφική προβολή στο επίπεδο x=p

Τριμετρικός πίνακας μετασχηματισμού στο επίπεδο XOY

Ισομετρικός πίνακας μετασχηματισμού στο επίπεδο XOY

Ισομετρική μήτρα προβολής στο επίπεδο XOY

Πλάγια μήτρα προβολής σε XOY

Δωρεάν μήτρα προβολής στο XOY

Πίνακας προβολής ντουλαπιού σε XOY

Πίνακας μετασχηματισμού προοπτικής με ένα σημείο φυγής (το επίπεδο της εικόνας είναι κάθετο στον άξονα x)

Πίνακας μετασχηματισμού προοπτικής με ένα σημείο φυγής (το επίπεδο της εικόνας είναι κάθετο στον άξονα y)

Πίνακας μετασχηματισμού προοπτικής με ένα σημείο φυγής (το επίπεδο της εικόνας είναι κάθετο στον άξονα εφαρμογής)

Πίνακας μετασχηματισμού προοπτικής με δύο σημεία εξαφάνισης (το επίπεδο της εικόνας είναι παράλληλο στον άξονα y)

Πίνακας μετασχηματισμού προοπτικής με τρία σημεία εξαφάνισης (εικόνα επίπεδο αυθαίρετης θέσης)

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

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

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

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

Οι προοπτικές προβολές (Πίνακας 3.3) αντιπροσωπεύονται επίσης από μετασχηματισμούς προοπτικής και προοπτικές προβολές στο επίπεδο XOY. Τα V X, V Y και V Z είναι κέντρα προβολής - σημεία στους αντίστοιχους άξονες. –V X, -V Y, -V Z θα είναι τα σημεία στα οποία συγκλίνουν δέσμες ευθειών παράλληλων προς τους αντίστοιχους άξονες.

Το σύστημα συντεταγμένων του παρατηρητή είναι αριστεράσύστημα συντεταγμένων (Εικ. 3.3), στο οποίο ο άξονας z e κατευθύνεται από την οπτική γωνία προς τα εμπρός, ο άξονας x e κατευθύνεται προς τα δεξιά και ο άξονας y e κατευθύνεται προς τα πάνω. Αυτός ο κανόνας υιοθετείται για να διασφαλιστεί ότι οι άξονες x e και y e συμπίπτουν με τους άξονες x s και y s στην οθόνη. Ο προσδιορισμός των τιμών των συντεταγμένων της οθόνης x s και y s για το σημείο P οδηγεί στην ανάγκη διαίρεσης με τη συντεταγμένη z e. Για την κατασκευή μιας ακριβούς προοπτικής εικόνας, είναι απαραίτητο να διαιρεθεί με τη συντεταγμένη βάθους κάθε σημείου.

Ο Πίνακας 3.4 δείχνει τις τιμές του περιγραφέα κορυφής S(X,Y,Z) του μοντέλου (Εικ. 2.1) που υποβάλλεται σε μετασχηματισμούς περιστροφής και ισομετρικό μετασχηματισμό.

Πίνακας 3.4. Περιγραφείς κορυφής μοντέλου

Πρωτότυπο μοντέλο

M(R(z,90))xM(R(y,90))

Υπάρχουν καθορισμένες έννοιες στα γραφικά υπολογιστών διαφορετικούς πίνακες. Αυτοί είναι ο World Matrix, ο View Matrix και ο Projection Matrix. Χρησιμοποιώντας αυτούς τους πίνακες στο πηγαίος κώδικαςΤο πρόγραμμα εκτελεί μετασχηματισμούς μήτρας σε μοντέλα. Οι μετασχηματισμοί μήτρας υποδηλώνουν τον πολλαπλασιασμό κάθε κορυφής ενός αντικειμένου με έναν από τους πίνακες, ή μάλλον τον διαδοχικό πολλαπλασιασμό όλων των κορυφών ενός αντικειμένου με κάθε έναν από τους τρεις πίνακες. Αυτή η προσέγγιση σάς επιτρέπει να αναπαραστήσετε σωστά το μοντέλο στον τρισδιάστατο χώρο της δισδιάστατης οθόνης σας. Η τεχνική διέλευσης του μοντέλου μέσα από τους τρεις πίνακες που παρατίθενται αντιπροσωπεύει την ουσία του μηχανισμού εργασίας με γραφικά δεδομένα στο τρισδιάστατο επίπεδο της οθόνης.

Παγκόσμια μήτρα

World matrix – σας επιτρέπει να εκτελέσετε διάφορους μετασχηματισμούς μήτρας (μετασχηματισμός και κλιμάκωση) ενός αντικειμένου στο σύστημα συντεταγμένων του κόσμου. Παγκόσμιο σύστημαοι συντεταγμένες είναι δικές του τοπικό σύστημασυντεταγμένες αυτού του αντικειμένου, το οποίο είναι προικισμένο με κάθε αντικείμενο που, ας πούμε, έχει περάσει από τον παγκόσμιο πίνακα, αφού κάθε κορυφή συμμετέχει στο γινόμενο αυτού του πίνακα.

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

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


Παγκόσμια μήτρα

όπου cos είναι η γωνία περιστροφής σε ακτίνια.

Η περιστροφή μιας κορυφής γύρω από τον άξονα Y μοιάζει με αυτό:


Περιστροφή κορυφής γύρω από τον άξονα Υ

Και η περιστροφή γύρω από τον άξονα Z συμβαίνει σύμφωνα με τον ακόλουθο τύπο:


περιστροφή γύρω από τον άξονα Ζ

Η μετάφραση κορυφής σάς επιτρέπει να μετακινήσετε αυτήν ακριβώς την κορυφή με συντεταγμένες x, y, z σε νέο σημείομε νέες συντεταγμένες x1, y1, z1. Στη μαθηματική σημειογραφία μοιάζει με αυτό:

X1 = x + Tx y1 = y + Ty z1 = z + Tz

Η μετάφραση μιας κορυφής σε σημειογραφία μήτρας μοιάζει με αυτό:


Μετάφραση κορυφής σε σημειογραφία πίνακα

όπου Tx, Ty και Tz είναι οι τιμές μετατόπισης κατά μήκος των αξόνων X, Y και Z.

Μπορείτε να κλιμακώσετε μια κορυφή στο διάστημα (αφαίρεση ή μεγέθυνση) με συντεταγμένες x, y, z σε ένα νέο σημείο με νέες τιμές x1, y1, z1 χρησιμοποιώντας τον ακόλουθο συμβολισμό:

X1 = x * S y1 = y * S z1 = z * S

Στη σημειογραφία μήτρας αυτό εκφράζεται ως εξής:


Κλίμακα Vertex

όπου Sx, Sy, Sz είναι οι τιμές των συντελεστών τάνυσης ή συμπίεσης κατά μήκος των αξόνων X, Y, Z.

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

Προβολή Matrix

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

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

Μήτρα προβολής

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


Μήτρα προβολής

Προοπτική προβολή

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

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

Η συνήθης προοπτική προβολή είναι μια κεντρική προβολή σε ένα επίπεδο με ευθείες ακτίνες που διέρχονται από ένα σημείο - το κέντρο της προβολής. Μία από τις προεξέχουσες ακτίνες είναι κάθετη στο επίπεδο προβολής και ονομάζεται κύρια. Το σημείο τομής αυτής της ακτίνας και του επιπέδου προβολής είναι το κύριο σημείο της εικόνας.

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

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

Σε αυτόν τον πίνακα τα στοιχεία ένα, ρε, μιείναι υπεύθυνοι για την κλιμάκωση, m, n, μεγάλο- για μετατόπιση, σελ, q, r- για προβολή, μικρό- για ολοκληρωμένη κλιμάκωση, Χ- για περιστροφή.

Προβολή ενός σημείου στο επίπεδο z = 0

Η ουσία αυτής της προβολής είναι η εξής: όσο πιο βαθύ είναι το αντικείμενο, τόσο μεγαλύτερη γίνεται η τιμή της συντεταγμένης z και του παρονομαστή rz + 1 και, επομένως, όσο μικρότερο εμφανίζεται το αντικείμενο στο επίπεδο προβολής. Ας κάνουμε απλούς υπολογισμούς και ας τους εξηγήσουμε γραφικά:
η εξίσωση x"/F = x/(F + z inc) είναι ισοδύναμη με: x" = xF/(F + z inc) = x/(1 + z inc/F) = x/(1 + rz inc) , όπου r = 1/F, F - εστίαση.

Για σημεία που βρίσκονται σε ευθεία παράλληλη προς τον άξονα z, δεν χάνονται το ένα μετά το άλλο, χρησιμοποιείται προβολή ενός σημείου σε μια γραμμή (βλ. πίνακα μετασχηματισμού και ρύζι. 4.2) η συντεταγμένη z έχει εξαφανιστεί, αλλά επειδή τα μακρινά αντικείμενα έχουν γίνει μικρότερα από εξίσου κοντινά, ο θεατής έχει μια αίσθηση βάθους. Θυμηθείτε: αυτός είναι ο πρώτος τρόπος για να μεταφέρετε βάθος σε ένα αεροπλάνο!



Συνιστούμε να διαβάσετε

Κορυφή