Πληροφορίες για τον μετασχηματισμό συντεταγμένων μοντέλων 3D
ουσία
Πρώτα απ' όλα
Μπορεί συχνά να βλέπετε εικόνες 3D σε οθόνες τηλεόρασης και οθόνες σε παιχνίδια, αλλά πώς εμφανίζετε αντικείμενα που υπάρχουν σε χώρο 3D, όπως χαρακτήρες και κτίρια που κινούνται στην οθόνη, σε μια οθόνη 2D;
Στα παιχνίδια 2D, υπάρχουν μόνο δισδιάστατα στοιχεία "X και Y" ως τιμές συντεταγμένων και η οθόνη είναι επίσης 2D, οπότε αν σχεδιάσετε ένα αντικείμενο καθορίζοντας τη θέση συντεταγμένων των X και Y, θα καταλάβετε διαισθητικά πώς θα σχεδιαστεί σε ποια θέση.
Ωστόσο, σε 3D, δεν είναι τόσο εύκολο. Όπως υποδηλώνει το όνομα, το 3D είναι "3 διάσταση" και έχει τρεις πληροφορίες συντεταγμένων: "X, Y και Z". Δεδομένου ότι οι συντεταγμένες είναι διαφορετικές από την οθόνη που είναι 2D, δεν είναι δυνατό να σχεδιάσετε το αντικείμενο όπως είναι.
Στη συνέχεια, αυτό που πρέπει να κάνετε είναι να "μετατρέψετε τρισδιάστατες πληροφορίες σε δισδιάστατες πληροφορίες". Αυτό συνήθως αναφέρεται ως "μετασχηματισμός συντεταγμένων". Λάβετε υπόψη ότι αυτός ο μετασχηματισμός συντεταγμένων είναι απαραίτητος για τον προγραμματισμό 3D.
Υπάρχουν διάφοροι τύποι μετασχηματισμών συντεταγμένων για τη μετατροπή 3D σε 2D, αλλά υπάρχουν τρεις κύριοι τύποι μετασχηματισμών συντεταγμένων που χειρίζονται οι προγραμματιστές: "παγκόσμιος μετασχηματισμός", "μετασχηματισμός προβολής" και "μετασχηματισμός προβολής". Εδώ, θα εξηγήσουμε όλα όσα σχετίζονται με τον συντονισμό του μετασχηματισμού.
Αριστερόχειρες και δεξιόχειρες συστήματα συντεταγμένων
Στο 3D, υπάρχουν δύο συστήματα συντεταγμένων, το "αριστερόχειρα σύστημα συντεταγμένων" και το "δεξί σύστημα συντεταγμένων", τα οποία έχουν διαφορετικούς προσανατολισμούς για κάθε συντεταγμένη όπως φαίνεται στο παρακάτω σχήμα.
Το Direct3D χρησιμοποίησε κυρίως ένα αριστερόχειρα σύστημα συντεταγμένων, αλλά υπάρχουν επίσης λειτουργίες για τον υπολογισμό για δεξιόχειρες συστήματα συντεταγμένων. Ωστόσο, το XNA παρέχει μόνο μεθόδους υπολογισμού για δεξιόχειρα συστήματα συντεταγμένων. Αυτό φαίνεται να συμβαδίζει με το γεγονός ότι άλλες εφαρμογές χρησιμοποιούν συχνά δεξιόχειρα συστήματα συντεταγμένων.
Όλες οι συμβουλές XNA σε αυτόν τον ιστότοπο χρησιμοποιούν το δεξιόχειρα σύστημα συντεταγμένων.
Τοπικό Σύστημα Συντεταγμένων (Model Coordinate System)
Κάθε μοντέλο έχει ένα σύστημα συντεταγμένων επικεντρωμένο στην προέλευση. Όταν δημιουργείτε ένα μοντέλο με λογισμικό μοντελοποίησης, νομίζω ότι είναι ευκολότερο να καταλάβετε αν φανταστείτε να το δημιουργείτε με την προέλευση ως κέντρο.
Παγκόσμιο Σύστημα Συντεταγμένων
Το παγκόσμιο σύστημα συντεταγμένων σάς επιτρέπει να τοποθετήσετε το μοντέλο οπουδήποτε. Αν δεν κάνετε τίποτα σε αυτόν τον μετασχηματισμό του κόσμου, το μοντέλο θα τοποθετηθεί στην αρχή με τον ίδιο τρόπο όπως οι τοπικές συντεταγμένες. Η τοποθέτηση δεν είναι μόνο να μετακινηθεί από την προέλευση, αλλά και να περιστραφεί και να κλιμακωθεί.
Προβολή συστήματος συντεταγμένων
Μόλις τοποθετήσετε το μοντέλο σε παγκόσμιες συντεταγμένες, χρειάζεστε πληροφορίες σχετικά με το πού κοιτάζετε και πού κοιτάτε τον 3D χώρο. Αυτό είναι που ονομάζουμε "μετασχηματισμοί προβολής". Οι μετασχηματισμοί προβολής γενικά συχνά αναπαρίστανται ως κάμερες.
Οι παράμετροι που απαιτούνται για αυτήν τη μετατροπή είναι "θέση κάμερας", "σημείο ενδιαφέροντος κάμερας" και "κατεύθυνση κάμερας προς τα πάνω". Ο προσανατολισμός της κάμερας καθορίζεται από αυτές τις τρεις παραμέτρους. Το παρακάτω σχήμα δείχνει την κάμερα από την οπτική γωνία τρίτου μέρους.
Το παρακάτω σχήμα φαίνεται στην πραγματικότητα από την άποψη της κάμερας με τη διάταξη που φαίνεται στο παραπάνω σχήμα (σε αυτό το σημείο, δεν έχουμε ακόμη μετατρέψει τις συντεταγμένες στην οθόνη, επομένως είναι απλώς μια εικόνα).
Στην προηγούμενη εξήγηση, φαίνεται ότι η κάμερα είναι τοποθετημένη και οι συντεταγμένες μετατρέπονται, αλλά στον πραγματικό υπολογισμό, οι παγκόσμιες συντεταγμένες μετατρέπονται ανάλογα με τη θέση και τον προσανατολισμό της κάμερας. Επομένως, η προέλευση είναι η θέση της κάμερας όπως φαίνεται στο παρακάτω σχήμα.
Προβολικό σύστημα συντεταγμένων
Μόλις αποφασίσετε από ποια θέση θα δείτε τον 3D χώρο, το επόμενο βήμα είναι να επεξεργαστείτε την εμφάνιση "μικρών αντικειμένων που βρίσκονται μακριά" και "μεγάλων αντικειμένων που βρίσκονται κοντά". Αυτό ονομάζεται προβολικός μετασχηματισμός. Υπάρχουν δύο μέθοδοι μετασχηματισμού προβολής, "προβολή προοπτικής" και "ορθογραφική προβολή", αλλά η συνήθως χρησιμοποιούμενη εικόνα "προβολής προοπτικής" έχει ως εξής.
Η προβολή προοπτικής χρησιμοποιεί τις ακόλουθες παραμέτρους: Γωνία θέασης, Λόγος διαστάσεων, Θέση μπροστινού κλιπ και Θέση πίσω κλιπ. Η περιοχή με την ένδειξη "frustum" στο παραπάνω σχήμα θα εμφανιστεί τελικά στην οθόνη.
Η "Γωνία θέασης" καθορίζει το εύρος θέασης που είναι ορατό από την κάμερα. Η μείωση της γωνίας μεγεθύνεται, αυξάνοντας τη σμίκρυνση. Η γωνία θέασης θα είναι η κατακόρυφη τιμή του φλοιού.
Ο λόγος διαστάσεων χρησιμοποιείται για τον προσδιορισμό της οριζόντιας γωνίας προβολής, ενώ η γωνία θέασης είναι κάθετη γωνία. Η οριζόντια γωνία καθορίζεται συνήθως από τη "γωνία θέασης × αναλογία διαστάσεων" και ο λόγος διαστάσεων είναι βασικά η τιμή του "πλάτους ÷ ύψους" της οθόνης που προσπαθείτε να εμφανίσετε. Εάν αλλάξετε αυτήν την τιμή, το εμφανιζόμενο αντικείμενο 3D θα εμφανιστεί για οριζόντια ή κατακόρυφη έκταση.
Οι επιλογές "Θέση μπροστινού κλιπ" και "Θέση πίσω κλιπ" καθορίζονται για να προσδιοριστεί εάν το αντικείμενο εμφανίζεται στο μπροστινό ή στο πίσω εύρος. Λόγω της φύσης του υπολογιστή, δεν είναι δυνατή η εμφάνιση μέχρι το άπειρο, οπότε θα θέσουμε ένα όριο. Αυτή η τιμή επηρεάζει επίσης την ακρίβεια του buffer Z, επομένως δεν συνιστάται να το συμπεριλάβετε στην περιοχή σχεδίασης πέρα από το εύρος που δεν χρειάζεται να εμφανίζεται.
Το αντικείμενο μετασχηματισμού προοπτικής μετατρέπεται σε χώρο όπως ο παρακάτω. Τα αντικείμενα που ήταν κοντά στην κάμερα μεγεθύνονται και τα αντικείμενα που ήταν μακριά μειώνονται προς τα κάτω.
Αυτό απεικονίζεται σε ένα εύκολα κατανοητό διάγραμμα παρακάτω.
Αν το κοιτάξετε πραγματικά από την οπτική γωνία της κάμερας, μοιάζει με παρακάτω.
Μια άλλη μέθοδος προβολικού μετασχηματισμού είναι η ορθογραφική προβολή, η οποία προβάλλει μια ορατή περιοχή όπως η παρακάτω. Επειδή το πλάτος και το ύψος είναι σταθερά ανεξάρτητα από το βάθος, το μέγεθος του αντικειμένου δεν αλλάζει με το βάθος.
Σύστημα συντεταγμένων οθόνης
Μετά τον μετασχηματισμό προβολής, μετατρέπεται στις συντεταγμένες της πραγματικής οθόνης. Παρόλο που πρόκειται για οθόνη, η θέση και το εύρος της οθόνης αλλάζουν ανάλογα με τις ρυθμίσεις οπτικής γωνίας που έχουν οριστεί στη συσκευή. Ωστόσο, στην περίπτωση των παιχνιδιών, οι συντεταγμένες του πελάτη του παραθύρου είναι συχνά η οπτική γωνία όπως είναι, οπότε δεν νομίζω ότι χρειάζεται να ανησυχείτε πάρα πολύ.
Οι συντεταγμένες της οθόνης (0, 0) μετατρέπονται από τις συντεταγμένες προβολής (-1, 1, z). Ομοίως, οι συντεταγμένες οθόνης (πλάτος, ύψος) μετατρέπονται από τις συντεταγμένες προβολής (1, -1 ,z).