記錄學習three.js 為什么 .glTF 是更適合 Web 的 3D 模型格式?——從 .OBJ 到 .glTF 的轉變?

在上一篇中,我們介紹了如何在 Three.js 中加載 .OBJ 模型。如果你沒看過,建議先閱讀一下基礎內容。然而你很快會發現,.OBJ 雖然入門簡單,卻并不是 Web3D 場景中的最佳格式。


.OBJ 是什么?

.OBJ 是最早期的3D交換格式之一,目的是讓各類 3D 編輯器(如 Maya、3ds Max)之間傳輸模型數據:

  • 文本格式,人可以讀懂,機器也能簡單處理;

  • 文件由 .obj(幾何數據)和 .mtl(材質)組成;

  • 沒有層級結構(Scene Graph),所有對象都變成一個大 Mesh;

  • 不支持動畫、骨骼、燈光等高級功能;

  • 貼圖路徑容易丟失,材質兼容性差;

  • 加載慢、數據體積大,不利于 Web 性能優化。

.glTF(GL Transmission Format)是 Khronos Group 推出的 3D 圖形傳輸標準,專為 Web 而生:

  • ? 體積小:二進制數據(.glb)極度壓縮,適合網絡加載;

  • ? 結構清晰:包含場景、層級、材質、貼圖、動畫等;

  • ? 渲染友好:三角面、貼圖、PBR 材質都是 WebGL/Three.js 可直接使用的;

  • ? 加載簡單:沒有額外材質文件,One file,One loader;

  • ? 跨平臺標準:被 Blender、Unity、Unreal、Three.js 等現代工具廣泛支持;

一句話總結:

📦 glTF 是 Web 3D 世界的 JPEG,旨在成為“3D 模型的通用圖像格式”。

.glTF.OBJ 強在哪?

特性.OBJ.glTF
文件結構僅包含幾何 + 材質場景圖 + 動畫 + 燈光 + 材質 + 相機
材質支持簡單材質,貼圖易丟失標準 PBR 材質,貼圖內嵌
動畫支持? 不支持? 支持骨骼/關鍵幀動畫
加載速度較慢(文本解析)快(直接傳入 GPU)
文件體積較大(3~5 倍)極小,優化傳輸
渲染兼容性需要手動調整開箱即用
使用 Three.js 加載 .glTF 示例
一行代碼即可加載完整模型,包括材質、動畫、燈光!
import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js';const loader = new GLTFLoader();
loader.load('/models/model.glb', (gltf) => {scene.add(gltf.scene);
});

總結:什么時候選 .glTF

如果你面向 Web 顯示 / 動畫 / PBR 材質 / 性能優化,請選擇 .glTF.glb

.OBJ 仍然適用于快速測試或簡單模型,但在現代 Web3D 項目中,.glTF 幾乎是唯一推薦的格式

1. 「沒有層級結構(Scene Graph),所有對象都變成一個大 Mesh」是什么意思?

假設你原始模型是一個風扇,它在 Blender 中是這樣的結構

風扇(Fan)
├── 機身(Body)
├── 支架(Stand)
└── 葉片(Blade)

每個部分是一個單獨的對象(Object),你可以單獨操作它們,比如給葉片加動畫、旋轉它。

.OBJ 格式不支持層級結構

它導出后,所有這些部分可能被「扁平化」成一個單一的大模型(一個 Mesh),像這樣:

Fan.obj
└── 一個包含全部頂點的網格,沒有結構信息

所以你在加載 .obj 后,想單獨拿到 blade 部分旋轉?要么靠 child.name.includes('blade') 模糊查找,要么就沒法單獨控制。

.glTF 格式則保留原始的「場景層級結構」?

gltf.scene.getObjectByName('blade').rotation.z += 0.01;

「一行代碼即可加載完整模型,包括材質、動畫、燈光!」是真的不用額外加載 .mtl 文件嗎?

? 是的,.glTF/.glb 不需要 .mtl 材質文件,材質是內嵌進去的!

這點是 .glTF 相比 .OBJ 最大的優勢之一。

.OBJ 加載過程:

const mtlLoader = new MTLLoader();
mtlLoader.load('model.mtl', (materials) => {const objLoader = new OBJLoader();objLoader.setMaterials(materials);objLoader.load('model.obj', (object) => {scene.add(object);});
});

?.glTF 加載過程:

const loader = new GLTFLoader();
loader.load('model.glb', (gltf) => {scene.add(gltf.scene);
});

特性.OBJ + .MTL.glTF / .glb
材質需要額外加載 .mtl內嵌在模型中
層級結構無,全部是一個大 Mesh有,保留父子結構
動畫? 不支持? 支持骨骼動畫
燈光、相機? 不支持? 支持
代碼加載方式至少兩段 Loader一行搞定

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/85579.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/85579.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/85579.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

H遞歸函數.go

前言:遞歸函數是一種強大而又充滿魅力的編程技巧。它就像是一面神奇的鏡子,函數在其中能夠調用自身的倒影,從而以一種簡潔而優雅的方式解決許多復雜的問題。 目錄 一、遞歸函數是啥玩意兒 二、遞歸函數的優缺點 優點 缺點 三、遞歸函數…

軟件功能測試的測試標準

一、軟件功能測試行業標準概述 軟件功能測試行業標準是規范軟件測試流程、方法、工具及人員資質的準則,是確保軟件產品的功能性、可靠性、易用性等質量特性符合用戶需求。這些標準不僅為測試人員提供了明確的指導,也為軟件產品的質量控制提供了有力保障。…

EchoEar(喵伴):樂鑫發布與火山引擎扣子聯名 AI 智能體開發板

隨著生成式人工智能技術的快速發展,大語言模型 (LLM) 正逐步成為推動智能設備升級的核心力量。樂鑫科技攜手火山引擎扣子大模型團隊,共同推出智能 AI 開發套件 —— EchoEar(喵伴)。該套件以端到端開發為核心理念,構建…

圖像特征檢測算法SIFT

SIFT(Scale - Invariant Feature Transform,尺度不變特征變換)是一種計算機視覺領域的特征提取算法,具有重要的地位和廣泛的應用。 算法原理 構建高斯金字塔 : 為了實現多尺度檢測,SIFT 算法會構建高斯金…

光纖通道收發器:市場洞察、技術演進與未來機遇

一、引言 在數字化浪潮席卷全球的當下,數據存儲與傳輸的需求呈爆發式增長。光纖通道收發器作為高速、可靠數據存儲網絡(如存儲區域網絡 SAN)中的關鍵組件,發揮著至關重要的作用。它通過光纖實現服務器、存儲設備和交換機之間的數…

candence17.4如何設置兩個焊盤之間在TOP與BOTTOM可以存在兩根線

為什么要走兩根線? 為了過大電流,有時候就需要我們在TOP、BOTTOM兩個面走線,同時開窗,然后通過加錫的方式增加過流能力; 當然由于兩面都有導線,必然會存在過孔,而過孔的過流能力不僅與過孔孔徑…

Dify:參數調節,讓LLM從能用到好用的機制

前言 隨著大語言模型(LLM)在文本生成、智能對話、技術問答等前沿領域的深度滲透,參數精細化調節已成為開發者駕馭 AI 能力的核心必修課。 本文將系統的解釋溫度(Temperature)、核采樣(Top - P)、截斷采樣(Top - K)等關鍵參數的底層作用機制,結合多種場景…

防抖不同的實現

防抖(Debounce):在事件被觸發后,延遲一段時間再執行函數。如果在延遲期間事件再次被觸發,則重新計時。常用于搜索框輸入、窗口大小調整等場景。 1.不安裝任何依賴和庫,編寫一個防抖的函數 在utils里面增加…

MySQL 數據庫索引詳解

一、索引是什么?能干嘛? 類比理解:索引就像書的目錄。比如你想查《哈利波特》中 “伏地魔” 出現的頁數,不用逐頁翻書,直接看目錄找關鍵詞就行。數據庫里的索引就是幫你快速找到數據的 “目錄”。 核心作用&#xff…

【620公司工作記錄】

已有數據匯總 好的,完全同意。在編寫新代碼之前,清晰地盤點我們手中已有的“彈藥”是至關重要的一步。 根據您提供的 test/20250610_88_100mm_frame_000.csv 文件頭,我來為您完整地解析一下我們當前擁有的全部數據字段。我們的數據是以“行”為單位組織的,每一行都代表一…

SpringBoot 集成Caffeine實現一級緩存

SpeingBoot 集成Caffeine實現一級緩存使我們經常遇到的場景。今天我們具體分享一下: 首先 Caffeine 作為一級緩存,它是 Spring 5.x 默認的本地緩存實現,性能優于 Guava Cache,且支持過期時間設置。緩存執行的流程圖如下&#xff…

中科米堆3D自動掃描檢測系統三維數字化智能解決方案

3D自動掃描檢測系統基于先進的光學、激光或結構光等測量技術,能夠快速、準確地獲取工件的三維幾何數據。在檢測過程中,系統通過向被測工件投射特定的光模式,利用高分辨率相機捕捉工件表面的反射光信息,再經過復雜的算法處理&#…

Unity3d中使用Mirror進行自定義消息通信

一、服務端: 1.創建服務端腳本MyServer.cs 繼承自NetworkManager類 using Mirror; using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI;public class MyServer : NetworkManager {[Header(&quo…

Odoo 18 固定資產管理自動化指南

如何在Odoo 18中實現資產管理自動化 1. 創建資產模型實現資產管理自動化 使用 Odoo 18 的會計模塊,資產的創建和確認可輕松實現自動化。這將使資產管理變得更加簡單高效。使用資產自動化功能,一旦驗證相關產品的供應商賬單,Odoo將自動生成并…

如何輕松地將音樂從 iPhone 傳輸到 Mac?

想把音樂從 iPhone 傳輸到 Mac 嗎?這很常見,無論你是想更換設備、備份收藏,還是只想在更大的屏幕上欣賞喜愛的歌曲。幸運的是,有 6 種有效的方法可以完成這項工作,具體取決于你喜歡使用的工具。讓我們開始吧。 第 1 部…

人工智能——解讀AI智慧課堂系統解決方案【附全文閱讀】

該文檔是 AI 智慧課堂系統解決方案,聚焦教育信息化需求,通過 AI 技術與教學深度融合,解決傳統課堂考勤效率低、資源管理難、分析不精準等問題。 方案以課堂為核心,構建 “背景分析 - 方案設計 - 優勢價值” 框架,技術架構涵蓋教師攝像機、學生抓拍機、智能錄播主機等設備,…

使用Nginx的RTMP模塊進行直播流轉HLS時,處理和預防`.ts`文件過多

當使用Nginx的RTMP模塊進行直播流轉HLS時,如果長時間運行或處理大量流媒體內容,可能會遇到.ts文件累積過多的問題。這不僅會占用大量的磁盤空間,還可能影響系統性能。以下是一些處理和預防.ts文件過多的方法: 1. 配置HLS清理 Nginx RTMP模塊允許配置HLS片段的過期時間,這…

結構體解決冒泡排序

設計英雄的結構體 //1、設計結構體 struct Hero {string name;//姓名int age;//年齡string sex;//性別 };創建英雄的數組 //2、創建數組存放英雄 struct Hero Array[5] {{"劉備", 34 ,"男"},{"關羽", 45 ,"男"},{"張飛",…

spring-webmvc @RequestParam 典型用法

典型用法 基本使用 HTTP請求參數綁定到方法參數 GetMapping("/users") public String getUsers(RequestParam String name) {return "Hello, " name; }請求:/users?nameJohn 輸出:Hello, John-----GetMapping("/filter&qu…

AntDesignPro前后端權限按鈕系統實現

目錄 Ant Design Pro 后端接口權限按鈕系統 系統架構圖 前端實現 權限按鈕組件 (AuthButton.tsx) 權限鉤子 (useAccess.ts) 權限服務 (permission.ts) 產品列表頁面 (ProductList.tsx) 后端接口設計 (Node.js Express 示例) 權限接口控制器 (permissionController.js…