Προγραμματισμός

Τρισδιάστατα γραφικά υπολογιστών: Μοντελοποιήστε τον κόσμο σας

Εξερευνήστε τον κόσμο σας

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

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

Ρίξτε μια ματιά στην εικόνα στο σχήμα 1. Δείχνει έναν κύβο που κάθεται σε ένα κατά τα άλλα άδειο δωμάτιο. (Λοιπόν εντάξει, το δωμάτιο έχει και μια πόρτα, αλλά αυτό υπάρχει μόνο για να κάνει το δωμάτιο να μοιάζει περισσότερο με ένα δωμάτιο.)

Εικόνα 1: Ένα δωμάτιο με κύβο

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

Η πρώτη γωνία είναι ένα πόδι (ή μετρητής, αν προτιμάτε) πάνω από το πάτωμα και δυόμισι πόδια (ή μέτρα) από τον τοίχο πίσω μου. Η δεύτερη γωνία είναι επίσης ένα πόδι πάνω από το πάτωμα και ένα πόδι από τον τοίχο στα αριστερά μου.

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

Σχήμα 2: Η προέλευση και ο άξονας συντεταγμένων

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

Φανταστείτε ότι σε κάθε άκρη που σχηματίζεται από τη διασταύρωση ενός τοίχου και ενός τοίχου, ή ενός τοίχου και του δαπέδου, έχει ένα όνομα - θα τα ονομάσουμε άξονας x, ο άξονας y, και το άξονας z, όπως φαίνεται στο Σχήμα 2. Και ας συμφωνήσουμε επίσης εκ των προτέρων ότι θα καθορίσουμε τη θέση μιας γωνίας ακολουθώντας αυτήν τη συνταγή:

  • Πρώτα, μετρήστε πόσο μακριά πρέπει να ταξιδέψουμε από την αρχή σε ευθεία γραμμή παράλληλη προς τον άξονα x
  • Στη συνέχεια, μετρήστε πόσο μακριά πρέπει να διανύσουμε από αυτό το σημείο σε ευθεία γραμμή παράλληλη προς τον άξονα y
  • Τέλος, μετρήστε πόσο μακριά πρέπει να διανύσουμε από αυτό το σημείο σε ευθεία γραμμή παράλληλη προς τον άξονα z

Το σχήμα 3 δείχνει το μονοπάτι που θα ακολουθούσαμε για να φτάσουμε σε μία από τις γωνίες του κύβου.

Σχήμα 3: Εύρεση του μονοπατιού σας

Ως συντομογραφία, ας γράψουμε όλες αυτές τις αποστάσεις ως:

  • Η απόσταση από την αρχή παράλληλη προς τον άξονα x
  • Η απόσταση από την αρχή παράλληλη προς τον άξονα y
  • Η απόσταση από την αρχή παράλληλη προς τον άξονα z

ή (ακόμη μικρότερο):

(απόσταση x, απόσταση y, απόσταση z) 

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

(3 πόδια, 1 πόδι, 2 πόδια)

ή

(3 πόδια, 1 πόδι, 3 πόδια)

ή

(4 πόδια, 1 πόδι, 2 πόδια)

και ούτω καθεξής.

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

Να πάρει λίγο νευρικός

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

Όλα τα άκρα έχουν ένα πολύ ωραίο χαρακτηριστικό - ξεκινούν πάντα και τελειώνουν στις γωνίες. Έτσι, αν γνωρίζουμε πού είναι όλες οι άκρες, σίγουρα θα ξέρουμε πού βρίσκονται όλες οι γωνίες.

Τώρα θα κάνουμε μια μεγάλη υπόθεση απλοποίησης. Στο μοντέλο του κόσμου, πρόκειται να αποκλείσουμε τις καμπύλες άκρες (θα μάθετε γιατί αργότερα). Οι άκρες πρέπει πάντα να είναι ευθείες. Για να προσεγγίσουμε τις καμπύλες άκρες, θα τοποθετήσουμε ευθείες άκρες από άκρο σε άκρο, όπως στο Σχήμα 4.

Σχήμα 4: Η προσέγγιση ευθείας γραμμής μιας καμπύλης

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

Οπτικοποίηση: Δεν είναι πλέον μόνο για χαλάρωση

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

Σκεφτείτε την οθόνη του υπολογιστή ως παράθυρο στον εικονικό μας κόσμο. Καθίζουμε στη μία πλευρά του παραθύρου και ο εικονικός κόσμος κάθεται στην άλλη. Το σχήμα 5 απεικονίζει αυτήν την έννοια.

Εικόνα 5: Το παράθυρο μας στον εικονικό κόσμο

Υπάρχουν πολλοί τρόποι για να βάλετε τις πληροφορίες στο μοντέλο στο παράθυρο (ή στην οθόνη του υπολογιστή). Πιθανώς το πιο απλό είναι αυτό που ονομάζεται ισομετρική προβολή.

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

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

Νομίζω ότι ένα παράδειγμα μπορεί να είναι σωστό. Θα δημιουργήσω τρία απλά μοντέλα του ίδιου σχήματος σε διαφορετικούς προσανατολισμούς.

Ο Πίνακας 1 περιέχει τα δεδομένα που περιγράφουν ένα απλό σχήμα στην πρώτη του θέση. Κάθε σειρά στον πίνακα αντιστοιχεί σε ένα άκρο. Ο πίνακας δίνει τις συντεταγμένες των σημείων έναρξης και λήξης του άκρου. Ας υποθέσουμε ότι βλέπουμε το σχήμα από έξω κατά μήκος του άξονα z.

ΤμήμαΝα αρχίσειΤέλος
ΧγζΧγζ
ΕΝΑ250-702535-35
σι2535-352500
ντο250025-35-35
ρε25-35-35250-70
μι250-70-250-70
φά-250-70-2535-35
σολ-2535-35-2500
Η-2500-25-35-35
Εγώ-25-35-35-250-70
Πίνακας 1: Δεδομένα για απλό σχήμα - πρώτη θέση

Η μικροεφαρμογή στο Σχήμα 6 δείχνει τι θα δούμε.

Χρειάζεστε ένα πρόγραμμα περιήγησης με δυνατότητα Java για να δείτε αυτό το applet.Σχήμα 6: Ένα απλό σχήμα - πρώτη θέση

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

ΤμήμαΝα αρχίσειΤέλος
ΧγζΧγζ
ΕΝΑ450-583435-25
σι3435-252307
ντο230734-35-25
ρε34-35-25450-58
μι450-58-20-74
φά-20-74-1235-41
σολ-1235-41-230-7
Η-230-7-12-35-41
Εγώ-12-35-41-20-74
Πίνακας 2: Δεδομένα για απλό σχήμα - δεύτερη θέση

Η μικροεφαρμογή στο Σχήμα 7 δείχνει τι θα δούμε.

Χρειάζεστε ένα πρόγραμμα περιήγησης με δυνατότητα Java για να δείτε αυτό το applet.Σχήμα 7: Ένα απλό σχήμα - δεύτερη θέση

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

ΤμήμαΝα αρχίσειΤέλος
ΧγζΧγζ
ΕΝΑ45-26-523419-38
σι3419-382336
ντο233634-42-6
ρε34-42-645-26-52
μι45-26-52-2-33-66
φά-2-33-66-1212-52
σολ-1212-52-23-3-6
Η-23-3-6-12-49-20
Εγώ-12-49-20-2-33-66
Πίνακας 3: Δεδομένα για απλό σχήμα - τρίτη θέση

Η μικροεφαρμογή στο Σχήμα 8 δείχνει τι θα δούμε.

Χρειάζεστε ένα πρόγραμμα περιήγησης με δυνατότητα Java για να δείτε αυτό το applet.Σχήμα 8: Ένα απλό σχήμα - τρίτη θέση

Τυλίγοντας

Μέχρι τώρα έχετε καταλήξει στο συμπέρασμα ότι η αλλαγή του προσανατολισμού ενός αντικειμένου με το χέρι δεν είναι πολύ διασκεδαστική. Και το αποτέλεσμα δεν είναι πολύ διαδραστικό. Τον επόμενο μήνα θα σας δείξω πώς να χειρίζεστε αντικείμενα αλληλεπιδραστικά (και θα κάνουμε τον υπολογιστή να κάνει όλο τον αριθμό να σβήνει - τελικά, δεν είναι αυτός ο τύπος εργασίας που υποτίθεται ότι είναι καλοί οι υπολογιστές;). Θα ρίξουμε επίσης μια ματιά στο πρόβλημα της προοπτικής - συγκεκριμένα, θα σας δείξω πώς να το ενσωματώσετε στις απόψεις του μοντέλου μας.

Ο Todd Sundsted γράφει προγράμματα από τότε που οι υπολογιστές έγιναν διαθέσιμοι σε μοντέλα επιτραπέζιων υπολογιστών. Αν και αρχικά ενδιαφερόταν να δημιουργήσει κατανεμημένες εφαρμογές αντικειμένων στο C ++, ο Todd μετακόμισε στη γλώσσα προγραμματισμού Java όταν η Java έγινε η προφανής επιλογή για κάτι τέτοιο. Ο Todd είναι συν-συγγραφέας του Java Language API SuperBible, τώρα σε βιβλιοπωλεία παντού. Εκτός από το γράψιμο, ο Todd είναι πρόεδρος της Etcee, παρέχοντας εκπαίδευση, καθοδήγηση και συμβουλευτική με γνώμονα την Java.

Μάθετε περισσότερα σχετικά με αυτό το θέμα

  • Για λίγο ό, τι σχετίζεται με τα γραφικά 3D, δείτε:

    //www.3dsite.com/3dsite/

  • Το Yahoo παρέχει έναν βολικό τρόπο για να ξεκινήσετε την αναζήτησή σας για θέματα γραφικών 3D

    //www.yahoo.com/Computers_and_Internet/Graphics/3D/

  • Μπορείτε να πραγματοποιήσετε λήψη αυτού του άρθρου, του πηγαίου κώδικα και των αρχείων τάξης ως αρχείο tar που έχει αποσυμπιεστεί:

    /javaworld/jw-05-1997/howto/jw-05-howto.tar.gz

  • Προηγούμενα άρθρα How-To Java
  • "Όταν οι στατικές εικόνες απλά δεν κάνουν το κόψιμο" - Μάθετε πώς να φτιάχνετε τις εφαρμογές και τις εφαρμογές σας

    με κινούμενες εικόνες.

  • "Πώς χρησιμοποιεί η Java το μοντέλο παραγωγού / καταναλωτή για το χειρισμό εικόνων - Ένα βλέμμα ενός εσωτερικού" - Μάθετε περισσότερα για την ισχυρή τεχνική χειρισμού εικόνας της Java και, στη συνέχεια, ακολουθήστε τις απλές μου διαδικασίες για τη δημιουργία των δικών σας κατασκευαστών και καταναλωτικών στοιχείων.
  • "Μάθετε πώς οι μικροεφαρμογές φορτώνουν εικόνες που βασίζονται σε δίκτυο ασύγχρονα" - Ακολουθεί μια προσεκτική ματιά στον τρόπο με τον οποίο οι μικροεφαρμογές Java χειρίζονται εικόνες σε περιβάλλον που βασίζεται σε δίκτυο.
  • "Η σχεδίαση κειμένου είναι εύκολη με τρεις κλάσεις Java" - Μάθετε πώς να δημιουργείτε κείμενο που είναι οπτικά ελκυστικό μέσω αυτής της εξήγησης για το ποιες κλάσεις θα χρησιμοποιηθούν και πώς λειτουργούν μαζί.
  • "Εξέταση του HotSpot, ενός αντικειμενοστρεφούς προγράμματος σχεδίασης" - Μάθετε πώς τα κομμάτια της γλώσσας Java και της βιβλιοθήκης τάξης ταιριάζουν μαζί μέσω μιας μελέτης αυτής της Java. πρόγραμμα
  • "Χρήση της κατηγορίας γραφικών" - Μια προσεκτική ματιά στην κατηγορία γραφικών και τα πρωτόγονα σχεδίασης που παρέχει και μια επίδειξη της χρήσης της.
  • "Παρατηρητής και παρατηρήσιμος" - Εισαγωγή στη διεπαφή Observer και στην κλάση παρατηρήσιμων χρησιμοποιώντας την αρχιτεκτονική Model / View / Controller ως οδηγό.
  • "Η αποτελεσματική διεπαφή χρήστη" - Εισαγωγή στη διεπαφή Observer και στην κατηγορία Παρατηρήσιμη χρησιμοποιώντας την αρχιτεκτονική Model / View / Controller ως οδηγό.
  • "Java και χειρισμός συμβάντων" - Πώς μεταδίδονται τα συμβάντα σε στοιχεία διεπαφής χρήστη, πώς να δημιουργείτε χειριστές συμβάντων και άλλα.
  • "Εισαγωγή στο AWT" - Μια περιγραφή της εργαλειοθήκης διεπαφής χρήστη της Java.

Αυτή η ιστορία, "Τρισδιάστατα γραφικά υπολογιστών: Μοντελοποιήστε τον κόσμο σας" δημοσιεύθηκε αρχικά από την JavaWorld.

$config[zx-auto] not found$config[zx-overlay] not found