>我以前已經討論過在SitePoint文章中開發虛擬現實網絡體驗的所有基礎知識,將VR帶到網絡上使用Google Cardboard和Thrive.js,因此,如果您是整個想法的新手,請先閱讀該一個,然後再閱讀一個,然後出現。後退。該演示使用相同的基礎。
>我們將要構建的演示將觀看現場Twitter流以獲取關鍵字。當一個人在觀看溪流時發推文時,它將帶來一個閃亮的顆粒的“塔”,代表了推文的時間。特別是該演示將尋找“披薩”一詞。你為什麼要披薩?我正在尋找一個不像“ Bieber”那樣頻繁提及的術語,而是“ Boxcar Racing Hyenas”更頻繁。簡而言之,最好的術語是相對頻繁的術語,在您正在觀看時會出現它們,但並不是那麼頻繁,以至於它們每秒幾百次。披薩是其中之一。
鑰匙要點
我們將首先查看我們的節點服務器代碼。它將顯示我們的Flat HTML,並且還可以作為socket.io服務器運行,該服務器將從Twitter中汲取數據流。
>
完整的服務器相對較短,看起來很短:>我們的第一行使用Node Express Framework設置服務器。這是一個相當簡單的設置,正在吸引我們所有的依賴項,並為我們準備訪問服務器功能的應用變量。端口設置了我們希望服務器運行的哪個端口(process.env.port是服務器變量,某些託管設置(例如Heroku)將定義)。
<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>
>設置Twitter訪問
<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>
>擁有應用程序後,您可以通過單擊將顯示在應用程序管理頁面上的“鍵和訪問令牌”鏈接來獲取鍵和訪問令牌。如果找不到它,它將在以下網址:https://apps.twitter.com/app/0000000/keys(用您的應用程序ID替換0000000)。
然後,在與index.html相同的級別上創建一個名為config.json的文件。在其中,使用您自己的應用程序的值添加以下內容:
其他服務器基礎知識
config <span>= require('./config.json'), </span><span>Twitter = require('node-tweet-stream'), </span>t <span>= new Twitter(config),</span>
>我們還可以在服務器上的公共目錄中提供任何其他靜態文件:
<span>{ </span> <span>"consumer_key": "YOURKEY", </span> <span>"consumer_secret": "YOURKEYSECRET", </span> <span>"token": "YOURTOKEN", </span> <span>"token_secret": "YOURTOKENSECRET" </span><span>}</span>
如果我們確實有錯誤,我們會在服務器的控制台中記錄該錯誤,然後返回500錯誤:
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>
>檢索我們的實時Twitter流
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>
>如果我們的Twitter API出於任何原因有錯誤,則將登錄到我們的服務器日誌:
server<span>.listen(port, function() { </span> <span>console.log('Listening on ' + port); </span><span>});</span>
>與所有節點應用一樣,我們的所有服務器依賴性和詳細信息都存儲在package.json中。如果您是node.js的新手,則可能需要對所有內容的含義進行一些閱讀:package.json。
>我們的前端代碼以Google Cardboard和Thrim.js文章的“ Bringing VR到Web”的相同設置開頭 - 我們通過立體鏡面效果顯示的三個.js場景,使我們的場景成為VR視圖。為了保持這一簡短而甜美,我不會涵蓋與該文章以前的演示相同的位。如果您不確定我在這裡沒有解釋的任何內容,請查看以前的文章以獲取信息。
為了從socket.io訪問功能,我們需要的只是將該功能分配給io變量,因為您會在我們的index.html文件中看到一些進一步的功能:
<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>
準備我們的塔
<span>var express = require('express'), </span> app <span>= express(), </span> server <span>= require('http').createServer(app), </span> port <span>= process.env.PORT || 80,</span>
MaxtowerCount是我們想在場景中可見的最大塔樓數量 - 如果設定太高,我們可能會獲得懶惰的體驗。我將其設置為6000,因為這將最大粒子設置為大約一百萬。我認為一個合理的數字!
>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>
<span>{ </span> <span>"consumer_key": "YOURKEY", </span> <span>"consumer_secret": "YOURKEYSECRET", </span> <span>"token": "YOURTOKEN", </span> <span>"token_secret": "YOURTOKENSECRET" </span><span>}</span>
>在我們的init()函數中沒有太多新事物。它主要設置了我們的VR攝像機,並按照上一篇文章所述進行控制。新的位在末尾。
app<span>.get('/', function(request<span>, response</span>) { </span> response<span>.sendFile(__dirname + '/public/index.html'); </span><span>});</span>
>我們通過將我們的TweetTowers容器添加到我們的場景中來完成INIT()函數。在我們的場景中,我們不必擔心將任何塔直接添加到場景中,我們只會將它們直接添加到我們的TweetTowers對像中。
對推文做出反應
app<span>.get(<span>/<span>^(.+)$</span>/</span>, function(req<span>, res</span>) { </span> res<span>.sendFile(__dirname + '/public/' + req.params[0]); </span><span>});</span>
>您會記得,一旦我們的服務器找到了通過Twitter的Tweet通過我們的“披薩”流式傳輸的推文,它就會發出一個稱為“ Tweet”的事件。我們的客戶端JavaScript現在將注意該事件並響應: 響應代碼是對稱為generateTower()函數的調用,該函數將在我們的場景中添加塔,代表該推文。我們將其傳遞給四個值:
然後,我們迭代塔的大小以創建每個粒子。我們設置了當前的坐標,以使y的速度值乘以i。我們的x和z值僅在向上移動時就保持著起始位置。
為了在智能手機上進行測試,您要么需要確保智能手機在同一本地網絡上並找到計算機的IP地址,要么使用Ngrok等隧道服務(我介紹瞭如何在文章中使用Ngrok從任何地方訪問本地主機)
>我還在Sitepoint上還有其他使用類似概念的演示,而是將它們帶入了增強的現實體驗。如果您有興趣,請使用JavaScript和Google Cardboard過濾現實,探索從您的智能手機中攝取的相機並將過濾器添加到它的相機,並在瀏覽器中增強現實,awe.js探索一路探索並通過將元素擴大到您的視野中。三分和敬畏的強大組合!
如果您確實承擔了本文中從演示中進行自己的VR可視化的挑戰(或將其與提到的AR示例中的元素結合在一起),請在評論中留下註釋或與之聯繫我在Twitter上(@thatpatrickguy),我會拿出頭戴式耳機,看看!
如何在node.js上使用three.js? >如何優化我的three.js應用程序的性能? ><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>
<span>var express = require('express'),
</span> app <span>= express(),
</span> server <span>= require('http').createServer(app),
</span> port <span>= process.env.PORT || 80,</span>
>我們的generateTeTower()函數本身首先定義高層變量。這是一個三個幾何對象,它將包含塔中我們所有顆粒的位置。將跟踪的所有點保持在一個幾何對像中可以幫助保持處理時間的降低,因為三個。 JS只需要跟踪每個塔對象及其點,而不是一系列獨立的粒子。在代碼的稍後,我們將提供幾何形狀,以將這些點解釋到我們的粒子中的三個。
然後,我們設置了一個稱為顆粒的JavaScript對象,該對象存儲了我們的粒子將在塔中啟動和完成的位置,以及它們的相距多遠(我們之前通過的值):
>
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>
<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>
<span>var express = require('express'),
</span> app <span>= express(),
</span> server <span>= require('http').createServer(app),
</span> port <span>= process.env.PORT || 80,</span>
顏色以我們希望粒子為顏色的顏色傳遞(默認為triph.js中的0xffffff)。
>要在本地運行此演示,您需要安裝節點,並且需要運行通常的命令。安裝項目的所有依賴項: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>
>
>將服務器設置在某個地方並運行後,打開Chrome以供移動設備訪問!戴上您的Google紙板或其他類似耳機,您應該看到一種經歷,如果您抬頭看,則在半分鐘左右後看起來像這樣:<span>{
</span> <span>"consumer_key": "YOURKEY",
</span> <span>"consumer_secret": "YOURKEYSECRET",
</span> <span>"token": "YOURTOKEN",
</span> <span>"token_secret": "YOURTOKENSECRET"
</span><span>}</span>
app<span>.get('/', function(request<span>, response</span>) {
</span> response<span>.sendFile(__dirname + '/public/index.html');
</span><span>});</span>
>
我如何為網站設置Twitter? >為網站設置Twitter涉及幾個步驟。首先,您需要在Twitter開發人員的網站上創建一個Twitter應用程序。創建應用程序後,您將收到一組鍵和令牌。這些用於用Twitter來驗證您的應用程序。然後,您需要在網站上安裝Twitter JavaScript API。此API允許您的網站與Twitter進行交互,從而啟用了諸如Tweet按鈕和嵌入式推文之類的功能。 three.js是跨瀏覽器用於在Web瀏覽器中創建和顯示動畫3D計算機圖形的JavaScript庫。它使用WebGL渲染圖形。該庫提供了一組對象和方法,使創建複雜的3D場景變得更容易,包括相機,燈光,材料和幾何形狀。
> three.js是一個高級庫,為創建3D圖形提供了簡單的API。它抽象了直接與WebGL合作的許多複雜性,從而更容易創建複雜的3D場景。其他庫可能會提供對WebGL的更低級訪問權限,但需要更深入地了解3D圖形編程。 Twitter流,出於多種原因可能發生錯誤,例如網絡問題或不正確的身份驗證憑證。 Twitter API提供的錯誤消息可以幫助您診斷和解決這些問題。處理代碼中的這些錯誤很重要,以確保您的應用程序繼續順利運行。
>
>我如何自定義在VR?
以上是用三個和節點在VR中可視化Twitter流的詳細內容。更多資訊請關注PHP中文網其他相關文章!