Inhaltsverzeichnis
Wenn Sie möchten, dass Sie direkt in den Code einsteigen und ihn ausprobieren möchten, finden Sie es hier auf Github.
wir werden uns zunächst unseren Knoten -Servercode ansehen. Es wird unsere flache HTML angezeigt und auch als Socket.IO -Server fungiert, auf dem ein Datenstrom von Twitter ausgerichtet wird.
Twitter -Zugriff einrichten
Andere Server -Grundlagen
Abrufen unseres Live -Twitter -Streams
unser Front -End -Code
Einrichten von Socket.io
Vorbereitung unserer Türme
Unsere Init -Funktion
auf Tweets
Anmelden eines Turms
Um diese Demo lokal auszuführen, benötigen Sie den Knoten installiert und müssen die üblichen Befehle ausführen. Installieren Sie alle Abhängigkeiten für das Projekt:
Dies hätte Ihnen einen guten Überblick über die Verwendung von Knoten, Socket.io und drei.js geben sollen, um eine 3D -Web -API -fähige virtuelle Realitätsvisualisierung zu erstellen. Die Demo selbst könnte weiterentwickelt werden, wobei weitere Schlüsselwörter, Filter hinzugefügt werden, wodurch sie mit mehr Partikeln usw. usw. läuft. Es gibt viel Potenzial! Fühlen Sie sich frei, dort rauszukommen und zu versuchen, Ihre eigene fantastische Erfahrung aus dieser Demo zu machen!
häufig gestellte Fragen (FAQs) zur Visualisierung eines Twitter -Streams in VR mit drei.js und Knoten
Wie kann ich Twitter für Websites einrichten? Zunächst müssen Sie eine Twitter -Anwendung auf der Website des Twitter -Entwicklers erstellen. Nach dem Erstellen der Anwendung erhalten Sie eine Reihe von Schlüssel und Token. Diese werden verwendet, um Ihre Anwendung mit Twitter zu authentifizieren. Sie müssen dann die Twitter JavaScript -API auf Ihrer Website installieren. Mit dieser API können Ihre Website mit Twitter interagieren und Funktionen wie Tweet-Schaltflächen und eingebettete Tweets aktivieren. JavaScript -Bibliothek, mit der animierte 3D -Computergrafiken in einem Webbrowser erstellt und angezeigt werden. Es verwendet WebGL, um Grafiken zu rendern. Die Bibliothek bietet eine Reihe von Objekten und Methoden, die es einfacher machen, komplexe 3D -Szenen zu erstellen, einschließlich Kameras, Lichtern, Materialien und Geometrien.
Was sind die wichtigsten Unterschiede zwischen drei.js und anderen 3D-Grafikbibliotheken? Es wird viele der Komplexität der direkten Arbeit mit WebGL abstrahiert, was es einfacher macht, komplexe 3D -Szenen zu erstellen. Andere Bibliotheken bieten möglicherweise mehr Zugang zu WebGL auf niedrigem Niveau, erfordern jedoch ein tieferes Verständnis der 3D-Grafikprogrammierung. Twitter Stream, Fehler können aus verschiedenen Gründen auftreten, wie z. B. Netzwerkprobleme oder falsche Authentifizierungsanmeldeinformationen. Die Twitter -API enthält Fehlermeldungen, mit denen Sie diese Probleme diagnostizieren und beheben können. Es ist wichtig, diese Fehler in Ihrem Code zu behandeln, um sicherzustellen, dass Ihre Anwendung weiterhin reibungslos ausgeführt wird.
Wie kann ich meinem Twitter -Stream in VR? Stream in VR umfasst die Verwendung von Ereignishörern, um Benutzeraktionen wie Klicks oder Berührungen zu erkennen. Sie können dann die 3D -Szene als Antwort auf diese Aktionen aktualisieren. Sie können beispielsweise Benutzern ermöglichen, Tweets auszuwählen, indem Sie auf sie klicken oder mit Touch Gesten durch die Szene navigieren. Eine Drei.JS -Anwendung im Web umfasst die Verpackung Ihrer Anwendungsdateien und das Hochladen auf einen Webserver. Sie können Tools wie WebPack verwenden, um Ihre JavaScript -Dateien und Dienste wie Github -Seiten oder Netlify zu bündeln, um Ihre Anwendung zu hosten. Nach der Bereitstellung ist Ihre Anwendung für alle mit einem Webbrowser zugegriffen.
Heim Web-Frontend js-Tutorial Visualisieren eines Twitter -Streams in VR mit drei.js und Knoten

Visualisieren eines Twitter -Streams in VR mit drei.js und Knoten

Feb 19, 2025 pm 12:48 PM

Visualisieren eines Twitter -Streams in VR mit drei.js und Knoten

Twitter ist ein wunderbares und Information Rich Beast. Ich wollte einige der Visualisierungskräfte, drei.Js und seine VR -Funktionen mit Socket.io und Knoten kombinieren, um eine hübsche Welt von Partikeln zu erzeugen, die über einen Twitter -Stream erzeugt werden.

Ein zurück. Diese Demo verwendet die gleichen Grundlagen.

Die Demo, die wir erstellen werden, wird einen Live -Twitter -Stream für ein Keyword ansehen. Wenn man während der Beobachtung des Streams getwittert wird, wird ein „Turm“ glänzender Partikel angezeigt, die darstellen, wie lange der Tweet war. Insbesondere diese Demo wird nach Erwähnungen des Wortes „Pizza“ suchen. Warum Pizza fragst du? Ich suchte nach einem Begriff, der nicht so häufig als „Bieber“, sondern häufiger als „Boxcar Racing Hyänen“ erwähnt wurde. Kurz gesagt, die besten Begriffe sind diejenigen, die relativ häufig genug sind, dass sie auftreten, während Sie zuschauen, aber nicht so häufig, dass sie mit vielen Hundert pro Sekunde durchkommen. Pizza ist einer von ihnen.

Key Takeaways

    Verwenden Sie node.js und socket.io, um einen Echtzeitserver zu erstellen, der Twitter-Stream-Daten verarbeiten und ausgeben kann, wodurch die Interaktivität von VR-Visualisierungen verbessert wird.
  • Integrieren Sie drei.Js, um eine 3D -VR -Umgebung zu erstellen, in der Tweets als einzigartige Partikeltürme dargestellt werden, die je nach Tweetlänge variieren.
  • Optimieren Sie die Benutzererfahrung in VR, indem Sie eine maximale Partikelzahl einstellen und Partikeltürme innerhalb eines definierten Bereichs anstellen, um Leistungsverzögerungen zu verhindern.
  • Passen Sie die visuellen Aspekte von Tweet -Darstellungen an, indem Sie Benutzerprofilfarben für Partikel verwenden und Texturen und Mischoptionen verwenden.
  • Gewährleistung einer breiten Zugänglichkeit und Echtzeitfunktionalität, indem der Knotenserver auf Plattformen wie Heroku bereitgestellt und die VR-Erfahrung auf verschiedenen Geräten mithilfe von Tunnelingdiensten wie NGROK getestet wird.
  • Demo -Code

Wenn Sie möchten, dass Sie direkt in den Code einsteigen und ihn ausprobieren möchten, finden Sie es hier auf Github.

Möchten Sie es in Aktion versuchen? Ich habe hier eine laufende Version gehostet: VR Twitter World.

unser Servercode

wir werden uns zunächst unseren Knoten -Servercode ansehen. Es wird unsere flache HTML angezeigt und auch als Socket.IO -Server fungiert, auf dem ein Datenstrom von Twitter ausgerichtet wird.

Der vollständige Server ist relativ kurz und sieht so aus:

Unsere ersten Zeilen haben einen Server mit dem Knoten Express -Framework eingerichtet. Es ist eine ziemlich einfache Einrichtung, die alle unsere Abhängigkeiten anzieht und die App -Variable vorbereitet, damit wir auf unsere Serverfunktionen zugreifen können. Port wird eingerichtet, auf welchem ​​Port unser Server ausgeführt werden soll (Prozess.Env.Port ist eine Servervariable Einige Hosting -Setups wie Heroku haben definiert).
<span>var express = require('express'),
</span>    app <span>= express(),
</span>    server <span>= require('http').createServer(app),
</span>    port <span>= process.env.PORT || 80,
</span>    io <span>= require('socket.io')(server),
</span>    config <span>= require('./config.json'),
</span>    <span>Twitter = require('node-tweet-stream'),
</span>    t <span>= new Twitter(config);
</span>
app<span>.get('/', function(request<span>, response</span>) {
</span>  response<span>.sendFile(__dirname + '/public/index.html');
</span><span>});
</span>
app<span>.get(<span>/<span>^(.+)$</span>/</span>, function(req<span>, res</span>) {
</span>  res<span>.sendFile(__dirname + '/public/' + req.params[0]);
</span><span>});
</span>
app<span>.use(function(err<span>, req, res, next</span>) {
</span>  <span>console.error(err.stack);
</span>  res<span>.status(500).send('Something broke!');
</span><span>});
</span> 
server<span>.listen(port, function() {
</span>  <span>console.log('Listening on ' + port);
</span><span>});
</span>
t<span>.track('pizza');
</span>t<span>.on('tweet', function(tweet){
</span>  <span>console.log('Roger that. Tweets incoming!');
</span>  <span>console.log(tweet);
</span>
  io<span>.emit('tweet', tweet);
</span><span>});
</span>
t<span>.on('error', function (err) {
</span>  <span>console.log('Brace yourself! We are goin doooowwwwwwnnnnnnnn! ', err);
</span><span>});</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
<span>var express = require('express'),
</span>    app <span>= express(),
</span>    server <span>= require('http').createServer(app),
</span>    port <span>= process.env.PORT || 80,
</span>    io <span>= require('socket.io')(server),
</span>    config <span>= require('./config.json'),
</span>    <span>Twitter = require('node-tweet-stream'),
</span>    t <span>= new Twitter(config);
</span>
app<span>.get('/', function(request<span>, response</span>) {
</span>  response<span>.sendFile(__dirname + '/public/index.html');
</span><span>});
</span>
app<span>.get(<span>/<span>^(.+)$</span>/</span>, function(req<span>, res</span>) {
</span>  res<span>.sendFile(__dirname + '/public/' + req.params[0]);
</span><span>});
</span>
app<span>.use(function(err<span>, req, res, next</span>) {
</span>  <span>console.error(err.stack);
</span>  res<span>.status(500).send('Something broke!');
</span><span>});
</span> 
server<span>.listen(port, function() {
</span>  <span>console.log('Listening on ' + port);
</span><span>});
</span>
t<span>.track('pizza');
</span>t<span>.on('tweet', function(tweet){
</span>  <span>console.log('Roger that. Tweets incoming!');
</span>  <span>console.log(tweet);
</span>
  io<span>.emit('tweet', tweet);
</span><span>});
</span>
t<span>.on('error', function (err) {
</span>  <span>console.log('Brace yourself! We are goin doooowwwwwwnnnnnnnn! ', err);
</span><span>});</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Dann richten wir die IO -Variable ein, während wir gleichzeitig unsere Funktionalität des Socket.IO -Servers starten und sie an den oben eingerichteten Expressserver anhängen:

<span>var express = require('express'),
</span>    app <span>= express(),
</span>    server <span>= require('http').createServer(app),
</span>    port <span>= process.env.PORT || 80,</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Twitter -Zugriff einrichten

Die Konfigurationsvariable ist eine gute Möglichkeit, die Twitter -Authentifizierungsschlüssel der Anwendung in ihrer eigenen Datei zu halten. Um den Twitter-Stream anzeigen zu können, werden wir ein NPM-Modul namens Node-Tweet-Stream verwenden, das alle Funktionen bietet, die wir benötigen. Wir weisen das Objekt für unseren Twitter -Zugriff und alle zugehörigen Funktionen der T -Variablen zu und geben in unserem Konfigurations -JSON weiter, um zu beweisen, dass wir darauf zugreifen dürfen.

io <span>= require('socket.io')(server),</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Wenn Sie keine Twitter -Schlüssel für den Zugriff auf die Twitter -API haben, fürchten Sie sich nie! Sie müssen nur eine App mit Twitter registrieren. Gehen Sie zur Seite "Twitter Application Management", melden Sie sich mit Ihren Twitter -Anmeldeinformationen an und klicken Sie dann auf "Neue App erstellen".

Sobald Sie eine App haben, können Sie Ihre Schlüssel und Zugriff auf Token erhalten, indem Sie auf den Link "Tasten und Zugriff auf Tokens zugreifen" klicken, die auf der Verwaltungsseite Ihrer App angezeigt werden. Wenn Sie es nicht finden können, befindet sich es an der URL von: https://apps.twitter.com/app/0000000/keys (Ersetzen von 0000000 durch die ID Ihrer App).

Erstellen Sie dann eine Datei auf derselben Ebene wie index.html namens config.json. Fügen Sie darin Folgendes mit den Werten Ihrer eigenen App hinzu:

config <span>= require('./config.json'),
</span><span>Twitter = require('node-tweet-stream'),
</span>t <span>= new Twitter(config),</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Andere Server -Grundlagen

Weiter in unserer Index.js -Datei richten wir Aufrufe an das Stammverschluss unseres Servers ein, um /public/index.html:

zu laden
<span>{
</span>  <span>"consumer_key": "YOURKEY",
</span>  <span>"consumer_secret": "YOURKEYSECRET",
</span>  <span>"token": "YOURTOKEN",
</span>  <span>"token_secret": "YOURTOKENSECRET"
</span><span>}</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Wir haben auch alle anderen statischen Dateien innerhalb des öffentlichen Verzeichnisses auf unserem Server aufgestellt:

app<span>.get('/', function(request<span>, response</span>) {
</span>  response<span>.sendFile(__dirname + '/public/index.html');
</span><span>});</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Wenn wir einen Fehler haben, protokollieren wir diesen Fehler in der Konsole unseres Servers und geben einen 500 -Fehler zurück:

app<span>.get(<span>/<span>^(.+)$</span>/</span>, function(req<span>, res</span>) {
</span>  res<span>.sendFile(__dirname + '/public/' + req.params[0]);
</span><span>});</span>
Nach dem Login kopieren
Nach dem Login kopieren

Die folgenden Zeilen starten unseren Server mit allen obigen Einstellungen.

app<span>.use(function(err<span>, req, res, next</span>) {
</span>  <span>console.error(err.stack);
</span>  res<span>.status(500).send('Something broke!');
</span><span>});</span>
Nach dem Login kopieren
Nach dem Login kopieren

Abrufen unseres Live -Twitter -Streams

Schließlich richten wir unsere Twitter -spezifische Serverfunktionen ein. Wir verwenden die Funktion Track (), um anzugeben, welches Schlüsselwort wir im immer erweiterten Twitter -Inhaltsstream verfolgen möchten.

server<span>.listen(port, function() {
</span>  <span>console.log('Listening on ' + port);
</span><span>});</span>
Nach dem Login kopieren

Wir haben dann eine Rückruffunktion eingerichtet, die jederzeit ausgeführt werden soll, wenn das Node-Tweet-Stream-Modul einen Tweet mit diesem Schlüsselwort entdeckt. Wenn es eines sieht, protokollieren wir es in dem Konsolenprotokoll unseres Servers (dies ist optional, Sie können dies entfernen, wenn Sie möchten) und geben diesen Tweet als Socket.io -Ereignis an verbundene Clients aus.

.
t<span>.track('pizza');</span>
Nach dem Login kopieren

Wenn wir aus irgendeinem Grund einen Fehler mit unserer Twitter -API haben, wird sie an unseren Serverprotokollen angemeldet:
t<span>.on('tweet', function(tweet){
</span>  <span>console.log('Roger that. Tweets incoming!');
</span>  <span>console.log(tweet);
</span>
  io<span>.emit('tweet', tweet);
</span><span>});</span>
Nach dem Login kopieren

Alle unsere Serverabhängigkeiten und -Details werden in package.json wie bei allen Knoten -Apps gespeichert. Wenn Sie Node.js neu sind, möchten Sie vielleicht ein wenig darüber nachlesen, was alles bedeutet: package.json.

unser Front -End -Code

Unser Front -End -Code beginnt mit dem gleichen Einrichten von der VR -VR mit Google Cardboard und Three.JS -Artikel - eine drei.js -Szene, die wir durch einen stereoskopischen Effekt anzeigen und unsere Szene in eine VR -Ansicht bringen. Um diese kurze und bündige und süße zu halten, werde ich die Teile nicht wie die vorherige Demo aus diesem Artikel abdecken. Wenn Sie sich nicht sicher sind, was ich hier nicht erkläre, überprüfen Sie diesen früheren Artikel, um Informationen zu erhalten.

Einrichten von Socket.io

Die einzige neue JS -Datei, die wir im Vergleich zu unserer vorherigen Stiftung hinzufügen werden, ist unsere JavaScript -Datei in Socket.io. Es ist ein einfacher Liner:

<span>var express = require('express'),
</span>    app <span>= express(),
</span>    server <span>= require('http').createServer(app),
</span>    port <span>= process.env.PORT || 80,
</span>    io <span>= require('socket.io')(server),
</span>    config <span>= require('./config.json'),
</span>    <span>Twitter = require('node-tweet-stream'),
</span>    t <span>= new Twitter(config);
</span>
app<span>.get('/', function(request<span>, response</span>) {
</span>  response<span>.sendFile(__dirname + '/public/index.html');
</span><span>});
</span>
app<span>.get(<span>/<span>^(.+)$</span>/</span>, function(req<span>, res</span>) {
</span>  res<span>.sendFile(__dirname + '/public/' + req.params[0]);
</span><span>});
</span>
app<span>.use(function(err<span>, req, res, next</span>) {
</span>  <span>console.error(err.stack);
</span>  res<span>.status(500).send('Something broke!');
</span><span>});
</span> 
server<span>.listen(port, function() {
</span>  <span>console.log('Listening on ' + port);
</span><span>});
</span>
t<span>.track('pizza');
</span>t<span>.on('tweet', function(tweet){
</span>  <span>console.log('Roger that. Tweets incoming!');
</span>  <span>console.log(tweet);
</span>
  io<span>.emit('tweet', tweet);
</span><span>});
</span>
t<span>.on('error', function (err) {
</span>  <span>console.log('Brace yourself! We are goin doooowwwwwwnnnnnnnn! ', err);
</span><span>});</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Um auf die Funktionalität von Socket.io zuzugreifen, müssen wir diese Funktionalität der IO -Variablen nur zuweisen, wie Sie in unserer Index.html -Datei etwas weiter unten sehen werden:

<span>var express = require('express'),
</span>    app <span>= express(),
</span>    server <span>= require('http').createServer(app),
</span>    port <span>= process.env.PORT || 80,</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Vorbereitung unserer Türme

wir haben dann Variablen für unsere „Türme“ eingerichtet (im Grunde unsere vertikalen Partikelsätze, die einen Tweet darstellen). Alle unsere Türme werden innerhalb eines Dreier -Objekts aufbewahrt, das als Tweettower namens Tweettowers genannt wird. Dies ist ein Containerobjekt, mit dem wir alle unsere Türme im Auge behalten können:

io <span>= require('socket.io')(server),</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Particlexture und Partlematerial sind unsere Variablen, die darstellen, wie unsere Partikel aussehen:
config <span>= require('./config.json'),
</span><span>Twitter = require('node-tweet-stream'),
</span>t <span>= new Twitter(config),</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

mAXTOWERCOUNT ist die maximale Anzahl von Türmen, die wir in unserer Szene sichtbar sein möchten. Wenn dies zu hoch ist, können wir ein verzögertes Erlebnis haben. Ich habe es auf 6000 gesetzt, da dies die maximalen Partikel auf etwa eine Million belegt. Eine vernünftige Nummer meiner Meinung nach!

<span>{
</span>  <span>"consumer_key": "YOURKEY",
</span>  <span>"consumer_secret": "YOURKEYSECRET",
</span>  <span>"token": "YOURTOKEN",
</span>  <span>"token_secret": "YOURTOKENSECRET"
</span><span>}</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Reichweite ist, wie groß ein Bereich um den Betrachter um den Zuschauer ist, dass diese Türme platziert werden. Die Türme werden an zufälligen Stellen in der Szene platziert, sodass dies so weit voneinander entfernt ist. Ich habe festgestellt, dass es eine schönere Erfahrung mit ihnen näher am Benutzer ist. Wenn sie weiter vom Benutzer entfernt sind, sieht es so aus, als gäbe es nicht so viele (obwohl es Tausende von Tausenden von Partikeln gibt!). Ich setze es auf 100:

app<span>.get('/', function(request<span>, response</span>) {
</span>  response<span>.sendFile(__dirname + '/public/index.html');
</span><span>});</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Unsere Init -Funktion

Es gibt nicht zu viel, was in unserer Init () -Funktion neu ist. Es richtet hauptsächlich unsere VR -Kamera und steuert, wie im vorherigen Artikel erläutert. Die neuen Bits sind am Ende.

Wir definieren unser Partikel-New-PNG, das wir in unserem öffentlichen Ordner haben:

app<span>.get(<span>/<span>^(.+)$</span>/</span>, function(req<span>, res</span>) {
</span>  res<span>.sendFile(__dirname + '/public/' + req.params[0]);
</span><span>});</span>
Nach dem Login kopieren
Nach dem Login kopieren

Wir beenden die Init () -Funktion, indem wir unseren Tweettowers -Container zu unserer Szene hinzufügen. In dieser Szene müssen wir uns keine Sorgen machen, dass wir einen unserer Türme direkt in die Szene hinzufügen. Wir fügen sie einfach direkt in unser Tweettower -Objekt hinzu.

app<span>.use(function(err<span>, req, res, next</span>) {
</span>  <span>console.error(err.stack);
</span>  res<span>.status(500).send('Something broke!');
</span><span>});</span>
Nach dem Login kopieren
Nach dem Login kopieren

auf Tweets

reagieren

Sie werden sich erinnern, dass unser Server, sobald unser Server Tweets mit unserem Keyword von "Pizza" über Twitter streamen, ein Ereignis namens "Tweet" ausgibt. Unser Client -Seite JavaScript wird nun auf dieses Ereignis achten und antworten:

<span>var express = require('express'),
</span>    app <span>= express(),
</span>    server <span>= require('http').createServer(app),
</span>    port <span>= process.env.PORT || 80,
</span>    io <span>= require('socket.io')(server),
</span>    config <span>= require('./config.json'),
</span>    <span>Twitter = require('node-tweet-stream'),
</span>    t <span>= new Twitter(config);
</span>
app<span>.get('/', function(request<span>, response</span>) {
</span>  response<span>.sendFile(__dirname + '/public/index.html');
</span><span>});
</span>
app<span>.get(<span>/<span>^(.+)$</span>/</span>, function(req<span>, res</span>) {
</span>  res<span>.sendFile(__dirname + '/public/' + req.params[0]);
</span><span>});
</span>
app<span>.use(function(err<span>, req, res, next</span>) {
</span>  <span>console.error(err.stack);
</span>  res<span>.status(500).send('Something broke!');
</span><span>});
</span> 
server<span>.listen(port, function() {
</span>  <span>console.log('Listening on ' + port);
</span><span>});
</span>
t<span>.track('pizza');
</span>t<span>.on('tweet', function(tweet){
</span>  <span>console.log('Roger that. Tweets incoming!');
</span>  <span>console.log(tweet);
</span>
  io<span>.emit('tweet', tweet);
</span><span>});
</span>
t<span>.on('error', function (err) {
</span>  <span>console.log('Brace yourself! We are goin doooowwwwwwnnnnnnnn! ', err);
</span><span>});</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Der Antwortcode ist ein Aufruf einer Funktion namens Generatetower (), mit der unsere Szene einen Turm hinzufügt, der diesen Tweet darstellt. Wir übergeben es vier Werte:

<span>var express = require('express'),
</span>    app <span>= express(),
</span>    server <span>= require('http').createServer(app),
</span>    port <span>= process.env.PORT || 80,</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
  • Farbe ist die Farbe unseres Teilchens. Wir übergeben die Farbe des Profilhintergrunds des Benutzers. Auf diese Weise können wir verschiedene Farben zeigen, um verschiedene hungrige Benutzer darzustellen, die über Pizza twittern.
  • In
  • Startcoords wird der Turm platziert. Wir möchten, dass diese um uns herum platziert werden. Deshalb legen wir sie zwischen unserer Bereichsvariable (dies sollte zwischen -100 und 100) auf den X- und Z -Achsen liegen. Wenn wir sie zufällig auf y platzieren, würden sie auf unterschiedlichen Ebenen höher und niedriger vom Boden anstellen, anstatt wie Gebäude auszurichten. Das wollen wir definitiv nicht, daher stellen wir sicher, dass sie alle an einer y -Position von 0 platziert sind. GetRandomarbitrary () ist ein einfacher Zufallszahlengenerator zwischen den beiden Werten.
  • Geschwindigkeit definiert, wie weit unsere Partikel voneinander entfernt sind (oder die Geschwindigkeit, mit der der Turm ansteigt, wenn sie nach oben animieren).
  • Größe ist, wie viele Partikel hoch unser Turm sein wird. Wir haben es durchschnittlich auf einen Prozentsatz unter der Annahme einer maximalen Twitter -Länge von 140 Zeichen.

Anmelden eines Turms

Unsere generatetower () -Funktion selbst beginnt mit der Definition einer Tokusometrievariablen. Dies ist ein drei.Gerometrie -Objekt, das die Positionen aller unserer Partikel im Turm enthält. Wenn Sie alle Punkte innerhalb eines Geometrie -Objekts verfolgen, können die Verarbeitungszeiten niedrig bleiben, da drei.Js nur jedes Turmobjekt und seine Punkte und seine Punkte anstelle einer Reihe unabhängiger Partikel verfolgen müssen. Später im Code werden wir die Geometrie einem Dreier -Objekt bereitstellen, das diese Punkte in unsere Partikel interpretieren kann.

io <span>= require('socket.io')(server),</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Wir haben dann ein JavaScript -Objekt eingerichtet, das als Partlemovements bezeichnet wird und dort speichert, wo unsere Partikel im Turm beginnen und enden, und wie weit sie voneinander entfernt sind (die Werte, die wir früher übergeben haben):

config <span>= require('./config.json'),
</span><span>Twitter = require('node-tweet-stream'),
</span>t <span>= new Twitter(config),</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Die Variable der CurrentCoords verfolgt die letzte Position eines Teilchens innerhalb des Turms. Wir initialisieren es bei 0,0,0. Die Startkosten, in denen der Turm platziert wird, werden früher aus dem Funktionsaufruf analysiert. Wenn wir keine Startkoordinaten aus dem Funktionsaufruf haben, initialisieren wir sie so wie CurrentCoords:

<span>{
</span>  <span>"consumer_key": "YOURKEY",
</span>  <span>"consumer_secret": "YOURKEYSECRET",
</span>  <span>"token": "YOURTOKEN",
</span>  <span>"token_secret": "YOURTOKENSECRET"
</span><span>}</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Wir itererieren dann die Größe unseres Turms, um jedes Teilchen zu erzeugen. Wir haben die aktuellen Koordinaten festgelegt, damit y sich um unseren Geschwindigkeitswert multipliziert von i erhöht. Unsere X- und Z -Werte bleiben an ihren Startpunkten, da wir uns nur nach oben bewegen.

app<span>.get('/', function(request<span>, response</span>) {
</span>  response<span>.sendFile(__dirname + '/public/index.html');
</span><span>});</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Mit den für dieses Teilchen definierten Koordinaten befinden wir uns die Position dieses Partikels als Scheitelpunkt in unserem Towergeometrie-Objekt:

<span>var express = require('express'),
</span>    app <span>= express(),
</span>    server <span>= require('http').createServer(app),
</span>    port <span>= process.env.PORT || 80,
</span>    io <span>= require('socket.io')(server),
</span>    config <span>= require('./config.json'),
</span>    <span>Twitter = require('node-tweet-stream'),
</span>    t <span>= new Twitter(config);
</span>
app<span>.get('/', function(request<span>, response</span>) {
</span>  response<span>.sendFile(__dirname + '/public/index.html');
</span><span>});
</span>
app<span>.get(<span>/<span>^(.+)$</span>/</span>, function(req<span>, res</span>) {
</span>  res<span>.sendFile(__dirname + '/public/' + req.params[0]);
</span><span>});
</span>
app<span>.use(function(err<span>, req, res, next</span>) {
</span>  <span>console.error(err.stack);
</span>  res<span>.status(500).send('Something broke!');
</span><span>});
</span> 
server<span>.listen(port, function() {
</span>  <span>console.log('Listening on ' + port);
</span><span>});
</span>
t<span>.track('pizza');
</span>t<span>.on('tweet', function(tweet){
</span>  <span>console.log('Roger that. Tweets incoming!');
</span>  <span>console.log(tweet);
</span>
  io<span>.emit('tweet', tweet);
</span><span>});
</span>
t<span>.on('error', function (err) {
</span>  <span>console.log('Brace yourself! We are goin doooowwwwwwnnnnnnnn! ', err);
</span><span>});</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

, das sicherstellt, dass unsere Positionierung der Partikel korrekt eingestellt ist. Als nächstes definieren wir, wie die Partikel in diesem Turm innerhalb der partellematerialischen Variablen aussehen werden. Unsere Partikel werden innerhalb eines Dreier -Objekts platziert. Um sie zu stylen, verwenden wir ein Drei.

<span>var express = require('express'),
</span>    app <span>= express(),
</span>    server <span>= require('http').createServer(app),
</span>    port <span>= process.env.PORT || 80,</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
    map definiert das Bild, das wir für das Partikel verwenden werden. Wir geben in den zuvor definierten Partikeln vorbei.
  • Farbe passt in der Farbe, die wir das Partikel haben sollen (standardmäßig auf 0xffffff in drei.js).
  • Mischung stellt fest, wie sich die Partikel in die Szene einfügen. Drei.AdditiveBlenden fügt die Farbe der Textur zu der dahinter stehenden.
  • transparent sorgt dafür
  • Größe ist die Größe unserer Partikel.
  • Schließlich definieren wir die Punktwolke unseres Turms innerhalb der Variablen des Turms. Wir geben unsere Geometrie mit, die die Punkte enthalten, auf die jedes Partikel erscheint, sowie das Material, das wir für jedes von ihnen definiert haben.

Wir fügen diesen Turm zu unserem Tweettower -Sammlungsobjekt hinzu und überprüfen dann, wie viele Türme in der Szene sind. Wenn wir mehr Türme als unser maximal erlaubt haben, verbergen wir die älteste, um die Last auf dem Gerät zu reduzieren. Wenn Sie Leistungsprobleme haben, sind sie wahrscheinlich etwas besser, wenn Sie den MaxtowerCount reduzieren!
io <span>= require('socket.io')(server),</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Ausführen unseres Codes
config <span>= require('./config.json'),
</span><span>Twitter = require('node-tweet-stream'),
</span>t <span>= new Twitter(config),</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Um diese Demo lokal auszuführen, benötigen Sie den Knoten installiert und müssen die üblichen Befehle ausführen. Installieren Sie alle Abhängigkeiten für das Projekt:

Dann führen Sie es aus:
<span>{
</span>  <span>"consumer_key": "YOURKEY",
</span>  <span>"consumer_secret": "YOURKEYSECRET",
</span>  <span>"token": "YOURTOKEN",
</span>  <span>"token_secret": "YOURTOKENSECRET"
</span><span>}</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Um dies auf Ihrem Smartphone zu testen, müssen Sie entweder sicherstellen beim Zugriff auf Localhost von überall).
app<span>.get('/', function(request<span>, response</span>) {
</span>  response<span>.sendFile(__dirname + '/public/index.html');
</span><span>});</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Sie können den Knotenserver auch irgendwo hosten. Ich persönlich habe Heroku verwendet, aber dies ist eine völlig persönliche Präferenz.

Sobald Sie den Server irgendwo in Betrieb haben, öffnen Sie Chrome für Mobile und besuchen Sie ihn! Legen Sie Ihr Google -Karton oder ein anderes ähnliches Headset auf und Sie sollten eine Erfahrung sehen, die nach einer halben Minute oder so so aussieht, wenn Sie nachschlagen:

Schlussfolgerung Visualisieren eines Twitter -Streams in VR mit drei.js und Knoten

Dies hätte Ihnen einen guten Überblick über die Verwendung von Knoten, Socket.io und drei.js geben sollen, um eine 3D -Web -API -fähige virtuelle Realitätsvisualisierung zu erstellen. Die Demo selbst könnte weiterentwickelt werden, wobei weitere Schlüsselwörter, Filter hinzugefügt werden, wodurch sie mit mehr Partikeln usw. usw. läuft. Es gibt viel Potenzial! Fühlen Sie sich frei, dort rauszukommen und zu versuchen, Ihre eigene fantastische Erfahrung aus dieser Demo zu machen!

Ich habe auch andere Demos hier bei SitePoint, die ähnliche Konzepte verwenden, sie aber stattdessen in eine erweiterte Realitätserfahrung einfließen. Wenn Sie interessiert sind, filtern Sie die Realität mit JavaScript und Google Cardboard durch, um die Kamera von Ihrem Smartphone aus zu nehmen und Filter hinzuzufügen, und erweiterte die Realität im Browser mit AWE.js. Die immer kraftvolle Kombination von drei.js und Awe.js!

Wenn Sie sich die Herausforderung stellen, Ihre eigene VR -Visualisierung aus der Demo in diesem Artikel zusammenzustellen (oder sie mit Elementen aus den genannten AR -Beispielen zu kombinieren), hinterlassen Sie eine Notiz in den Kommentaren oder setzen Sie sich mit uns in Verbindung Ich auf Twitter (@thatpatrickguy), ich werde mein Headset herausholen und einen Blick darauf werfen!

häufig gestellte Fragen (FAQs) zur Visualisierung eines Twitter -Streams in VR mit drei.js und Knoten

Wie kann ich Twitter für Websites einrichten? Zunächst müssen Sie eine Twitter -Anwendung auf der Website des Twitter -Entwicklers erstellen. Nach dem Erstellen der Anwendung erhalten Sie eine Reihe von Schlüssel und Token. Diese werden verwendet, um Ihre Anwendung mit Twitter zu authentifizieren. Sie müssen dann die Twitter JavaScript -API auf Ihrer Website installieren. Mit dieser API können Ihre Website mit Twitter interagieren und Funktionen wie Tweet-Schaltflächen und eingebettete Tweets aktivieren. JavaScript -Bibliothek, mit der animierte 3D -Computergrafiken in einem Webbrowser erstellt und angezeigt werden. Es verwendet WebGL, um Grafiken zu rendern. Die Bibliothek bietet eine Reihe von Objekten und Methoden, die es einfacher machen, komplexe 3D -Szenen zu erstellen, einschließlich Kameras, Lichtern, Materialien und Geometrien.

Um drei.js auf node.js zu verwenden, müssen Sie das Paket 'Drei' mit NPM, dem Node.js -Paket -Paket -Manager, installieren. Nach der Installation können Sie das "Drei" -Modul in Ihren Skripten node.js benötigen. Sie können dann die Three.js -API verwenden, um 3D -Grafiken zu erstellen.

Wie kann ich einen Twitter -Stream in VR? Zunächst müssen Sie mit der Twitter -API einen Twitter -Stream einrichten. Dies beinhaltet das Erstellen einer Twitter -Anwendung und die Authentifizierung mit Ihrem Twitter -Konto. Sobald der Stream eingerichtet ist, können Sie drei.js verwenden, um eine 3D -Visualisierung der Tweets zu erstellen. Dies beinhaltet das Erstellen einer 3D-Szene, das Hinzufügen von Objekten zur Darstellung von Tweets und das Aktualisieren der Szene in Echtzeit, wenn neue Tweets eintreffen.

Was sind die wichtigsten Unterschiede zwischen drei.js und anderen 3D-Grafikbibliotheken? Es wird viele der Komplexität der direkten Arbeit mit WebGL abstrahiert, was es einfacher macht, komplexe 3D -Szenen zu erstellen. Andere Bibliotheken bieten möglicherweise mehr Zugang zu WebGL auf niedrigem Niveau, erfordern jedoch ein tieferes Verständnis der 3D-Grafikprogrammierung. Twitter Stream, Fehler können aus verschiedenen Gründen auftreten, wie z. B. Netzwerkprobleme oder falsche Authentifizierungsanmeldeinformationen. Die Twitter -API enthält Fehlermeldungen, mit denen Sie diese Probleme diagnostizieren und beheben können. Es ist wichtig, diese Fehler in Ihrem Code zu behandeln, um sicherzustellen, dass Ihre Anwendung weiterhin reibungslos ausgeführt wird.

Wie kann ich die Leistung meiner drei.js -Anwendung optimieren? eine Vielzahl von Techniken. Dazu gehört die Reduzierung der Komplexität Ihrer 3D -Modelle, die Optimierung Ihrer Texturen und die Minimierung der Anzahl der Ziehanrufe. Sie können auch Tools wie den drei.js -Inspektor verwenden, um die Leistung Ihrer Anwendung zu analysieren und Engpässe zu identifizieren. Das Erscheinen Ihres Twitter -Streams in VR durch Änderung der Eigenschaften der 3D -Objekte, die Tweets darstellen. Dies schließt Eigenschaften wie Farbe, Textur und Größe ein. Sie können auch verschiedene Arten von Lichtern und Kameras verwenden, um das Gesamtaussehen und das Gefühl der Szene zu ändern.

Wie kann ich meinem Twitter -Stream in VR? Stream in VR umfasst die Verwendung von Ereignishörern, um Benutzeraktionen wie Klicks oder Berührungen zu erkennen. Sie können dann die 3D -Szene als Antwort auf diese Aktionen aktualisieren. Sie können beispielsweise Benutzern ermöglichen, Tweets auszuwählen, indem Sie auf sie klicken oder mit Touch Gesten durch die Szene navigieren. Eine Drei.JS -Anwendung im Web umfasst die Verpackung Ihrer Anwendungsdateien und das Hochladen auf einen Webserver. Sie können Tools wie WebPack verwenden, um Ihre JavaScript -Dateien und Dienste wie Github -Seiten oder Netlify zu bündeln, um Ihre Anwendung zu hosten. Nach der Bereitstellung ist Ihre Anwendung für alle mit einem Webbrowser zugegriffen.

Das obige ist der detaillierte Inhalt vonVisualisieren eines Twitter -Streams in VR mit drei.js und Knoten. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

Java-Tutorial
1664
14
PHP-Tutorial
1266
29
C#-Tutorial
1239
24
Entmystifizieren JavaScript: Was es tut und warum es wichtig ist Entmystifizieren JavaScript: Was es tut und warum es wichtig ist Apr 09, 2025 am 12:07 AM

JavaScript ist der Eckpfeiler der modernen Webentwicklung. Zu den Hauptfunktionen gehören eine ereignisorientierte Programmierung, die Erzeugung der dynamischen Inhalte und die asynchrone Programmierung. 1) Ereignisgesteuerte Programmierung ermöglicht es Webseiten, sich dynamisch entsprechend den Benutzeroperationen zu ändern. 2) Die dynamische Inhaltsgenerierung ermöglicht die Anpassung der Seiteninhalte gemäß den Bedingungen. 3) Asynchrone Programmierung stellt sicher, dass die Benutzeroberfläche nicht blockiert ist. JavaScript wird häufig in der Webinteraktion, der einseitigen Anwendung und der serverseitigen Entwicklung verwendet, wodurch die Flexibilität der Benutzererfahrung und die plattformübergreifende Entwicklung erheblich verbessert wird.

Die Entwicklung von JavaScript: Aktuelle Trends und Zukunftsaussichten Die Entwicklung von JavaScript: Aktuelle Trends und Zukunftsaussichten Apr 10, 2025 am 09:33 AM

Zu den neuesten Trends im JavaScript gehören der Aufstieg von Typenkripten, die Popularität moderner Frameworks und Bibliotheken und die Anwendung der WebAssembly. Zukunftsaussichten umfassen leistungsfähigere Typsysteme, die Entwicklung des serverseitigen JavaScript, die Erweiterung der künstlichen Intelligenz und des maschinellen Lernens sowie das Potenzial von IoT und Edge Computing.

JavaScript -Engines: Implementierungen vergleichen JavaScript -Engines: Implementierungen vergleichen Apr 13, 2025 am 12:05 AM

Unterschiedliche JavaScript -Motoren haben unterschiedliche Auswirkungen beim Analysieren und Ausführen von JavaScript -Code, da sich die Implementierungsprinzipien und Optimierungsstrategien jeder Engine unterscheiden. 1. Lexikalanalyse: Quellcode in die lexikalische Einheit umwandeln. 2. Grammatikanalyse: Erzeugen Sie einen abstrakten Syntaxbaum. 3. Optimierung und Kompilierung: Generieren Sie den Maschinencode über den JIT -Compiler. 4. Führen Sie aus: Führen Sie den Maschinencode aus. V8 Engine optimiert durch sofortige Kompilierung und versteckte Klasse.

JavaScript: Erforschung der Vielseitigkeit einer Websprache JavaScript: Erforschung der Vielseitigkeit einer Websprache Apr 11, 2025 am 12:01 AM

JavaScript ist die Kernsprache der modernen Webentwicklung und wird für seine Vielfalt und Flexibilität häufig verwendet. 1) Front-End-Entwicklung: Erstellen Sie dynamische Webseiten und einseitige Anwendungen durch DOM-Operationen und moderne Rahmenbedingungen (wie React, Vue.js, Angular). 2) Serverseitige Entwicklung: Node.js verwendet ein nicht blockierendes E/A-Modell, um hohe Parallelitäts- und Echtzeitanwendungen zu verarbeiten. 3) Entwicklung von Mobil- und Desktop-Anwendungen: Die plattformübergreifende Entwicklung wird durch reaktnative und elektronen zur Verbesserung der Entwicklungseffizienz realisiert.

Python vs. JavaScript: Die Lernkurve und Benutzerfreundlichkeit Python vs. JavaScript: Die Lernkurve und Benutzerfreundlichkeit Apr 16, 2025 am 12:12 AM

Python eignet sich besser für Anfänger mit einer reibungslosen Lernkurve und einer kurzen Syntax. JavaScript ist für die Front-End-Entwicklung mit einer steilen Lernkurve und einer flexiblen Syntax geeignet. 1. Python-Syntax ist intuitiv und für die Entwicklung von Datenwissenschaften und Back-End-Entwicklung geeignet. 2. JavaScript ist flexibel und in Front-End- und serverseitiger Programmierung weit verbreitet.

So erstellen Sie eine SaaS-Anwendung mit mehreren Mietern mit Next.js (Frontend Integration) So erstellen Sie eine SaaS-Anwendung mit mehreren Mietern mit Next.js (Frontend Integration) Apr 11, 2025 am 08:22 AM

Dieser Artikel zeigt die Frontend -Integration mit einem Backend, das durch die Genehmigung gesichert ist und eine funktionale edtech SaaS -Anwendung unter Verwendung von Next.js. erstellt. Die Frontend erfasst Benutzerberechtigungen zur Steuerung der UI-Sichtbarkeit und stellt sicher, dass API-Anfragen die Rollenbasis einhalten

Von C/C nach JavaScript: Wie alles funktioniert Von C/C nach JavaScript: Wie alles funktioniert Apr 14, 2025 am 12:05 AM

Die Verschiebung von C/C zu JavaScript erfordert die Anpassung an dynamische Typisierung, Müllsammlung und asynchrone Programmierung. 1) C/C ist eine statisch typisierte Sprache, die eine manuelle Speicherverwaltung erfordert, während JavaScript dynamisch eingegeben und die Müllsammlung automatisch verarbeitet wird. 2) C/C muss in den Maschinencode kompiliert werden, während JavaScript eine interpretierte Sprache ist. 3) JavaScript führt Konzepte wie Verschlüsse, Prototypketten und Versprechen ein, die die Flexibilität und asynchrone Programmierfunktionen verbessern.

Erstellen einer SaaS-Anwendung mit mehreren Mietern mit Next.js (Backend Integration) Erstellen einer SaaS-Anwendung mit mehreren Mietern mit Next.js (Backend Integration) Apr 11, 2025 am 08:23 AM

Ich habe eine funktionale SaaS-Anwendung mit mehreren Mandanten (eine EdTech-App) mit Ihrem täglichen Tech-Tool erstellt und Sie können dasselbe tun. Was ist eine SaaS-Anwendung mit mehreren Mietern? Mit Multi-Tenant-SaaS-Anwendungen können Sie mehrere Kunden aus einem Sing bedienen

See all articles