「和我一起學 XXX」是我 2023 年的一個新企劃,目的是向讀者(也包括未來的自己)介紹我正在學習的某項新技術。文章會通過長期反覆迭代的方式保持其內容的新鮮度。文章有較大內容更新時,會在文章開頭進行更新時間說明(由於時間精力有限,更新的內容只能保障少數幾個平臺的同步,請見諒)。
Three.js 是一個基於 WebGL 的 3D JavaScript 開源庫(遵循 MIT 協定),它使 JavaScript 開發者能夠更方便地在 Web 應用中建立 3D 場景。
請注意該定義的如下部分:
您可以在 Three.js 官網發現豐富的案例,它們從不同方面展示了 Three.js 的魅力和強大!
在瞭解 Three.js 是什麼後,若選擇繼續學習,想必您有自己的理由。對於我而言,學習 Three.js 的主要動機是「好玩」(Just for fun!)。
我覺得能夠在顯示器上渲染 3D 場景是件很酷的事情,特別是它還可以通過 VR 頭顯裝置讓人們身臨其境體驗到一個由我創造的虛擬世界!
無論您學習的動機是否與我相同,都歡迎您和我一起持續探索 Web 3D 世界。我有信心帶您一起踏入 3D 世界的大門!
在 Three.js 的官方檔案中,您可以看到一個簡單的 Three.js 應用包含了哪些模組:
您可以看到,圖中包含了「渲染器(Renderer)」,「場景(Scene)」,「攝影機(Camera)」,「網狀物(Mesh)」,「3D 物件(Object3D)」,「燈光(Light)」,「幾何體
(Geometry)」,「材質(Material)」和「紋理(Texture)」等元素,如果您從未接觸過 Web 3D 世界,您可能有點摸不著頭腦。
但是別擔心,通過閱讀本系列文章,您將能夠掌握絕對大多數內容,並瞭解它們之間的關係。在往後的篇幅中,我將一一介紹這些名詞並介紹它們對於構建 Web 3D 場景的意義所在,以及您應該如何正確地使用它們。通過完全掌握這些概念,您應該能夠自己實現任意簡單的 3D 場景。
我發現很多文章專注於介紹某種 3D 場景具體如何搭建,在本系列文章中,我不會這麼做,我傾向於採用一種「自頂向下」的方法,讓您理解到 Web 3D 世界的每個構成要素,然後您便能通過自由組合這些要素,搭建任意您感興趣的 3D 場景。
因此接下來,本系列文章將會分為如下幾個部分向您介紹 Three.js 技術的基本元素:
⚠️ 文章具體內容可能會根據實際情況有所增減。
本章將介紹搭建 Web 3D 場景的必備要素(包含場景,物體與動畫)和基本原理,通過本章的學習,您應該有能力開發出一個基本的 3D 場景,它類似於 Web 3D 世界的 Hello World
,標誌您正式踏入 Web 3D 世界。
本章將介紹 Three.js 提供的多個幾何體元素以及它們的特性。它們將是未來您構建的各類 3D 場景中的主角。
攝影機的種類和位置不僅決定了我們觀察 3D 世界的方式,也決定了物體的光影和色彩該如何被 GPU 渲染,本章我們將瞭解 Three.js 提供的攝影機種類以及如何操作它們。
本章將介紹「紋理」這個概念,您可以將他理解為「貼圖」,通過恰當地使用紋理,您可以讓您的幾何體成為具象的現實物體。
本章將介紹「材質」,即討論物體的每個可見畫素應該被如何著色的問題,通過掌握物體材質的設定方法,您的 3D 物體將會配合光影產生更加逼真的效果。