Δημιουργία διαδραστικών τρισδιάστατων οπτικών με 3,Js
Sep 16, 2025
πως να
Αυτό το σεμινάριο WebGL καταδεικνύει τον τρόπο δημιουργίας μιας περιβαλλοντικής προσομοίωσης 3D που δείχνει τι συμβαίνει στον κόσμο ως επίπεδα CO2 αλλάζουν. (Μπορείτε να δείτε περισσότερα
Πειράματα webgl
εδώ.)
Ο χρήστης ελέγχει τα επίπεδα χρησιμοποιώντας ένα ρυθμιστικό εύρους εισόδου HTML. Καθώς ο χρήστης προσθέτει περισσότερο CO2, το περισσότερος χώρος θα εμφανιστεί στη σκηνή, τα επίπεδα νερού θα αυξηθούν καθώς η αύξηση της θερμοκρασίας λιώνει περισσότερα πικάντικα καπάκια πάγου, τότε τα δέντρα θα εξαφανιστούν καθώς βυθίζονται στο νερό.
Τα στοιχεία είναι κινούμενα μέσα και έξω χρησιμοποιώντας μια βιβλιοθήκη Tween και σύροντας το ρυθμιστικό προς την αντίθετη κατεύθυνση θα αντιστρέψει τα αποτελέσματα. Αν μόνο ήταν τόσο εύκολη στην πραγματική ζωή!
01. Στοιχεία εμφάνισης
Η βασική διάταξη της σελίδας εμφανίζεται εδώ πριν προστεθεί η σκηνή 3D. Η εικόνα είναι ένα διαφανές PNG στην κορυφή της οθόνης και υπάρχει ένα ρυθμιστικό εύρος στο κάτω μέρος
Για να ξεκινήσετε το έργο, ανοίξτε το φάκελο "Έναρξη" στον κωδικό σας IDE. Ανοίγω
index.html
Και θα δείτε ότι υπάρχει μια βασική σκαλωσιά σελίδας εκεί με κάποιο κώδικα ήδη. Στο τμήμα σώματος, προσθέστε τα στοιχεία της οθόνης εδώ που θα χρησιμοποιηθούν ως διεπαφή με το περιεχόμενο 3D.
& lt; div id = "header" & gt;
& lt; img src = "img / co2.png" id = "badge" & gt;
& lt; / div & gt;
& lt; div id = "inner" & gt;
& lt; κλάση εισόδου = "slide" type = "εύρος" min = "0" max = "7" βήμα = "1" τιμή = "0" oninput = "showval (this.value)" & gt;
& lt; p & gt; σύρετε το ρυθμιστικό για να αλλάξετε το επίπεδο του CO2 & LT; / P & GT;
& lt; / div & gt;
02. Σύνδεση των βιβλιοθηκών
Το περιεχόμενο 3D εμφανίζεται μέσω τριών.Js, το οποίο περιλαμβάνεται εδώ. Ένα μοντέλο Collada θα προστεθεί στη σκηνή αργότερα. Περιλαμβάνεται η πρόσθετη βιβλιοθήκη που θα φορτωθεί αυτό, μαζί με μια βασική βιβλιοθήκη Tween. Οι επόμενες γραμμές συνδέονται με τα αποτελέσματα μετά τη μεταποίηση που θα προσθέσουν το φινίρισμα.
Αφού η σκηνή έχει καταστήσει κάθε πλαίσιο, θα προστεθούν ορισμένες επιδράσεις μετά τη διαδικασία. Αυτές είναι οι βιβλιοθήκες που ενδυναμεύουν το αποτέλεσμα των κόκκων της ταινίας, μια θολούρα μετατόπισης κλίσης στο επάνω και το κάτω μέρος της οθόνης, τότε τελικά ένα βινιέτα για να ξεθωριάζει στα άκρα της οθόνης.
04. Προσθήκη των μεταβλητών
Ορισμένοι από τον κώδικα έχουν ολοκληρωθεί για εσάς. Θα δείτε ένα σχόλιο όπου θα προσθέσετε τον υπόλοιπο κώδικα του εκπαιδευτικού. Μία σειρά μεταβλητών χρησιμοποιούνται σε αυτή την 3D σκηνή, η οποία φροντίζει την ανάλυση οθόνης, διάφορα μοντέλα 3D και επεξεργασία μετά την επεξεργασία. Δύο σημαντικές μεταβλητές είναι οι
υδατοφράκτης
για το ύψος του νερού και το
δεκές
, που θυμάται την τελευταία θέση του ρυθμιστή.
Η λειτουργία Init είναι ένα μεγάλο μέρος του κώδικα, η διασφάλιση της σκηνής έχει ρυθμιστεί με τη σωστή ματιά στην αρχή. Ένα δοχείο προστίθεται στη σελίδα και αυτό είναι όπου θα εμφανιστεί η τρισδιάστατη σκηνή. Προστίθεται μια κάμερα και κάποια ομίχλη φόντου να ξεθωριάζει την απόσταση.
Λειτουργία Init () {
VAR Container = Document.Createelement ('Div');
document.Body.AppendChild (δοχείο);
Camera = New Three.PerspectiveCamera (75, screen_width / screen_height, 1, 10000);
Camera.position.Set (2000, 100, 0).
σκηνή = νέα τρία.Scene ();
scene.Fog = Νέο τρία.FogEXP2 (0xB6D9E6, 0.0025).
renderer = new three.webglrenderer ({
antialias: αλήθεια
}) ·
06. Ρύθμιση του renerder
Ο refererer λαμβάνει ένα χρώμα φόντου και η ανάλυση έχει ρυθμιστεί στο ίδιο μέγεθος με την αναλογία εικονοστοιχείων της οθόνης. Οι σκιές είναι ενεργοποιημένες στη σκηνή και τοποθετείται στη σελίδα στο στοιχείο του δοχείου. Προστίθεται ένα φως ημισφαιρίου, το οποίο έχει ένα ουρανό και το έδαφος.
Οι μεταβλητές που θα ελέγξουν τις επιδράσεις της μετατόπισης της Shader Post θα δοθούν εδώ. Αυτές οι μεταβλητές θα χρησιμοποιηθούν αργότερα για να προσθέσουν τιμές που θα ελέγξουν την εμφάνιση. Εάν κοιτάξετε τη λειτουργία Params, θα δείτε αυτό που έχει ήδη ολοκληρωθεί για εσάς.
renderpass = νέος τριών.RenderPass (σκηνή, κάμερα);
HBLUR = Νέο τρία.Shaderpass (τρεις.Horizontaltiltshiftshader).
vblur = νέα τρία.Shaderpass (Three.ΤισθήματοςTricaltiltshiftshader).
Filmpass = Νέο τρία.Shaderpass (Three.Filmshader);
effectvignette = νέα τρία .Shaderpass (τριών.Vignethesheshesh);
COPYPASS = ΝΕΑ ΤΡΙΑ.SHADERPASS (τριών.Copyshader);
08. Σύνθεση των αποτελεσμάτων
Τα αποτελέσματα πρέπει να στοιβάζονται σε κάτι που ονομάζεται συνθέτης εφέ. Αυτό διαρκεί κάθε αποτέλεσμα και εφαρμόζει το στυλ σε αυτό. Στη συνέχεια, εμφανίζεται όλοι ως τελική σκηνή στην οθόνη, την οποία θα δείτε πότε προστίθεται η λειτουργία απόδοσης αργότερα.
09. Φόρτωση της εικόνας του νέφους
Η λειτουργία Params () καλείται στο βήμα 9, το οποίο ρυθμίζει τις παραμέτρους για την ανοδική επεξεργασία βινιέτα και εφέ κινηματογράφου
ο
παραμέτρους
Η λειτουργία καλείται και αυτό ορίζει τις μεμονωμένες παραμέτρους για τις μεταχειρισμένες επιδράσεις. Δημιουργείται μια νέα ομάδα και αυτό θα κατέχει όλο το περιεχόμενο σκηνής μέσα σε αυτό, για να διευκολύνει την περιστροφή της ομάδας αντικειμένων. Μια διαφανή εικόνα PNG φορτώνεται ως ένα υλικό σύννεφο που θα χρησιμοποιηθεί ως sprite μέσα στη σκηνή.
Παράμετροι ();
Ομάδα = Νέες τρεις.Group ();
scene.add (ομάδα);
var cloud = textureLoader.load ("img / cloud.png");
Υλικό = νέα τρία.
Χάρτης: Σύννεφο, αδιαφάνεια: 0.6, Χρώμα: 0x888888, Ομίχλη: TRUE
}) ·
10. Διπλό για βρόχο
Οκτώ ομάδες δημιουργούνται μέσα στο πρώτο
Για
βρόχος. Αυτές οι οκτώ ομάδες όλοι παίρνουν 35 σύννεφα που τους προστέθηκαν στο δεύτερο για βρόχο. Κάθε σύννεφο τοποθετείται σε τυχαία θέση πάνω από τη σκηνή. Οι ομάδες θα είναι ενεργοποιημένες και απενεργοποιημένες με το ρυθμιστικό από τον χρήστη για να δείξει το Smog να προστεθεί και να αφαιρεθεί στην απεικόνιση.
για (J = 0, J & LT, 8, J ++) {
var g = νέος τριών.Group ();
για (i = 0, i & lt, 35; i ++) {
var x = 400 * math.random () - 200;
var y = 60 * math.random () + 60;
var z = 400 * math.random () - 200;
sprite = νέα τρία.
sprite.position.Set (x, y, z);
11. Κλίμακα του σύννεφου
Η πρώτη ομάδα σύννεφων μπορεί να δει στη σκηνή. Οι άλλοι είναι κρυμμένοι και θα είναι ορατοί όταν ελέγχονται από το ρυθμιστικό από τον χρήστη
Το σύννεφο κλιμακώνεται σε μέγεθος που επιτρέπει να είναι ορατό στη σκηνή. Κάθε ομάδα σύννεφων μετά την πρώτη ομάδα κλιμακώνεται έτσι ώστε να είναι ουσιαστικά αόρατα στον αναστροφέα. Αυτός είναι ο τρόπος με τον οποίο θα γίνει ορατό αργότερα με την κλιμάκωση τους πίσω στο πλήρες μέγεθος τους, καθώς αυτό θα δώσει ένα καλό αποτέλεσμα διασκεδάζοντας.
12. Φόρτωση του μοντέλου
Τώρα ο φορτωτής Collada έχει ρυθμιστεί να φορτώσει το
scene.dae
μοντέλο. Όταν τελειώνει τη φόρτωση, το μοντέλο σαρώθηκε και οποιοδήποτε αντικείμενο που συμβαίνει να είναι ένα πλέγμα γίνεται για να ρίξει σκιές και να λαμβάνει σκιές για να δώσει κάποιο επιπλέον βάθος στη σκηνή.
VAR φορτωτής = νέο τρία.colladaloader ();
φορτωτές.Προστάσματα.Convertupaxis = TRUE;
Loader.Lload ('scene.dae', λειτουργία (Collada) {
var dae = collada.scene;
dae.Traverse (λειτουργία (παιδί) {
αν (παράδειγμα παιδιών.
child.Castshadow = TRUE;
child.receiveshadow = TRUE;
}
}) ·
13. Εύρεση συγκεκριμένων στη σκηνή
Καθώς το μοντέλο είναι έτοιμο για εμφάνιση, ρυθμίζεται στο σωστό μέγεθος για να ταιριάζει στη σκηνή. Ο κώδικας πρέπει να ελέγχει συγκεκριμένα το ύψος του νερού, έτσι ώστε το μοντέλο νερού να βρίσκεται στη σκηνή και να μεταβιβάζεται στην παγκόσμια μεταβλητή. Ομοίως, το κύριο φως πρέπει να βρεθεί έτσι ώστε να μπορεί να οριστεί σε σκιές έργων.
Το μοντέλο έχει προστεθεί με το κύριο φως που έχει εκπέμπει τις σκιές στη σκηνή. Υπάρχει κάτι ουσιαστικό να κοιτάξουμε στη σκηνή, έτσι ώστε το αποτέλεσμα θολώματος μετατόπισης κλίσης να φαίνεται στο μπροστινό και πίσω μέρος της σκηνής
Τώρα, όπως το προσκήνιο βρίσκεται τα χαρακτηριστικά που το κάνουν να χυθούν σκιές στη σκηνή. Η εξασθένιση του φωτός στις άκρες του σημείου είναι επίσης ορίζεται εδώ. Τέλος, καθώς το μοντέλο είναι το μεγαλύτερο στοιχείο για να φορτωθεί, η υπόλοιπη σκηνή θα ρυθμιστεί πριν από την εκτέλεση αυτού του κώδικα, επομένως η λειτουργία δημιουργίας μπορεί να ονομαστεί κάθε πλαίσιο.
Με τα συμβάντα του ποντικιού και των αγγελιών, η σκηνή γίνεται αντιδραστική στην κίνηση του ποντικιού, μεγέθυνση μέσα και έξω, ενώ είναι σε θέση να γυρίσει τη σκηνή προς τα πάνω και προς τα κάτω
Το τελικό μέρος της λειτουργίας Init θέτει διάφορες εισόδους ποντικιού και αφής που θα μετακινήσουν την κάμερα με βάση τη θέση τους. Μια εκδήλωση καταχωρείται επίσης για να ακούσει αν η οθόνη αλλάξει και αυτό θα ενημερώσει την απεικόνιση της οθόνης.
Η λειτουργία απόδοσης έχει οριστεί να καλείται τόσο κοντά σε 60 καρέ ανά δευτερόλεπτο καθώς το πρόγραμμα περιήγησης μπορεί να διαχειριστεί. Η ομάδα, η οποία περιέχει όλα τα μοντέλα, έχει ρυθμιστεί να περιστρέφεται από ένα μικρό ποσό κάθε καρέ. Η θέση της κάμερας ενημερώνεται από το ποντίκι ή την είσοδο αφής και συνεχίζει να κοιτάζει το κέντρο της σκηνής.
17. Ενημέρωση της οθόνης
Ο χρόνος Shader είναι μια μεταβλητή που μόλις ανεβαίνει κατά 0,1 κάθε πλαίσιο και αυτό μεταβιβάζεται στο
κινηματογραφική ταινία
έτσι ώστε ο θορυβώδης κόκκος ταινίας να μπορεί να ενημερωθεί. Ο συνθέτης εφέ ενημερώνεται και παρέχεται στην οθόνη. Τέλος, ο κινητήρας Tween ενημερώνεται επίσης.
Το ρυθμιστικό εύρους εισόδου, που προστέθηκε στο βήμα 1, καλεί το
προνομιούχος
λειτουργία, η οποία ορίζεται εδώ. Όταν ο χρήστης κάνει κλικ σε αυτό, ελέγχει απλώς ότι το ρυθμιστικό έχει μετακινηθεί. Εάν μετακινηθείτε στη συνέχεια, η επόμενη ομάδα σύννεφων κλιμακώνεται με ένα tween πάνω από 0,8 δευτερόλεπτα. Το ύψος νερού ενημερώνεται και αυτό είναι επίσης διασκεδαστικό μέχρι το νέο ύψος.
Λειτουργία ShowVal (Val) {
Αν (Val! = LastVal) {
αν (val & gt; lastval) {
Νέο tween.Tween (Group.Children (Val] .cale) .To ({x: 1, y: 1, z: 1}, 800).
waterht + = 0,07;
Νέο Tween.Tween (Water.scale). Για ({y: waterht}, 800). atting (tween.equadratic.inout).
19. Πιάνοντας τα δέντρα
Η μεταβλητή θερμοκρασίας βρίσκει την τρέχουσα ομάδα δέντρων, θα πρέπει να εξαλείψει από τη σκηνή και εδώ ζυγίζει με ένα tween μόνο στον άξονα Υ. Χρησιμοποιείται μια ελαστική χαλάρωση έτσι ώστε αυτό να βγαίνει από την οπτική γωνία στην οθόνη για ένα ευχάριστο αποτέλεσμα. Όπως περισσότερο νερό και σύννεφα βρίσκονται στη σκηνή, τα δέντρα εξαφανίζονται.
20. Αντίθετες εισροές
Το πρώτο περιεχόμενο ελέγχεται εάν ο ρυθμιστής ήταν ολισθητήρας προς τα πάνω, ή προς τα δεξιά. Τώρα ο κώδικας ανιχνεύει τον χρήστη που ολισθαίνει προς τα αριστερά. Τα σύννεφα κλιμακώνονται με ένα tween και έτσι είναι η στάθμη του νερού για να δείξει ένα αποτέλεσμα ψύξης στη γη.
Νέο Tween.Tween (Group.Children [LastVal] .cale) .To ({x: 0.001, y: 0.001, z: 0.001}, 800). Αυτός (tween.equadratic.inout). )
waterht - = 0,07;
Νέο Tween.Tween (Water.scale). Για ({y: waterht}, 800). atting (tween.equadratic.inout).
21. Τελειώνοντας
Με όλα όσα εργάζονται, μπορείτε να δείτε την ομίχλη φόντου σαφώς καθώς μετακινείτε το ποντίκι έτσι ώστε η κάμερα να πάρει υψηλότερο πλεονέκτημα στη σκηνή
Το τελικό βήμα είναι να φέρετε τα δέντρα πίσω, έτσι ώστε να κλιμακώνονται πίσω στο αρχικό τους μέγεθος με ένα ελαστικό tween. Αποθηκεύστε τη σκηνή και προβάλετε την ιστοσελίδα από ένα διακομιστή είτε φιλοξενούνται τοπικά στον δικό σας υπολογιστή είτε σε ένα διακομιστή ιστού. Θα είστε σε θέση να αλληλεπιδράσετε με την κίνηση του ποντικιού και το ρυθμιστικό για να αλλάξετε την οθόνη σκηνής.