最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

Three.js 進階之旅:純代碼實現(xiàn)3D小兔子游戲-Rabbit craft go

2023-05-22 18:45 作者:unlexx  | 我要投稿

聲明:本文涉及圖文和模型素材僅用于個人學(xué)習(xí)、研究和欣賞,請勿二次修改、非法傳播、轉(zhuǎn)載、出版、商用、及進行其他獲利行為。

摘要

本文內(nèi)容作為兔年新春紀(jì)念頁面,將使用?Three.js?及 其他前端開發(fā)知識,創(chuàng)建一個以兔子為主題的?3D?簡單的趣味頁面?Rabbit craft go。本文內(nèi)容包括使用純代碼創(chuàng)建三維浮島、小河、樹木、兔子、胡蘿卜以及兔子的運動交互、浮島的動畫效果等。本文包含的知識點相對比較簡單,主要包括 使用?Three.js?網(wǎng)格立方體搭建三維卡通場景、鍵盤事件的監(jiān)聽與三維場景動畫的結(jié)合等,如果仔細閱讀并實踐過本專欄《Three.js 進階之旅》的話,非常容易掌握。

???兔子造型來源于?Three.js開源論壇,頁面整體造型靈感來源于《我的世界》,頁面名稱靈感來源于游戲《Lara Craft Go》。

效果

我們先來看看實現(xiàn)效果,頁面加載完成后是一個游戲操作提示界面,可以通過鍵盤???空格鍵?及?W、?A、?S、?D?或方向鍵操作小兔子運動。點擊開始按鈕后,游戲提示界面消失,可以看到倒三角造型的天空浮島及浮島上方的樹木???、河流??、橋???、胡蘿卜???、兔子????等元素,接著攝像機鏡頭????自動拉近并聚焦到兔子上。

按照操作提示界面的按鍵,可以操作兔子進行前進、轉(zhuǎn)向、跳躍等運動,當(dāng)兔子的運動位置觸碰到胡蘿卜時,胡蘿卜會消失同時兔子會進行跳躍運動。當(dāng)兔子運動到小河或者超出浮島范圍時,兔子則會墜落到下方。

打開以下鏈接,在線預(yù)覽效果,大屏訪問效果更佳。

  • ??????在線預(yù)覽地址:https://dragonir.github.io/rabbit-craft-go

本專欄系列代碼托管在?Github?倉庫【threejs-odessey】,后續(xù)所有目錄也都將在此倉庫中更新

???代碼倉庫地址:git@github.com:dragonir/threejs-odessey.git

實現(xiàn)

文章篇幅有限,因此刪減了三維模型的位置信息等細節(jié)調(diào)整代碼,只提供構(gòu)建三維模型的整體思路邏輯,想了解該部分內(nèi)容的詳細介紹可以閱讀本專欄前幾篇文章及閱讀本文配套源碼?,F(xiàn)在,我們來看看整個頁面的實現(xiàn)詳細步驟:

頁面結(jié)構(gòu)

Rabbit Craft Go?頁面的整體結(jié)構(gòu)如下,其中?canvas.webgl?是用于渲染場景的容器、剩余標(biāo)簽都是一些裝飾元素或提示語。

場景初始化

場景初始化過程中,我們引入必需的開發(fā)資源,并初始化渲染場景、相機、控制器、光照、頁面縮放適配等。其中外部資源的引入,其中?OrbitControls?用于頁面鏡頭縮放及移動控制;TWEEN?和?Animations?用于生成鏡頭補間動畫,也就是剛開始時浮島由遠及近的鏡頭切換動畫中效果;Island、CarrotRabbit、Waterfall?等是用來構(gòu)建三維世界的類。為了使場景更加卡通化,使用了?THREE.sRGBEncoding?渲染效果。場景中添加了兩種光源,其中?THREE.DirectionalLight?用來生成陰影效果。

創(chuàng)建浮島

如以下????兩幅圖所示,整個浮島造型是一個四棱椎,整體分為四部分,頂部是由地面和河流構(gòu)成的四方體、底部三塊是倒置的三角。生成這些三維模型的其實也并沒有多少技巧,就像搭積木一樣使用?Three.js?提供的立方體網(wǎng)格通過計算拼接到一起即可。類?Island?包含一個方法?generate?用于創(chuàng)建上述三維模型,并將所創(chuàng)建模型添加到三維分組?floorMesh?中用于外部調(diào)用,其中棱柱部分是通過?CylinderBufferGeometry?來實現(xiàn)的。

浮島俯視圖是一個正方形。

浮島側(cè)視圖是一個倒三角形。

創(chuàng)建水流

接下來,我們?yōu)楹恿魈砑右粋€小瀑布,使場景動起來。流動的瀑布三維水滴????滴落效果的是通過創(chuàng)建多個限定范圍內(nèi)隨機位置的?THREE.BoxBufferGeometry?來實現(xiàn)水滴模型,然后通過水滴的顯示隱藏動畫實現(xiàn)視覺上的水滴墜落效果。Waterfall?類用于創(chuàng)建單個水滴,它為水滴初始化隨機位置和速度,并提供一個?update?方法用來更新它們。

完成水滴創(chuàng)建后,不要忘了需要在頁面重繪動畫?tick?方法中像這樣更新已創(chuàng)建的水滴數(shù)組?drops,使其看起來生成向下流動墜落的效果。

創(chuàng)建橋

在河流上方添加一個小木橋???,這樣小兔子就可以通過木橋在小河兩邊移動了。 類?Bridge?通過?generate?方法創(chuàng)建一個小木橋,并通過三維模型組?bridgeMesh?將其導(dǎo)出,我們可以在上面創(chuàng)建的?Island?類中使用它,將其添加到三維場景中。

創(chuàng)建樹

從預(yù)覽動圖和頁面可以看到,浮島上共有兩種樹???,綠色的高樹和粉紅色的矮樹,樹的實現(xiàn)也非常簡單,是使用了兩個?BoxBufferGeometry?拼接到一起。類?Tree?和?LeafTree?分別用于生成這兩種樹木,接收參數(shù)?(x, y, z)?分別表示樹木在場景中的位置信息。我們可以在?Island?輔導(dǎo)上添加一些樹木,構(gòu)成浮島上的一片小森林。

矮樹

創(chuàng)建胡蘿卜

接著,在地面上添加一些胡蘿卜???。胡蘿卜身體部分是通過四棱柱?CylinderBufferGeometry?實現(xiàn)的,然后通過?BoxBufferGeometry?立方體來實現(xiàn)胡蘿卜的兩片葉子。場景中可以通過?Carrot?類來添加胡蘿卜,本頁面示例中是通過循環(huán)調(diào)用添加了?20?個隨機位置的胡蘿卜。

創(chuàng)建兔子

最后,來創(chuàng)建頁面的主角兔子???。兔子全部都是由立方體?BoxBufferGeometry?搭建而成的,整體可以分解為頭、眼睛、耳朵、鼻子、嘴、胡須、身體、尾巴、四肢等構(gòu)成,構(gòu)建兔子時的核心要素就是各個立方體位置和縮放比例的調(diào)整,需要具備一定的審美能力,當(dāng)然本例中使用的兔子是在?Three.js?社區(qū)開源代碼的基礎(chǔ)上改造的???。

完成兔子的整體外形之后,我們通過?gsap?給兔子添加一些運動動畫效果和方法以供外部調(diào)用,其中?blink()?方法用于眨眼、jump()?方法用于原地跳躍、nod()?方法用于點頭、run()?方法用于奔跑、fall()?方法用于邊界檢測時檢測到超出運動范圍時使兔子墜落效果等。完成?Rabbit?類后,我們就可以在場景中初始化小兔子。

將兔子添加到場景中。

添加動畫和操作

為了使兔子可以運動和可交互,我們通過監(jiān)聽鍵盤按鍵的方式來調(diào)用兔子類內(nèi)置的對應(yīng)動畫方法,兔子的方向轉(zhuǎn)動可以通過修改兔子的旋轉(zhuǎn)屬性?rotation?來實現(xiàn)。

為了使場景更加真實和趣味,我們可以添加一些邊界檢測方法,當(dāng)兔子位置處于非可運動區(qū)域如小河、浮島之外等區(qū)域時,可以調(diào)用兔子的?fall(),方法使其墜落。當(dāng)檢測到兔子的位置和胡蘿卜的位置重疊時,給兔子添加了一個?jump()?跳躍動作并使檢測到的這個胡蘿卜從場景中移除。

頁面裝飾

最后,我們來制作一個其實頁面,中間部分是鍵盤操作說明,底部是一些裝飾文案圖片,操作提示下方是一個開始按鈕,我們給這個按鈕添加一個通過?TWEEN.js?實現(xiàn)的鏡頭補間動畫效果,當(dāng)點擊按鈕時,頁面首先顯示的是倒置三角造型的浮島,然后鏡頭慢慢方法拉近,顯示出兔子運動的區(qū)域。本頁面為了使其看起來更加符合游戲主題,標(biāo)題文案使用了一種像素化的字體??。

???源碼地址:https://github.com/dragonir/threejs-odessey

總結(jié)

本文中主要包含的知識點包括:

  • 使用?Three.js?網(wǎng)格立方體搭建三維卡通場景

  • 鍵盤事件的監(jiān)聽與三維場景動畫的結(jié)合

想了解其他前端知識或其他未在本文中詳細描述的Web 3D開發(fā)技術(shù)相關(guān)知識,可閱讀我往期的文章。如果有疑問可以在評論中留言,如果覺得文章對你有幫助,不要忘了一鍵三連哦 ??

附錄

  • [1].??? Three.js 打造繽紛夏日3D夢中情島

  • [2].??? Three.js 實現(xiàn)炫酷的賽博朋克風(fēng)格3D數(shù)字地球大屏

  • [3].??? Three.js 實現(xiàn)2022冬奧主題3D趣味頁面,含冰墩墩

  • [4].??? Three.js 實現(xiàn)3D開放世界小游戲:阿貍的多元宇宙

  • [5].??? 1000粉!使用Three.js實現(xiàn)一個創(chuàng)意紀(jì)念頁面

  • 【Three.js 進階之旅】系列專欄訪問 ??

  • 更多往期【3D】專欄訪問 ??

  • 更多往期【前端】專欄訪問 ??

參考

  • [1].?three.js journey

  • [2].?threejs.org


Three.js 進階之旅:純代碼實現(xiàn)3D小兔子游戲-Rabbit craft go的評論 (共 條)

分享到微博請遵守國家法律
临武县| 鄄城县| 山西省| 仲巴县| 招远市| 宣化县| 天水市| 台中市| 宁波市| 兴城市| 额尔古纳市| 边坝县| 新竹市| 梅河口市| 海安县| 诸暨市| 黄冈市| 专栏| 乐昌市| 晋城| 酉阳| 崇义县| 武山县| 杭锦旗| 县级市| 辽源市| 雷山县| 蓬莱市| 昌邑市| 高雄县| 长岭县| 朝阳区| 清镇市| 彰武县| 介休市| 昂仁县| 长宁县| 息烽县| 湘潭市| 红原县| 嘉义市|