主頁 > 企業開發 > 👋 和我一起學【Three.js】「初級篇」:0. 總論

👋 和我一起學【Three.js】「初級篇」:0. 總論

2023-03-13 07:32:43 企業開發

「和我一起學 XXX」是我 2023 年的一個新企劃,目的是向讀者(也包括未來的自己)介紹我正在學習的某項新技術,文章會通過長期反復迭代的方式保持其內容的新鮮度,文章有較大內容更新時,會在文章開頭進行更新時間說明(由于時間精力有限,更新的內容只能保障少數幾個平臺的同步,請見諒),

1. 什么是 Three.js

Three.js 是一個基于 WebGL3D JavaScript 開源庫(遵循 MIT 協議),它使 JavaScript 開發者能夠更方便地在 Web 應用中創建 3D 場景

請注意該定義的如下部分:

  • 基于 WebGL:WebGL 是一種 3D 繪圖協議,對于開發者而言,它是一組更底層的繪圖 API,它負責繪制點,線與三角形,使用 WebGL 繪制復雜的 3D 場景,需要非常多的代碼;
  • 3D JavaScript 開源庫:Three.js 基于非常寬松的 MIT 協議,這意味著您可以自由使用,修改 Three.js 代碼創建商業應用;
  • 更方便地:就像 jQuery 基于 JavaScript 提供了更友好地 API 使開發者能夠輕松地操作 DOM 一樣,Three.js 也封裝出更友好地 API 供開發者繪制 3D 場景,相較于使用 WebGL,使用 Three.js 繪制 3D 場景需要的代碼量要少的多得多,
  • 3D 場景:它包含:
    • 3D 游戲;
    • 建筑設計和資料可視化看板;
    • AR,VR;
    • 虛擬展廳,虛擬商品展示;
    • 互動式展覽,培訓等;

您可以在 Three.js 官網發現豐富的案例,它們從不同方面展示了 Three.js 的魅力和強大!

2. (我)為什么要學習 Three.js?

在了解 Three.js 是什么后,若選擇繼續學習,想必您有自己的理由,對于我而言,學習 Three.js 的主要動機是「好玩」(Just for fun!),

我覺得能夠在顯示幕上渲染 3D 場景是件很酷的事情,特別是它還可以通過 VR 頭顯設備讓人們身臨其境體驗到一個由我創造的虛擬世界!

無論您學習的動機是否與我相同,都歡迎您和我一起持續探索 Web 3D 世界,我有信心帶您一起踏入 3D 世界的大門!

3. 需要學習哪些內容?

在 Three.js 的官方檔案中,您可以看到一個簡單的 Three.js 應用包含了哪些模塊:

threejs-structure.svg

您可以看到,圖中包含了「渲染器(Renderer)」,「場景(Scene)」,「攝影機(Camera)」,「網狀物(Mesh)」,「3D 物件(Object3D)」,「燈光(Light)」,「幾何體
(Geometry)」,「材質(Material)」和「紋理(Texture)」等元素,如果您從未接觸過 Web 3D 世界,您可能有點摸不著頭腦,

但是別擔心,通過閱讀本系列文章,您將能夠掌握絕對大多數內容,并了解它們之間的關系,在往后的篇幅中,我將一一介紹這些名詞并介紹它們對于構建 Web 3D 場景的意義所在,以及您應該如何正確地使用它們,通過完全掌握這些概念,您應該能夠自己實作任意簡單的 3D 場景,

我發現很多文章專注于介紹某種 3D 場景具體如何搭建,在本系列文章中,我不會這么做,我傾向于采用一種「自頂向下」的方法,讓您理解到 Web 3D 世界的每個構成要素,然后您便能通過自由組合這些要素,搭建任意您感興趣的 3D 場景,

因此接下來,本系列文章將會分為如下幾個部分向您介紹 Three.js 技術的基本元素:

?? 文章具體內容可能會根據實際情況有所增減,

3.1 搭建 Web 3D 場景

本章將介紹搭建 Web 3D 場景的必備要素(包含場景,物體與影片)和基本原理,通過本章的學習,您應該有能力開發出一個基本的 3D 場景,它類似于 Web 3D 世界的 Hello World,標志您正式踏入 Web 3D 世界,

3.2 掌握幾何體

本章將介紹 Three.js 提供的多個幾何體元素以及它們的特性,它們將是未來您構建的各類 3D 場景中的主角,

3.3 掌握攝影機

攝影機的種類和位置不僅決定了我們觀察 3D 世界的方式,也決定了物體的光影和色彩該如何被 GPU 渲染,本章我們將了解 Three.js 提供的攝影機種類以及如何操作它們,

3.4 掌握紋理

本章將介紹「紋理」這個概念,您可以將他理解為「貼圖」,通過恰當地使用紋理,您可以讓您的幾何體成為具象的現實物體,

3.5 掌握材質

本章將介紹「材質」,即討論物體的每個可見像素應該被如何著色的問題,通過掌握物體材質的設定方法,您的 3D 物體將會配合光影產生更加逼真的效果,

?? 3.6 掌握光照(暫定)

通過掌握「紋理」和「材質」,您能將您抽象的幾何體具象化為具體的,我們所熟悉的物件,但是要讓這些物件更加符合人的認知,更加「真實」和「立體」,實際上需要模擬現實的光斬訓境以及物體對光線的反應,這是本章將要討論的主題,

?? 本章內容將根據其他已發布文章的閱讀情況決定是否更新,當前不保證出現在系列中,

?? 3.7 掌握陰影(暫定)

物體對光照的反應表現為物體的「陰影」和「投影」,Three.js 提供了簡單但并不完美的方法讓開發者能夠讓物體的陰影和投影盡可能貼近現實,本章中我們將深入了解其中的內容,

?? 本章內容將根據其他已發布文章的閱讀情況決定是否更新,當前不保證出現在系列中,


以上,是「和我一起學【Three.js】『初級篇』」這一企劃中計劃包含的內容,除后續兩章外,除非我有更有意思的內容想要發表,我會盡量維持一周一篇的更新頻率,希望得到各位讀者的監督和關注,

您可能會好奇標題中「初級篇」的含義,沒錯,無論是對于 Web 3D 世界還是 Three.js 而言,掌握初級篇的內容僅僅算是入門,如果您選擇繼續探索,前方還為您保留了更廣闊的天地,例如:

  • 粒子效果;
  • 著色器;
  • 性能優化;
  • React Three Fiber;
  • ...

不過這些都是后話了,萬丈高樓平地起,請先跟隨我一同完成本階段的學習吧,這將是一段漫長的旅程,希望您旅途愉快 ??,

4. 如何學習?

想要通過本系列文章入門 Three.js 技術,您需要確保您熟悉 JavaScript 語言,并能夠理解例如 Babel,Vite,Webpack 之類的打包工具如何使用,

文章會包含「基礎概念講解」和「代碼示例」兩個部分,希望您不僅閱讀文章,還能夠積極地動手實踐,

我十分鼓勵您通過各類平臺展示您的學習成果,分享您的學習經驗,如果本系列文章為您提供了切實的幫助,我也希望您愿意積極附上文章鏈接,讓更多的人受益,

5. 如何檢驗學習成果?

如何檢驗您是否真正入門 Three.js 呢?通過閱讀完本系列文章,您應該能夠獨立搭建一個如下的 3D 場景(這個例子參考了 Bruno Simon 在 three.js journey 課堂中的一個示例,因為我覺得它能夠讓您充分利用之前所學

?? 注意:未來該案例有可能會被替換,

FinalCase.gif

6. ?? 思考題

  1. 您為什么想要學習 Three.js 技術?
  2. 您認為 Three.js 技術有哪些可能的使用場景?

歡迎您在評論區與大家交流討論,

7. 總結

在本篇文章中,我向您介紹了什么是 Three.js 以及本系列文章將如何帶您步入 Web 3D 世界的大門,不知道您是否對此旅途充滿期待?希望您保持關注,歡迎您在評論區與我交流,

8. 參考資料

  • Three.js 官網;
  • three.js journey;

9. 使用到的工具

  • 螢屏錄制:QuickTime Player;
  • 視頻轉 GIF 圖片:iLoveIMG;

?? 支持創作

您有很多方式可以表達您喜歡這篇文章,并愿意支持我持續創作,例如:

  • 點擊各類平臺「喜歡」按鈕;
  • 將文章轉發在各類您喜歡的平臺,并為它寫一份簡短的推薦語;
  • 在評論區留言;
  • 關注我的個人公眾號「前端亂步」;
  • ...

無論您選擇哪一項,我都會因為您的欣賞而感到愉悅,

?? Hey!喜歡這篇文章嗎?別忘了在下方?? 投票讓我知道,

轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/546641.html

標籤:JavaScript

上一篇:瀏覽器事件回圈相關概念及其理解

下一篇:前端設計模式——配接器模式

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • IEEE1588PTP在數字化變電站時鐘同步方面的應用

    IEEE1588ptp在數字化變電站時鐘同步方面的應用 京準電子科技官微——ahjzsz 一、電力系統時間同步基本概況 隨著對IEC 61850標準研究的不斷深入,國內外學者提出基于IEC61850通信標準體系建設數字化變電站的發展思路。數字化變電站與常規變電站的顯著區別在于程序層傳統的電流/電壓互 ......

    uj5u.com 2020-09-10 03:51:52 more
  • HTTP request smuggling CL.TE

    CL.TE 簡介 前端通過Content-Length處理請求,通過反向代理或者負載均衡將請求轉發到后端,后端Transfer-Encoding優先級較高,以TE處理請求造成安全問題。 檢測 發送如下資料包 POST / HTTP/1.1 Host: ac391f7e1e9af821806e890 ......

    uj5u.com 2020-09-10 03:52:11 more
  • 網路滲透資料大全單——漏洞庫篇

    網路滲透資料大全單——漏洞庫篇漏洞庫 NVD ——美國國家漏洞庫 →http://nvd.nist.gov/。 CERT ——美國國家應急回應中心 →https://www.us-cert.gov/ OSVDB ——開源漏洞庫 →http://osvdb.org Bugtraq ——賽門鐵克 →ht ......

    uj5u.com 2020-09-10 03:52:15 more
  • 京準講述NTP時鐘服務器應用及原理

    京準講述NTP時鐘服務器應用及原理京準講述NTP時鐘服務器應用及原理 安徽京準電子科技官微——ahjzsz 北斗授時原理 授時是指接識訓通過某種方式獲得本地時間與北斗標準時間的鐘差,然后調整本地時鐘使時差控制在一定的精度范圍內。 衛星導航系統通常由三部分組成:導航授時衛星、地面檢測校正維護系統和用戶 ......

    uj5u.com 2020-09-10 03:52:25 more
  • 利用北斗衛星系統設計NTP網路時間服務器

    利用北斗衛星系統設計NTP網路時間服務器 利用北斗衛星系統設計NTP網路時間服務器 安徽京準電子科技官微——ahjzsz 概述 NTP網路時間服務器是一款支持NTP和SNTP網路時間同步協議,高精度、大容量、高品質的高科技時鐘產品。 NTP網路時間服務器設備采用冗余架構設計,高精度時鐘直接來源于北斗 ......

    uj5u.com 2020-09-10 03:52:35 more
  • 詳細解讀電力系統各種對時方式

    詳細解讀電力系統各種對時方式 詳細解讀電力系統各種對時方式 安徽京準電子科技官微——ahjzsz,更多資料請添加VX 衛星同步時鐘是我京準公司開發研制的應用衛星授時時技術的標準時間顯示和發送的裝置,該裝置以M國全球定位系統(GLOBAL POSITIONING SYSTEM,縮寫為GPS)或者我國北 ......

    uj5u.com 2020-09-10 03:52:45 more
  • 如何保證外包團隊接入企業內網安全

    不管企業規模的大小,只要企業想省錢,那么企業的某些服務就一定會采用外包的形式,然而看似美好又經濟的策略,其實也有不好的一面。下面我通過安全的角度來聊聊使用外包團的安全隱患問題。 先看看什么服務會使用外包的,最常見的就是話務/客服這種需要大量重復性、無技術性的服務,或者是一些銷售外包、特殊的職能外包等 ......

    uj5u.com 2020-09-10 03:52:57 more
  • PHP漏洞之【整型數字型SQL注入】

    0x01 什么是SQL注入 SQL是一種注入攻擊,通過前端帶入后端資料庫進行惡意的SQL陳述句查詢。 0x02 SQL整型注入原理 SQL注入一般發生在動態網站URL地址里,當然也會發生在其它地發,如登錄框等等也會存在注入,只要是和資料庫打交道的地方都有可能存在。 如這里http://192.168. ......

    uj5u.com 2020-09-10 03:55:40 more
  • [GXYCTF2019]禁止套娃

    git泄露獲取原始碼 使用GET傳參,引數為exp 經過三層過濾執行 第一層過濾偽協議,第二層過濾帶引數的函式,第三層過濾一些函式 preg_replace('/[a-z,_]+\((?R)?\)/', NULL, $_GET['exp'] (?R)參考當前正則運算式,相當于匹配函式里的引數 因此傳遞 ......

    uj5u.com 2020-09-10 03:56:07 more
  • 等保2.0實施流程

    流程 結論 ......

    uj5u.com 2020-09-10 03:56:16 more
最新发布
  • 使用Django Rest framework搭建Blog

    在前面的Blog例子中我們使用的是GraphQL, 雖然GraphQL的使用處于上升趨勢,但是Rest API還是使用的更廣泛一些. 所以還是決定回到傳統的rest api framework上來, Django rest framework的官網上給了一個很好用的QuickStart, 我參考Qu ......

    uj5u.com 2023-04-20 08:17:54 more
  • 記錄-new Date() 我忍你很久了!

    這里給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 大家平時在開發的時候有沒被new Date()折磨過?就是它的諸多怪異的設定讓你每每用的時候,都可能不小心踩坑。造成程式意外出錯,卻一下子找不到問題出處,那叫一個煩透了…… 下面,我就列舉它的“四宗罪”及應用思考 可惡的四宗罪 1. Sa ......

    uj5u.com 2023-04-20 08:17:47 more
  • 使用Vue.js實作文字跑馬燈效果

    實作文字跑馬燈效果,首先用到 substring()截取 和 setInterval計時器 clearInterval()清除計時器 效果如下: 實作代碼如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta ......

    uj5u.com 2023-04-20 08:12:31 more
  • JavaScript 運算子

    JavaScript 運算子/運算子 在 JavaScript 中,有一些運算子可以使代碼更簡潔、易讀和高效。以下是一些常見的運算子: 1、可選鏈運算子(optional chaining operator) ?.是可選鏈運算子(optional chaining operator)。?. 可選鏈操 ......

    uj5u.com 2023-04-20 08:02:25 more
  • CSS—相對單位rem

    一、概述 rem是一個相對長度單位,它的單位長度取決于根標簽html的字體尺寸。rem即root em的意思,中文翻譯為根em。瀏覽器的文本尺寸一般默認為16px,即默認情況下: 1rem = 16px rem布局原理:根據CSS媒體查詢功能,更改根標簽的字體尺寸,實作rem單位隨螢屏尺寸的變化,如 ......

    uj5u.com 2023-04-20 08:02:21 more
  • 我的第一個NPM包:panghu-planebattle-esm(胖虎飛機大戰)使用說明

    好家伙,我的包終于開發完啦 歡迎使用胖虎的飛機大戰包!! 為你的主頁添加色彩 這是一個有趣的網頁小游戲包,使用canvas和js開發 使用ES6模塊化開發 效果圖如下: (覺得圖片太sb的可以自己改) 代碼已開源!! Git: https://gitee.com/tang-and-han-dynas ......

    uj5u.com 2023-04-20 08:01:50 more
  • 如何在 vue3 中使用 jsx/tsx?

    我們都知道,通常情況下我們使用 vue 大多都是用的 SFC(Signle File Component)單檔案組件模式,即一個組件就是一個檔案,但其實 Vue 也是支持使用 JSX 來撰寫組件的。這里不討論 SFC 和 JSX 的好壞,這個仁者見仁智者見智。本篇文章旨在帶領大家快速了解和使用 Vu ......

    uj5u.com 2023-04-20 08:01:37 more
  • 【Vue2.x原始碼系列06】計算屬性computed原理

    本章目標:計算屬性是如何實作的?計算屬性快取原理以及洋蔥模型的應用?在初始化Vue實體時,我們會給每個計算屬性都創建一個對應watcher,我們稱之為計算屬性watcher ......

    uj5u.com 2023-04-20 08:01:31 more
  • http1.1與http2.0

    一、http是什么 通俗來講,http就是計算機通過網路進行通信的規則,是一個基于請求與回應,無狀態的,應用層協議。常用于TCP/IP協議傳輸資料。目前任何終端之間任何一種通信方式都必須按Http協議進行,否則無法連接。tcp(三次握手,四次揮手)。 請求與回應:客戶端請求、服務端回應資料。 無狀態 ......

    uj5u.com 2023-04-20 08:01:10 more
  • http1.1與http2.0

    一、http是什么 通俗來講,http就是計算機通過網路進行通信的規則,是一個基于請求與回應,無狀態的,應用層協議。常用于TCP/IP協議傳輸資料。目前任何終端之間任何一種通信方式都必須按Http協議進行,否則無法連接。tcp(三次握手,四次揮手)。 請求與回應:客戶端請求、服務端回應資料。 無狀態 ......

    uj5u.com 2023-04-20 08:00:32 more