使用three.js加載3D模型

一、three.js加載模型

three.js是一個基於WebGL的開源JavaScript庫,用於創建3D圖形,同時它也支持加載和渲染3D模型。使用three.js可以方便快捷地創建WebGL應用程序,並且不需要關注底層的複雜細節。下面讓我們來看看如何使用three.js加載3D模型。

首先,你需要引入three.js庫。你可以通過下面的方式將其引入你的HTML代碼中:

  
  <script src="https://cdn.bootcdn.net/ajax/libs/three.js/r128/three.min.js"></script>
  

接着,你需要創建場景、相機、燈光、材質、紋理等元素,並且將它們添加到渲染器中。下面是一個基本的three.js場景:

  
    // 創建場景
    var scene = new THREE.Scene();

    // 創建相機
    var camera = new THREE.PerspectiveCamera(45, window.innerWidth/window.innerHeight, 0.1, 1000);
    camera.position.set(0, 0, 10);

    // 創建渲染器
    var renderer = new THREE.WebGLRenderer();
    renderer.setSize(window.innerWidth, window.innerHeight);
    document.body.appendChild(renderer.domElement);

    // 創建物體
    var geometry = new THREE.BoxGeometry();
    var material = new THREE.MeshBasicMaterial( { color: 0x00ff00 } );
    var cube = new THREE.Mesh( geometry, material );
    scene.add( cube );

    // 渲染場景
    renderer.render(scene, camera);
  

通過上面的代碼,我們創建了一個場景,一個相機,一個渲染器,以及一個綠色的立方體。其中,PerspectiveCamera是透視相機,表示透視關係,可以產生透視效果。BoxGeometry表示一個立方體幾何體,Mesh表示一個網格,MeshBasicMaterial是一種基本材質。

二、three.js引入3D模型

three.js支持多種格式的3D模型,包括JSON、OBJ、MTL、FBX等。不同的格式有不同的優缺點,在選擇模型格式時需要考慮到自己的需求。下面讓我們看看如何引入不同格式的3D模型。

1. JSON格式的3D模型

JSON格式的3D模型通常是由Blender或者其他3D建模軟件導出的。需要使用Three.js的JSONLoader加載器加載。下面是一個JSON格式的模型加載示例:

  
    // 創建場景
    var scene = new THREE.Scene();

    // 創建相機
    var camera = new THREE.PerspectiveCamera(45, window.innerWidth/window.innerHeight, 0.1, 1000);
    camera.position.set(0, 0, 10);

    // 創建渲染器
    var renderer = new THREE.WebGLRenderer();
    renderer.setSize(window.innerWidth, window.innerHeight);
    document.body.appendChild(renderer.domElement);

    // 加載json模型
    var loader = new THREE.JSONLoader();
    loader.load('model.json', function(geometry, material){
      var mesh = new THREE.Mesh(geometry, material);
      scene.add(mesh);
    });

    // 渲染場景
    renderer.render(scene, camera);
  

上面的示例代碼使用了JSONLoader加載器來加載模型,load方法用來加載模型給它傳遞模型的url,回調函數里通過Mesh來創建物體,並添加到場景中。

2. OBJ格式的3D模型

OBJ格式的3D模型被廣泛使用,可以使用Three.js的OBJLoader加載器來加載OBJ格式的模型。下面是一個OBJ格式的模型加載示例:

  
    // 創建場景
    var scene = new THREE.Scene();

    // 創建相機
    var camera = new THREE.PerspectiveCamera(45, window.innerWidth/window.innerHeight, 0.1, 1000);
    camera.position.set(0, 0, 10);

    // 創建渲染器
    var renderer = new THREE.WebGLRenderer();
    renderer.setSize(window.innerWidth, window.innerHeight);
    document.body.appendChild(renderer.domElement);

    // 加載obj模型
    var loader = new THREE.OBJLoader();
    loader.load('model.obj', function(object){
      scene.add(object);
    });

    // 渲染場景
    renderer.render(scene, camera);
  

上面的示例代碼使用了OBJLoader加載器來加載模型,load方法用來加載模型給它傳遞模型的url,回調函數里通過add方法添加到場景中。

三、three.js加載模型進度

當我們加載較大的模型時,頁面可能會因為長時間未響應而顯示“假死”狀態,為了解決這個問題,我們可以使用three.js提供的LoadingManager和onProgress(進度)方法來追蹤並顯示模型加載進度。下面給出了一個加載進度的實例:

  
    // 創建場景
    var scene = new THREE.Scene();

    // 創建相機
    var camera = new THREE.PerspectiveCamera(45, window.innerWidth/window.innerHeight, 0.1, 1000);
    camera.position.set(0, 0, 10);

    // 創建渲染器
    var renderer = new THREE.WebGLRenderer();
    renderer.setSize(window.innerWidth, window.innerHeight);
    document.body.appendChild(renderer.domElement);

    // 創建LoadingManager,並且給它添加onProgress方法
    var manager = new THREE.LoadingManager();
    manager.onProgress = function(item, loaded, total){
      console.log(item, loaded, total);
    }

    // 創建一個obj加載器,並且給它傳入創建的manager
    var loader = new THREE.OBJLoader(manager);
    loader.load('model.obj', function(object){
      scene.add(object);
    });

    // 渲染場景
    renderer.render(scene, camera);
  

上面的示例代碼中通過在LoadingManager和load方法間添加連接器來追蹤進度,每次一個物體被成功加載時會通過添加到場景中來觸發onProgress方法,顯示加載進度。

四、總結

使用three.js可以方便地加載和渲染3D模型,有了它我們就可以讓Web應用程序擁有更加豐富的交互體驗。本文介紹了使用three.js加載3D模型的步驟,包括引入three.js、引入3D模型、加載模型進度等內容。希望這篇文章能夠幫助你更好地使用three.js創建你的3D應用程序。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/286082.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-22 16:07
下一篇 2024-12-22 16:07

相關推薦

  • JS Proxy(array)用法介紹

    JS Proxy(array)可以說是ES6中非常重要的一個特性,它可以代理一個數組,監聽數據變化並進行攔截、處理。在實際開發中,使用Proxy(array)可以方便地實現數據的監…

    編程 2025-04-29
  • TensorFlow Serving Java:實現開發全功能的模型服務

    TensorFlow Serving Java是作為TensorFlow Serving的Java API,可以輕鬆地將基於TensorFlow模型的服務集成到Java應用程序中。…

    編程 2025-04-29
  • QML 動態加載實踐

    探討 QML 框架下動態加載實現的方法和技巧。 一、實現動態加載的方法 QML 支持從 JavaScript 中動態指定需要加載的 QML 組件,並放置到運行時指定的位置。這種技術…

    編程 2025-04-29
  • Java Bean加載過程

    Java Bean加載過程涉及到類加載器、反射機制和Java虛擬機的執行過程。在本文中,將從這三個方面詳細闡述Java Bean加載的過程。 一、類加載器 類加載器是Java虛擬機…

    編程 2025-04-29
  • Python訓練模型後如何投入應用

    Python已成為機器學習和深度學習領域中熱門的編程語言之一,在訓練完模型後如何將其投入應用中,是一個重要問題。本文將從多個方面為大家詳細闡述。 一、模型持久化 在應用中使用訓練好…

    編程 2025-04-29
  • Python實現一元線性回歸模型

    本文將從多個方面詳細闡述Python實現一元線性回歸模型的代碼。如果你對線性回歸模型有一些了解,對Python語言也有所掌握,那麼本文將對你有所幫助。在開始介紹具體代碼前,讓我們先…

    編程 2025-04-29
  • ARIMA模型Python應用用法介紹

    ARIMA(自回歸移動平均模型)是一種時序分析常用的模型,廣泛應用於股票、經濟等領域。本文將從多個方面詳細闡述ARIMA模型的Python實現方式。 一、ARIMA模型是什麼? A…

    編程 2025-04-29
  • 解析js base64並轉成unit

    本文將從多個方面詳細介紹js中如何解析base64編碼並轉成unit格式。 一、base64編碼解析 在JavaScript中解析base64編碼可以使用atob()函數,它會將b…

    編程 2025-04-29
  • Node.js使用Body-Parser處理HTTP POST請求時,特殊字符無法返回的解決方法

    本文將解決Node.js使用Body-Parser處理HTTP POST請求時,特殊字符無法返回的問題。同時,給出一些相關示例代碼,以幫助讀者更好的理解並處理這個問題。 一、問題解…

    編程 2025-04-29
  • VAR模型是用來幹嘛

    VAR(向量自回歸)模型是一種經濟學中的統計模型,用於分析並預測多個變量之間的關係。 一、多變量時間序列分析 VAR模型可以對多個變量的時間序列數據進行分析和建模,通過對變量之間的…

    編程 2025-04-28

發表回復

登錄後才能評論