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

来源:https://www.cnblogs.com/libinfs/archive/2023/03/12/17208669.html
-Advertisement-
Play Games

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


「和我一起學 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 物體將會配合光影產生更加逼真的效果。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 痞子衡嵌入式半月刊: 第 73 期 這裡分享嵌入式領域有用有趣的項目/工具以及一些熱點新聞,農曆年分二十四節氣,希望在每個交節之日準時發佈一期。 本期刊是開源項目(GitHub: JayHeng/pzh-mcu-bi-weekly),歡迎提交 issue,投稿或推薦你知道的嵌入式那些事兒。 上期回顧 ...
  • 經常用老毛桃裝系統,也裝過很多次Ubuntu+windows雙系統,但是對系統啟動的原理卻一直沒搞清楚。 這次就遇到了棘手的問題:裝完Ubuntu之後,開機的引導選項里沒有windows boot manager,直接就進了Ubuntu。 復盤一下安裝過程 (1)我是雙固態,一個裝了win10,另一 ...
  • 本文主要介紹博主在以往開發過程中,對於不同業務所對應的 sql 寫法進行歸納總結而來。進而分享給大家。 本文所講述 sql 語法都是基於 MySql 8.0 博主github地址:http://github.com/wayn111 歡迎大家關註,點個star 一、ORDER BY FIELD() 自 ...
  • 事務 事務:是一組操作的集合,是一個不可分割的工作單位,事務會把所有操作作為一個整體一起向系統提交或撤銷操作請求,即這些操作要麼同時成功,要麼同時失敗(當操作中某一步出現異常時,前面已執行的步驟也會失效)。 感覺有點像是函數。 預設MySQL的事務是自動提交的,當執行一條DML語句,MySQL會立即 ...
  • 前言 使用redis作為緩存,必然存在redis緩存和DB數據一致性的問題:某一時刻,redis緩存數據和DB數據不一致 一 緩存更新策略 按照緩存更新的方式大致分為: 記憶體淘汰、過期刪除、主動更新 一) 記憶體淘汰 利用Redis的記憶體淘汰策略,當記憶體不足時自動進行淘汰部分數據,下次查詢時更新緩存, ...
  • 公眾號:MCNU雲原生,文章首發地,歡迎微信搜索關註,更多乾貨,第一時間掌握! @ 一、PostgreSQL是什麼? PostgreSQL是一種開源的關係型資料庫管理系統,也被稱為Postgres。它最初由加拿大電腦科學家Michael Stonebraker在1986年創建,其目標是創建一個具有 ...
  • 頁面發佈-分發dispatch(action(:object),action已被connect(mapStateToProps, mapDispatchToProps)(App)映射到組件props ) reducer里的純函數執行,拿到action里返回的對象數據,賦值給redux中的Store, ...
  • 適配器模式(Adapter Pattern):將一個類的介面轉化為客戶端所期望的介面,使得原本不相容的類可以一起工作。在前端開發中,可以使用適配器模式來處理不同瀏覽器之間的相容性問題。 適配器模式通常包含三個角色:客戶端、目標對象和適配器對象。客戶端調用適配器對象的介面,適配器對象再調用目標對象的接 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...