WirkungStellen Sie zunächst die erforderlichen Komponenten vor importiere './build/three.js'; importiere './libs/js/controls/OrbitControls.js' importiere { FontLoader } aus './libs/jsm/loaders/FontLoader.js'; importiere { TextGeometry } aus './libs/jsm/geometries/TextGeometry.js'; Dann ist es notwendig, die Szene, den Renderer, die Kamera und den Controller zu initialisieren var Renderer, Szene, Kamera, Steuerungen // Initialisiere die Szenenfunktion initScene() { Szene = neue DREI.Szene(); //Raucheffekt zur Szene hinzufügen// Parameter: Rauchfarbe, Rauchreichweite nah, Rauchreichweite fern Szene.Nebel = neu DREI.Nebel(0x000000, 0, 3000) // Achsen zur Szene hinzufügen var axes = new THREE.AxesHelper(100) Szene.add(Achsen) } // Initialisiere die Renderer-Funktion initRenderer() { // Ob Antialias aktiviert ist renderer = new THREE.WebGLRenderer({ antialias: true }) renderer.setSize(Fenster.innereBreite, Fenster.innereHöhe) renderer.setClearColor(0xeeeeee) Dokument.body.appendChild(renderer.domElement); } // Initialisiere die Kamerafunktion initCamera() { Kamera = neue DREI.Perspektivkamera(45, Fenster.innereBreite / Fenster.innereHöhe, 0,1, 1000) Kameraposition.x = 50 Kameraposition.y = 50 Kameraposition.z = 50 } // Initialisiere die Controller-Funktion initControls() { Steuerungen = neue THREE.OrbitControls(Kamera, Renderer.domElement) controls.enableZoom = false; //Ob Zoom aktiviert werden soll; controls.minPolarAngle = Math.PI / 2.5; //Begrenzung des minimalen Drehwinkels in vertikaler Richtung auf 0 Grad auf der positiven y-Achse controls.maxPolarAngle = Math.PI / 2.5; //Begrenzung des maximalen Drehwinkels in vertikaler Richtung auf 0 Grad auf der positiven y-Achse} Initialisieren der Lichtquelle // Initialisiere die Lichtquellenfunktion initLight() { // Weißes Licht, Lichtstärke 1 var Punktlicht = neues DREI.Punktlicht(0xffffff, 1); PunktLicht.Position.Setzen(0, 100, 100); Szene.Hinzufügen(PunktLicht); var Punktlicht = neues DREI.Punktlicht(0xffffff, 1); PunktLicht.Position.Setzen(0, 100, -100); Szene.Hinzufügen(PunktLicht); } Beginnen Sie mit der TexterstellungErstellen Sie zuerst den Font Loadervar loader = neuer FontLoader(); Schriftbibliothek ladenNach dem erfolgreichen Laden der Schriftbibliotheksressource wird die Schriftbibliothek an die Rückruffunktion übergeben loader.load (Quelle, Rückruf) Die Ressourcen der Schriftbibliothek können die gewünschte TTF-Schriftdatei über typeface.json auswählen, in eine JSON-Datei konvertieren und dann die Schriftgeometrie in der Rückruffunktion erstellen. loader.load('./fonts/FZKaTong-M19S_Regular.json', Funktion (Antwort) { //Hier Text erstellen}) Erstellen von Textgeometrie// Textpuffergeometrie erstellen var textGeometry = new TextGeometry('TextGeometry', { // Schriftart Schriftart: Antwort, // Schriftgröße: 15, // Schriftstärke Höhe: 1, // Die Anzahl der Punkte auf der Textkurve. Je höher die Zahl, desto glatter die Schriftkurve. curveSegments: 12, // Ob die Abschrägung (sanfter Übergang von Kanten und Ecken) eingeschaltet werden soll bevelEnabled: false, // Die Tiefe der Abschrägung des Textes bevelThickness: 0,1, // Der Erweiterungsabstand zwischen der Abschrägung und der ursprünglichen Textkontur (Abschrägungsgröße) Abschrägungsgröße: 0,1, // Anzahl der Abschrägungssegmente bevelSegments: 3 }) //Textmaterial //Material-Array verwenden var textMaterial = [ // Das erste Element ändert die Vorder- und Rückseite des Textes new THREE.MeshPhongMaterial( { color: 0x00ff00, flatShading: true } ), // Vorderseite // Das zweite Element ändert die Textseite (oben und unten) neues THREE.MeshPhongMaterial( { Farbe: 0x0000ff, flatShading: true } ) // Seite // Phong Mesh-Material kann glänzende Oberflächen mit spiegelnden Glanzlichtern simulieren (wie beispielsweise lackiertes Holz) ] // Text erstellen var text = new THREE.Mesh(textGeometry, textMaterial) Berechnen Sie das Begrenzungsrechteck der Textgeometrie Wir können uns vorstellen, dass der geometrische Körper in einem unsichtbaren rechteckigen Würfelcontainer gespeichert ist und die Standardposition dieses Containers der Ursprung ist und sich nach außen entlang der positiven Richtung der x- und z-Achse erstreckt, sodass sich unser Text nicht in der Mitte des Sichtfelds befindet. // computeBoundingBox() berechnet das äußere Begrenzungsrechteck der aktuellen Geometrie textGeometry.computeBoundingBox(); // console.log(textGeometry.boundingBox); Überprüfen Sie die Scheitelpunktposition des äußeren Begrenzungsrechtecks // Verschieben Sie die Textposition um die halbe Textlänge nach links var centerOffset = -0,5*(textGeometry.boundingBox.max.x-textGeometry.boundingBox.min.x) text.position.x = Mittenversatz text.position.z = 0 Szene.Hinzufügen(Text); Gespiegelten Text erstellen//Erstelle einen Textspiegel var mirror = new THREE.Mesh(textGeometry, textMaterial) // Um 180 Grad drehen mirror.rotation.x = Math.PI Spiegelposition.x = Mittelpunktsversatz Spiegelposition y = -8 Szene.Hinzufügen(Spiegel) Erstellen einer halbtransparenten Ebene//Erstelle einen Textspiegel var mirror = new THREE.Mesh(textGeometry, textMaterial) // Um 180 Grad drehen mirror.rotation.x = Math.PI Spiegelposition.x = Mittelpunktsversatz Spiegelposition y = -8 Szene.Hinzufügen(Spiegel) RendernFunktion rendern() { renderer.render(Szene, Kamera); AnfrageAnimationFrame(rendern) } Funktion start() { initRenderer() : InitScene(); initCamera(); initControls() initLight() initText() machen() } Start() Informationen zu TextkonstruktorparameternWenn CurveSegments niedriger eingestellt ist, können Sie sehen, dass der Text nicht so glatt ist// Die Anzahl der Punkte auf der Textkurve. Je höher der Punkt, desto glatter die Kurve. Kurvensegmente: 1, Wenn die Abschrägung eingeschaltet ist, können Sie beobachten, dass die Kanten der Schrift abgerundet und nicht mehr scharf werden.// Ob die Abschrägung (sanfter Übergang von Kanten und Ecken) eingeschaltet werden soll bevelEnabled: wahr, Einstellen der Abschrägungsparameter// Die Tiefe der Abschrägung des Textes bevelThickness: 0,1, // Der Erweiterungsabstand zwischen der Abschrägung und der ursprünglichen Textkontur (Abschrägungsgröße) Abschrägungsgröße: .1, // Anzahl der Abschrägungssegmente bevelSegments: 3 Vollständiger Code<Skripttyp="Modul"> importiere './build/three.js'; importiere './libs/js/controls/OrbitControls.js' importiere { FontLoader } aus './libs/jsm/loaders/FontLoader.js'; importiere { TextGeometry } aus './libs/jsm/geometries/TextGeometry.js'; var Renderer, Szene, Kamera, Steuerungen // Initialisiere die Renderer-Funktion initRenderer() { // Ob Antialias aktiviert ist renderer = new THREE.WebGLRenderer({ antialias: true }) renderer.setSize(Fenster.innereBreite, Fenster.innereHöhe) renderer.setClearColor(0xeeeeee) Dokument.body.appendChild(renderer.domElement); } // Initialisiere die Szenenfunktion initScene() { Szene = neue DREI.Szene(); //Raucheffekt zur Szene hinzufügen// Parameter: Rauchfarbe, Rauchreichweite nah, Rauchreichweite fern Szene.Nebel = neu DREI.Nebel(0x000000, 0, 3000) // Achsen zur Szene hinzufügen var axes = new THREE.AxesHelper(100) Szene.add(Achsen) } // Initialisiere die Kamerafunktion initCamera() { Kamera = neue DREI.Perspektivkamera(45, Fenster.innereBreite / Fenster.innereHöhe, 0,1, 1000) Kameraposition.x = 50 Kameraposition.y = 50 Kameraposition.z = 50 } // Initialisiere die Controller-Funktion initControls() { Steuerungen = neue THREE.OrbitControls(Kamera, Renderer.domElement) } // Initialisiere die Lichtquellenfunktion initLight() { var Punktlicht = neues DREI.Punktlicht(0xffffff, 1); PunktLicht.Position.Setzen(0, 100, 100); Szene.Hinzufügen(PunktLicht); var Punktlicht = neues DREI.Punktlicht(0xffffff, 1); PunktLicht.Position.Setzen(0, 100, -100); Szene.Hinzufügen(PunktLicht); } Funktion initText() { var loader = neuer FontLoader(); loader.load('./fonts/FZKaTong-M19S_Regular.json', Funktion (Antwort) { // Textgeometrie erstellen var textGeometry = new TextGeometry('Textgeometrie ändern', { Schriftart: Antwort, // Schriftgröße: 15, // Schriftstärke Höhe: 4, // Die Anzahl der Punkte auf der Textkurve. Je höher der Punkt, desto glatter die Kurve. Kurvensegmente: 12, // Ob die Abschrägung (sanfter Übergang von Kanten und Ecken) eingeschaltet werden soll bevelEnabled: wahr, // Die Tiefe der Abschrägung des Textes bevelThickness: 0,1, // Der Erweiterungsabstand zwischen der Abschrägung und der ursprünglichen Textkontur (Abschrägungsgröße) Abschrägungsgröße: .1, // Anzahl der Abschrägungssegmente bevelSegments: 3 }) //Textmaterial //Material-Array verwenden var textMaterial = [ // Das erste Element ändert die Vorder- und Rückseite des Textes new THREE.MeshPhongMaterial( { color: 0x00ff00, flatShading: true } ), // Vorderseite // Das zweite Element ändert die Textseite (oben und unten) neues THREE.MeshPhongMaterial( { Farbe: 0x0000ff, flatShading: true } ) // Seite // Phong-Mesh-Material kann glänzende Oberflächen mit spiegelnden Glanzlichtern simulieren (wie beispielsweise lackiertes Holz) ] var text = neues THREE.Mesh(Textgeometrie, Textmaterial) // computeBoundingBox() berechnet das Begrenzungsrechteck der aktuellen Geometrie textGeometry.computeBoundingBox(); // console.log(textGeometry.boundingBox); var centerOffset = -0,5*(textGeometry.boundingBox.max.x-textGeometry.boundingBox.min.x) text.position.x = Mittenversatz text.position.z = 0 Szene.Hinzufügen(Text); //Erstelle einen Textspiegel var mirror = new THREE.Mesh(textGeometry, textMaterial) Spiegel.Rotation.x = Math.PI Spiegelposition.x = Mittelpunktsversatz Spiegelposition y = -8 Szene.Hinzufügen(Spiegel) // Eine halbtransparente Ebene erstellen var plane = new THREE.Mesh(new THREE.PlaneBufferGeometry(200,200),new THREE.MeshBasicMaterial({color:0xffffff,opacity:.5,transparent:true})) Ebene.Rotation.x = -Math.PI / 2 Ebene.Position.y = -3 Szene.Hinzufügen(Flugzeug) }) } Funktion rendern() { renderer.render(Szene, Kamera); AnfrageAnimationFrame(rendern) } Funktion start() { initRenderer() : InitScene(); initCamera(); initControls() initLight() initText() machen() } Start() </Skript> ZusammenfassenDieser Artikel endet hier. Ich hoffe, er kann Ihnen helfen. Ich hoffe auch, dass Sie mehr Inhalten auf 123WORDPRESS.COM mehr Aufmerksamkeit schenken können! Das könnte Sie auch interessieren:
|
<<: So stellen Sie mit Node-Red eine Verbindung zur MySQL-Datenbank her
>>: Beispielcode zum Mischen von Float und Margin in CSS
Eine ausgereifte Datenbankarchitektur ist nicht v...
1. Kompatibilität Wie unten dargestellt: Die Komp...
Vorwort Vor ein paar Tagen bin ich zufällig auf d...
Vorwort: Bei der Projektentwicklung werden in ein...
Import: Aufgrund der Projektanforderungen werden ...
Dies liegt daran, dass der Datenbankserver so ein...
Umsetzungsprinzip Die Hauptgrafik besteht aus zwe...
Dieser Artikel erläutert anhand von Beispielen di...
Kapitel 1 <br />Das wichtigste Prinzip, um ...
Wenn ein Unternehmen seine Benutzerbasis vergröße...
1. Ändern Sie die Firewall-Konfigurationsdatei # ...
1. Indexierungsprinzip Indizes werden verwendet, ...
Definition und Verwendung Mithilfe von @media-Abf...
Im vorherigen Artikel haben wir vorgestellt, wie ...
1. Erster Download von der offiziellen Website vo...