整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          Fate HF 光盤特典游戲《奔跑吧 Lancer》

          Fate HF 光盤特典游戲《奔跑吧 Lancer》推出在線體驗版

          Fate 系列中有個「自古槍兵幸運 E」的梗,第四次圣杯戰爭和第五次圣杯戰爭中的 Lancer 都比較悲催,型月官方也在玩這個幸運 E 的梗,比如在《幻想嘉年華》中第五次圣杯戰爭中登場的 Lancer 庫丘林就努力的想避開各種各樣的死法,而且還有一句「Lancer 又死了真沒人性」的名臺詞。而在 5 月 9 日發售的 Fate HF 劇場版第一章的光盤當中,包含特典游戲《Run、Run Lancer》(奔跑吧 Lancer),今天 Aniplex 提供了這款特典游戲的在線體驗版,玩家可以通過鍵盤上的方向鍵簡單操作 Lancer 來一場跑酷。

          <script src="https://lf6-cdn-tos.bytescm.com/obj/cdn-static-resource/tt_player/tt.player.js?v=20160723"></script>

          《奔跑吧 Lancer》這游戲的模式很簡單,是基于 Fate HF 第一章中 Lancer 追逐 Assassin 的劇情,變成了一個跑酷游戲玩家操作庫丘林追趕 Assassin 在路上可以吃綠色的光點集氣,滿條的話就可以發動一次加速,玩家必須要在規定時間內操作 Lancer 跑到終點。在路上還有各種各樣需要跳躍、下鏟、扔槍攻擊的障礙,游戲的操作并不能用鍵盤上的四個方向鍵就行,上下是跳躍與下鏟,左是加速,右是攻擊,遇到障礙物之前游戲會自動提示你之后要采取什么操作,還以顏色區分出標志,玩幾次就會熟悉看著提示的顏色就會自動選擇相應的操作。現在動畫光盤中是流行附贈特典游戲,《為美好的世界獻上祝福》兩季光盤都附送特典游戲,《擅長捉弄人的高木同學》首卷 BD 附送戀愛模擬游戲,這次的 Fate HF 附送跑酷游戲,以后是不是來個買特典游戲送動畫光盤的商業手法。

          游戲地址http://app.aniplex.co.jp/fatehf/game.html

          競爭對手僅憑舊款處理器和3款新發布的35W移動處理器“作戰”時,基于7nm和Zen 3架構的AMD銳龍5000系列移動處理器顯然有著莫大的優勢,所以今年游戲本廠商紛紛第一時間推出了眾多搭載AMD銳龍5000系列移動處理器的新品。比如Acer就在CES 2021展會上推出了一款銳龍游戲本——Acer暗影騎士·龍。Acer暗影騎士系列產品主打主流市場,那么在全新銳龍處理器的加持下,Acer暗影騎士·龍的表現如何呢?

          • 產品參數
          • 操作系統:Windows 10家庭中文版(64位)
          • 顯示屏:15.6英寸IPS屏(1920×1080、144Hz)
          • 處理器:AMD銳龍7 5800H(8核16線程,3.2GHz~4.4GHz)
          • 內存:海力士16GB DDR4 3200雙通道(8GB×2)
          • 硬盤:西數SN530 512GB NVMe SSD
          • GPU:NVIDIA GeForce RTX 3060 Laptop GPU(6GB GDDR6,最高85W)
          • 電池:57Wh
          • 尺寸:363.4mm(長)×255mm(寬)×23.9mm(厚)
          • 重量:2.2kg(不含電源)
          • 參考售價:7499元

          龍紋競技外觀

          作為Acer暗影騎士家族中的新成員,暗影騎士·龍的整體設計風格延續了家族血脈,雖然機身外殼沒有采用金屬材質,但高強度的復合塑料材質再加上“星芒黑”的機身配色同樣讓其擁有不錯的手感和質感。暗影騎士·龍的A面設計獨特,邊角輔以多邊形造型,A面中間的Logo雙側則配以雷紋線條,看上去就像是龍的兩根觸須,戰力十足。稍顯遺憾的是,A面的Logo和雙側的雷紋線條都不支持任何燈效,如果加入燈效的話,相信會進一步提升這臺機器的外在吸引力。

          另外,暗影騎士·龍的尾翼(散熱孔)不僅采用了夸張的造型,還單獨加入了一小塊紅色的背板,和整機的“星芒黑”配色形成鮮明對比,這種多現于游戲本上的經典紅黑配色帶來了強烈的競技風格,符合暗影騎士·龍本身的定位。

          掀開頂蓋,可以看到暗影騎士·龍的B面采用了一塊15.6英寸1080p分辨率的IPS霧面屏,這塊屏幕沒有采用窄邊框設計,不過屏幕左右兩側以及上下邊框處加入了防震橡膠墊,能夠防止在搬運過程中損壞屏幕。

          暗影騎士·龍擁有出色的屏幕素質,首先這塊屏幕的供應商是LG Display,其次屏幕的灰階響應時間低至3ms,同時還擁有高色域,能夠帶來出色的顯示效果和色彩表現。我們通過Datacolor Spyder5 Pro進行實測,其屏幕的sRGB色域覆蓋面積為98%,AdobeRGB色域覆蓋面積為74%,DCI-P3色域覆蓋面積為74%。也就是說無論玩游戲還是看電影、做設計,這臺機器的屏幕都能較好地滿足要求。暗影騎士·龍的屏幕還擁有144Hz高刷新率,對于FPS競技類游戲來說,144Hz高刷新率屏幕可以讓游戲畫面更流暢和平滑,玩家能更加精確地瞄準目標,同時也能避免出現畫面撕裂、卡頓、操作延遲等現象。

          四區域RGB背光鍵盤

          暗影騎士·龍配備全尺寸鍵帽的鍵盤,按鍵手感較軟,游戲、打字等操作比較舒適。同時,這臺機器的鍵盤還支持四個區域的RGB背光,玩家可以通過內置軟件自行調整鍵盤的背光,Acer也在控制軟件中內置了“呼吸”“波形”“縮放”“切換”“霓虹”等燈效。

          作為一臺游戲本,暗影騎士·龍的鍵盤也針對游戲玩家做了不少優化,比如在15.6英寸的機身中保留了數字小鍵盤,鍵盤右下方的方向鍵也采用的是全尺寸鍵帽設計,空格鍵也做了加寬處理,讓玩家使用起來更加方便。

          接口方面,暗影騎士·龍的電源接口設計在機身背部(自帶180W電源適配器),避免了電源線和其他外接線纜的纏繞。其他的主要外接接口則設計在機身左右兩側,這臺機器的左側配備一個安全鎖、一個RJ-45網線接口、兩個USB 3.2 Gen2 Type-A接口、一個3.5mm音頻接口;右側則配備一個HDMI接口、一個USB 3.2 Gen2 Type-A接口以及一個USB-C接口,這樣的接口配置能夠滿足大多數玩家的使用需求。

          搭載AMD銳龍7 5800H處理器

          我們測試的這臺機器搭載最新的AMD銳龍7 5800H處理器,作為AMD銳龍5000系列移動處理器家族中的“明星”成員,AMD銳龍7 5800H基于7nm生產工藝,處理器架構升級為最新的Zen 3,擁有8核心16線程,基礎頻率提升到3.2GHz,最大加速頻率可達4.4GHz,最大緩存為16MB,默認TDP為45W,標稱最大功耗可達54W,同時內置AMD Radeon Graphics顯卡。

          與AMD銳龍7 5800H處理器搭配的還有海力士16GB DDR4 3200MHz雙通道內存、西數SN530 512GB NVMe SSD以及NVIDIA GeForce RTX 3060 Laptop GPU。16GB雙通道高頻內存擁有良好的帶寬,能夠為整機強悍的性能助力,而西數SN530 512GB NVMe SSD不僅擁有較大的容量,可滿足玩家的儲存要求,還擁有出色的讀寫速度——在AS SSD Benchmark測試中(1GB測試數據)連續寫入速度達到1749.99MB/s,連續讀取速度達到2251.85MB/s,總分得到3144分。

          對于RTX 3060 Laptop GPU,則更不用多說,其采用NVIDIA Ampere架構,擁有3840個CUDA核心,支持光線追蹤和DLSS。暗影騎士·龍搭載的RTX 3060 Laptop GPU采用6GB GDDR6顯存(三星顆粒),最高功耗為85W,通過GPU-Z軟件可以看到其默認頻率為900MHz,Boost頻率為1425MHz。

          值得一提的是,拆開機器后蓋后我們發現暗影騎士·龍還擁有強悍的擴展能力。這臺機器內部采用雙風扇、三熱管設計,主板上預留了雙內存擴展插槽、雙M.2擴展插槽以及一個2.5英寸硬盤位。也就是說,玩家不僅能夠擴展內存,還能對硬盤擴容,最高可同時安裝三塊硬盤,帶來充足的存儲空間。

          性能實測

          在甜點級的硬件配置下,暗影騎士·龍的實際性能如何呢?我們在控制中心軟件中將機器風扇速度設置為最大,然后通過一系列測試軟件和游戲來一探究竟。

          首先在處理器渲染性能測試軟件CINEBENCH R20中,暗影騎士·龍得到單線程551pts、多線程4653pts的成績。和同為8核心16線程的酷睿i7-10875H處理器相比,暗影騎士·龍搭載的銳龍7 5800H處理器在CINEBENCH R20的單線程測試中依然領先大約17%,多線程方面則領先大約35%。

          除了CINEBENCH R20,我們也用Blender做了處理器實際渲染應用測試。在Blender 2.80的BMW27測試場景中,暗影騎士·龍完成渲染任務僅耗時201秒,而搭載酷睿i7-10870H處理器的機型需要291秒,搭載酷睿i7-11375H處理器的機型則需要331秒。

          可見在7nm生產工藝和Zen 3處理器架構的加持下,AMD銳龍7 5800H處理器確實擁有強悍的單核和多核性能,甚至遠超競爭對手的同類產品。實際上強悍的處理器性能不僅能大幅提升游戲本整機綜合性能,對于提高游戲fps也大有裨益。

          Acer暗影騎士·龍的圖形性能如何呢?首先從3DMark軟件的測試成績來看,這臺機器在最大速度的風扇轉速下,其搭載的RTX 3060 Laptop GPU(85W)遠超RTX 2060移動版顯卡,略超RTX 2070 Max-Q顯卡。比如在基于1080p分辨率的Fire Strike場景中,這臺機器得到18940的顯卡分數,領先RTX 2060移動版大約13%,與130W的RTX 3060 Laptop GPU相比也僅有大約14%的差距。在基于DX12的3DMark Time Spy測試場景中,這臺機器得到分7561的顯卡分數,領先RTX 2060移動版顯卡大約29%。

          憑借著出色的圖形表現,暗影騎士·龍能夠在1080p分辨率下以游戲預設的“最高畫質”暢玩目前熱門的游戲,而且游戲平均幀率能輕松保持在60fps及以上。比如在《古墓麗影:暗影》1080p、“最高畫質”(RT關,DLSS關)中,這臺機器取得平均90fps的成績,;在《無主之地3》1080p、“惡棍畫質”中也取得61.85fps的平均幀率。對于目前火熱的《賽博朋克2077》,在1080p分辨率和游戲預設的“光線追蹤:超級”設置下,暗影騎士·龍取得平均45.94fps的成績,游戲畫面基本流暢,而將游戲畫質調整為“高畫質”并開啟“DLSS自動”后,RTX 30系Laptop GPU展現了DLSS技術的強大,游戲平均幀率提升到72.59fps(同畫質下關閉DLSS后平均成績為63.53fps),此時游戲畫面十分流暢。

          散熱測試

          Acer暗影騎士·龍采用雙風扇、三銅管、四出風口設計,并配備CoolBoost風扇增壓系統,可提升風扇轉速,那么它在高負載下的散熱表現如何呢?在24.2℃環境,我們通過AIDA64和Furmark軟件對這臺機器進行處理器和GPU雙烤測試。

          烤機30分鐘以后通過FLIR紅外熱成像儀觀察到這臺機器正面最高溫度為54.4℃,位于C面鍵盤中央的頂部區域,在熱成像圖上我們能夠明顯看到鍵盤左右兩側的兩個風扇低溫區域,鍵盤WASD區域和數字小鍵盤區域的溫度保持在31℃~33.9℃左右,十分清涼。鍵盤其他大部分區域的溫度保持在40℃左右,僅右下側位置的溫度略高,同時腕托位置的溫度保持在29℃左右,因為C面外殼采用的是塑料材質,所以在高負載下C面大部分區域摸上去沒有過熱的感覺。

          總結

          Acer暗影騎士·龍擁有充滿電競氣息的外觀設計,鍵盤支持四區域的RGB背光,并針對游戲玩家做了一系列優化。屏幕也是這臺機器的一大亮點,144Hz高刷新率和98% sRGB高色域能夠滿足多數玩家對屏幕素質的要求。另外,Acer暗影騎士·龍還擁有包括AMD銳龍7 5800H處理器、RTX 3060 Laptop GPU、16GB雙通道內存和512GB SSD等核心硬件,性能強悍,可輕松應對熱門3A游戲。別忘了它還支持擴展硬盤和內存。Acer暗影騎士·龍的價格近期低至7499元(關鍵是現貨!),確實是一臺性價比頗高的高性能游戲本。購買鏈接:https://item.jd.com/100010286615.html#crumb-wrap 如果大家近期想入手Acer暗影騎士·龍,可通過以上鏈接查看購買。

          . 案例預覽


          此案例實現了人物跟隨著移動操作桿進行移動并執行跑步動作,右邊的攻擊按鈕可以實現攻擊,短時間內連按可以實現不同的攻擊動作。

          在線查看:https://jxtreehouse.github.io/three.js-lessions/%E6%95%99%E7%A8%8B/examples/12_game_operation.html

          源碼倉庫: https://github.com/JXtreehouse/three.js-lessions/blob/gh-pages/%E6%95%99%E7%A8%8B/examples/12_game_operation.html

          2. 場景的搭建

          首先,我們需要把舞臺搭建出來,先創建scene場景:

          2.1 創建scene

          我們創建了場景,并設置了場景一個灰色的背景色。還設置了場景的霧化效果,這個霧的效果主要是針對于場景的相機的距離實現的,三個值分別是霧的顏色、霧的開始距離、完全霧化距離相機的位置。

          2.2 創建camera

          我們創建了一個與地面呈45度角并朝向原點的相機:

          2.3 創建燈光

          我們創建了兩個燈光:

          • 照射全局的環境光 THREE.AmbientLight
          • 可以產生陰影的平衡光 THREE.DirectionalLight

          2.4 創建草地

          我們使用平面幾何體創建了一個貼有草皮貼圖的材質的模型:

          到這里,場景、燈光、相機、舞臺都已經備齊。接下來我們將請出我們主角naruto登場。

          3 人物模型和動畫

          3.1 添加人物模型

          首先我們將模型導入到場景內,注意,案例中的模型比較大,加載和處理需要一定的時間,請小伙伴們耐心等待即可(實際案例里面可以加個loading動畫):

          var loader=new THREE.FBXLoader();
                  loader.load("../js/models/fbx/Naruto.fbx", function (mesh) {
                      scene.add(mesh);
                  });

          我們不單單只是將模型添加到場景,還對模型的陰影和位置做了一下調整:

          調整模型的位置,站立在草地上面

          設置燈光一直照射模型:


          3.2 添加動畫

          這個模型里面含有27個骨骼動畫,我們可以通過設置不同的動畫,來實現一整套的動作來實現相應的比如攻擊效果,移動效果等。接下來我們通過模型的數據生成一下所需的動畫:

          模型加載成功后,我們需要讓模型執行一個普通的站立效果:

          3.3 添加操作

          我們主要添加了兩種操作:模型位置移動操作和攻擊效果。

          操作按鈕為了方便,直接使用的dom標簽模擬出來的。 模型位置移動操作中,我們需要模型的位置的變動和模型的朝向以及修改站立動畫和奔跑動畫的切換。 攻擊效果則是實現攻擊并且根據點擊速度實現一整套的攻擊動作切換。

          3.3.1實現位置移動效果

          在實現位置移動效果中,我們為按鈕綁定了三個事件:鼠標按下,鼠標移動,鼠標抬起。 在鼠標按下時,我們獲取到了當前操作圓盤的中心點的位置,讓模型進入跑步動畫,綁定了鼠標的移動和抬起事件。重要的是更新模型的移動方向和移動速度。


          上面的dop類是封裝的一個兼容多端的事件庫,github地址: https://github.com/johnson2heng/dop 在鼠標移動回調事件中,我們更新模型的移動方向和移動速度。

          function move(event) {
              getRadian(event);
          }
          

          最后在鼠標抬起事件中,我們解綁事件,將按鍵復原,并停止掉模型的移動狀態,將模型動畫恢復到站立狀態。

          function up() {
              doc.remove("move", move);
              doc.remove("up", up);
          
              //按鈕復原
              bar.style.marginTop=0;
              barWrap.style.transform=`translate(-50%, -50%) rotate(0deg)`;
              bar.style.transform=`translate(-50%, -50%) rotate(0deg)`;
          
              //設置移動距離為零
              characterMove(new THREE.Vector2(), 0);
          
              //鼠標抬起切換站立狀態
              state.skills===0 && gui["action" + 24]();
          }
          
          

          三個事件綁定完成后,我們需要將在回調中獲得的值求出當前的偏轉方向和移動速度: 首先我們獲取一下當前鼠標的位置:

          if (media==="pc") {
              mouse.x=event.clientX;
              mouse.y=event.clientY;
          }
          else {
              mouse.x=event.touches[0].clientX;
              mouse.y=event.touches[0].clientY;
          }
          
          

          根據位置求出距離操作圓盤中心的位置,并保證最大值也不會超出圓盤的半徑:

          let distance=center.distanceTo(mouse);
          distance >=parseFloat(dop.getFinalStyle(control, "width")) / 2 && (distance=parseFloat(dop.getFinalStyle(control, "width")) / 2);
          
          

          計算出來當前位置和中心的夾角,并修改dom的位置:

          
          //計算兩點之間的夾角
          mouse.x=mouse.x - center.x;
          mouse.y=mouse.y - center.y;
          
          //修改操作桿的css樣式
          bar.style.marginTop=`-${distance}px`;
          bar.style.transform=`translate(-50%, -50%) rotate(-${(mouse.angle() / Math.PI * 180 + 90) % 360}deg)`;
          barWrap.style.transform=`translate(-50%, -50%) rotate(${(mouse.angle() / Math.PI * 180 + 90) % 360}deg)`;
          
          

          函數的最后,則調用的characterMove方法,將按鈕數據轉換成為模型實際需要移動的距離。

          //修改當前的移動方向和移動速度
          characterMove(mouse.normalize(), distance / (parseFloat(dop.getFinalStyle(control, "width")) / 2));
          

          接下來我們查看一下characterMove方法,在這個方法中,我們計算出了模型每一幀需要移動的距離。這里有一個問題,我們所謂的操作桿向前讓模型移動前方,其實是相機朝向的前方。所以我們需要先求出相機的前方矢量,再通過相機的前方矢量為基礎,計算出來模型實際方向。 我們首先聲明了兩個變量,一個是旋轉矩陣,另一個是移動矢量:

          let direction=new THREE.Matrix4(); //當前移動的旋轉矩陣
          let move=new THREE.Vector3(); //當前位置移動的距離
          

          在characterMove函數內,我們根據相機的四元數獲得了旋轉矩陣:

          /重置矩陣
          direction.identity();
          
          //通過相機的四元數獲取到相機的旋轉矩陣
          let quaternion=camera.quaternion;
          direction.makeRotationFromQuaternion(quaternion);
          

          然后通過旋轉矩陣和當前的操作桿的方向通過相乘計算出來實際模型移動的方向:

          
          //獲取到操作桿的移動方向
          move.x=vector.x;
          move.y=0;
          move.z=vector.y;
          
          //通過相機方向和操作桿獲得最終角色的移動方向
          move.applyMatrix4(direction);
          move.normalize();
          

          最后,通過比例和方向得出當前模型每一幀移動的距離,因為我們不需要修改模型y軸,所以實際上也只是修改兩個軸的位置:

          move.x=move.x * ratio * 10;
          move.z=move.z * ratio * 10;
          

          我們獲取到了模型的每一幀移動的距離,還需要在幀循環中調用:

          //如果模型添加成功,則每幀都移動角色位置
          if (naruto) {
              //獲取當前位置
              position.x +=move.x;
              position.z +=move.z;
          
              //修改模型位置
              naruto.position.x=position.x;
              naruto.position.z=position.z;
          
              //修改平衡光的位置
              light.position.x=position.x;
              light.position.z=position.z + 100;
          
              //修改相機位置
              camera.position.x=position.x;
              camera.position.z=position.z - 800;
          }
          


          當前的模型,燈光,和相機都會跟隨移動,實現了,我們上面動圖中的模型移動的效果。

          3.3.2 實現攻擊效果

          在實現攻擊效果時,我沒有只是簡單的實現一個普通的攻擊,而是直接實現一套連招。 這一套連招是通過五個動作組成,在執行一個攻擊動畫時如果再次點擊了攻擊按鈕,執行完這個攻擊動畫將不會切換到站立動畫,而是直接切換到連招的下一個攻擊動畫中。 只要連續點按攻擊按鈕,模型將完成一整套的動作。實現這個效果,我們只是使用了一個簡單的定時器即可實現,接下來我們通過代碼了解一下實現過程。

          在實現動畫前,先設置一個連招的數組,將需要的動作添加到數組當中。我這里添加了五個手部攻擊的效果:

          let attackList=[12, 13, 14, 15, 16]; //連招的循序
          let attackCombo=false; //是否連招,接下一個攻擊
          

          我們還設置了attackCombo設置當前是否可以連招的變量,這個變量state.skills值不為0時,將變為true。定時器每一次更新的時候,將判斷attackCombo是否為true,在為true的狀態下,將執行連招的下一個動作。否則,將停止連招。

          //attackIndex 等于0,當前不處于攻擊狀態  不等于,當前處于攻擊狀態
          if(state.skills===0){
              state.skills++;
              gui["action" + attackList[state.skills-1]]();
              attackInterval=setInterval(function () {
                  if(attackCombo){
                      //如果設置了連招,上一個攻擊動作完成后,進行下一個攻擊動作
                      state.skills++;
                      //如果整套攻擊動作已經執行完成,則清除定時器
                      if(state.skills-1 >=attackList.length){
                          closeAttack();
                          return;
                      }
          
                      //進行下一個動作
                      gui["action" + attackList[state.skills-1]]();
          
                      attackCombo=false;
                  }
                  else{
                      closeAttack();
                  }
              }, naruto.animations[attackList[state.skills-1]].duration*1000);
          }
          else{
              attackCombo=true;
          }
          
          

          在關閉掉攻擊動畫的函數內,我們首先將state.skills設置為0,然后恢復到移動或者站立動畫,最后清除掉定時器:


          //關閉攻擊狀態
          function closeAttack() {
              state.skills=0;
              //根據狀態設置是移動狀態還是站立狀態
              state.move ? gui["action" + 3]() :gui["action" + 24](); //回到站立狀態
              clearInterval(attackInterval);
          }
          
          

          通過很簡單的一些代碼,我們就實現了一個復雜的連招效果。是不是很有成就感,這就是在最前面看到的那個操作gif的效果的案例

          插件

          • OrbitControls.js: 允許我們使用鼠標或觸摸屏瀏覽操作3D場景

          API詳解

          Scene.fog

          開發Web3D應用有時候需要實現一個霧化的效果,簡單說就是場景中越遠的位置看起來越模糊,Three.js引擎提供了兩個霧Fog和指數霧FogExp2兩個類。

          Three.js場景對象Scene具有一個霧化屬性.fog,該屬性的屬性值是霧對象Fog或指數霧對象FogExp2。如果你想模擬一個霧化效果只需要在threejs代碼中設置場景對象的.fog屬性就可以。

          Fog類定義的是線性霧,霧的密度是隨著距離線性增大的,即場景中物體霧化效果隨著隨距離線性變化。

          構造函數霧Fog(color,near,far)的三個參數分別對應霧對象Fog的三個屬性.color、.near和.far。

          .color屬性表示霧的顏色,比如設置為紅色,場景中遠處物體為黑色,場景中最近處距離物體是自身顏色,最遠和最近之間的物體顏色是物體本身顏色和霧顏色的混合效果。

          // 改變霧的顏色為白色
          scene.fog.color.set(0xffffff)
          

          .near屬性值表示應用霧化效果的最小距離,距離活動攝像機長度小于.near的物體將不會被霧所影響

          .far屬性值表示應用霧化效果的最大距離,距離活動攝像機長度大于.far的物體將不會被霧所影響

          PerspectiveCamera(透視相機)

          透視投影照相機(Perspective Camera)的構造函數是:

          THREE.PerspectiveCamera(fov, aspect, near, far)
          

          透視圖中,灰色的部分是視景體,是可能被渲染的物體所在的區域。fov是視景體豎直方向上的張角(是角度制而非弧度制),如側視圖所示。

          aspect等于width / height,是照相機水平方向和豎直方向長度的比值,通常設為Canvas的橫縱比例。

          near和far分別是照相機到視景體最近、最遠的距離,均為正值,且far應大于near。

          AmbientLight

          環境光是指場景整體的光照效果,是由于場景內若干光源的多次反射形成的亮度一致的效果,通常用來為整個場景指定一個基礎亮度。因此,環境光沒有明確的光源位置,在各處形成的亮度也是一致的。

          在設置環境光時,只需要指定光的顏色:

          THREE.AmbientLight(hex)
          
          

          其中,hex是十六進制的RGB顏色信息,如紅色表示為0xff0000。

          創建環境光并將其添加到場景中的完整做法是:

          var light=new THREE.AmbientLight(0xffffff);
          scene.add(light);
          

          如果此時場景中沒有物體,只添加了這個環境光,那么渲染的結果仍然是一片黑

          環境光通常使用白色或者灰色,作為整體光照的基礎。

          ##TextureLoader

          通過紋理貼圖加載器TextureLoader的load()方法加載一張圖片可以返回一個紋理對象Texture,紋理對象Texture可以作為模型材質顏色貼圖.map屬性的值。

          材質的顏色貼圖屬性.map設置后,模型會從紋理貼圖上采集像素值,這時候一般來說不需要在設置材質顏色.color。.map貼圖之所以稱之為顏色貼圖就是因為網格模型會獲得顏色貼圖的顏色值RGB。

          THREE.FBXLoader()

          three.js有官方的fbx插件,可以直接將模型加載至網頁,并且支持動畫數據,代碼量也是最少的。 但是,該格式存在很大弊端:插件對文件格式的規范很嚴格,換言之,插件支持性不太好。從網上下載的fbx動畫,十有八九會加載失敗。

          首先需要引入FBXLoader.js插件,如果報錯 “Error: THREE.FBXLoader: External library Inflate.min.js required, obtain or import from https://github.com/imaya/zlib.js”,則還需引入inflate.min.js文件。

          我們可以看一個簡單案例

          https://wow.techbrood.com/fiddle/55419

          參考

          The Making of “The Aviator”: Animating a Basic 3D Scene with Three.js : 使用three.js設計游戲的學習心得與知識分享

          Three.js Making a Game

          16 Three.js 游戲操作案例

          Joystick, gamepad or 3D mouse support in Three.js

          yoannmoinet/nipplejs

          https://css-tricks.com/how-to-make-a-smartphone-controlled-3d-web-game/

          ADDING SUPPORT FOR VR INPUTS WITH WEBXR AND THREE.JS


          主站蜘蛛池模板: 一区二区手机视频| 蜜桃臀无码内射一区二区三区| 亚洲日本va午夜中文字幕一区| 在线视频一区二区三区| 中文字幕人妻第一区| 国产精品亚洲一区二区无码| 国产一区二区不卡在线播放| 久久青草精品一区二区三区| 亚洲高清一区二区三区| 国产成人av一区二区三区不卡| 一区二区三区福利| 中文字幕一区二区三区久久网站| 国产未成女一区二区三区| 国产精品 一区 在线| 91一区二区三区四区五区| 精品人妻一区二区三区四区在线| 人妻少妇一区二区三区| 国产乱码一区二区三区| 精品成人一区二区三区四区| 99精品一区二区免费视频| 国产精品无码一区二区三区免费| 精品无码人妻一区二区三区不卡| 精品无码人妻一区二区三区| 精品国产精品久久一区免费式| 国产一区二区三区精品视频| 骚片AV蜜桃精品一区| 免费无码一区二区| 亚洲福利一区二区| 午夜无码一区二区三区在线观看| 无码欧精品亚洲日韩一区| 国产第一区二区三区在线观看| 国产婷婷色一区二区三区| 日韩一区二区三区在线| 久久久久成人精品一区二区| 国产福利一区视频| 国产午夜精品片一区二区三区| 国产精品区AV一区二区| 久久精品日韩一区国产二区| 风间由美性色一区二区三区| 视频一区二区精品的福利| 无码人妻精品一区二区蜜桃网站|