91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何解決將three項目遷移至vue項目遇到的問題

發布時間:2022-01-21 11:57:04 來源:億速云 閱讀:220 作者:小新 欄目:開發技術

這篇文章主要介紹了如何解決將three項目遷移至vue項目遇到的問題,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

通過npm下載的three依賴無法正常使用

在原項目中使用的是three相關的js文件,而遷移項目的時候本來準備直接通過npm下載相關依賴進行操作,但是發現下載依賴后照著常規的形式導入相關的控件會報錯;

// 例如下面的代碼,導入three可以正常創建場景、創建模型
// 但是使用OrbitControls等控件會報錯
import * as THREE from 'three'

// 查詢資料后有人說是需要單獨導入,但是我是使用下面的導入形式從three包中導入相關文件依然會報錯
import "three/examples/js/controls/OrbitControls"

當時轉而使用直接導入下載好的js文件的形式,將文件放在public目錄下,直接在index.html中進行引用,才解決了這個問題。

導入模型的路徑出現了問題

一開始我將需要導入的模型文件放在src/assets下面,但是導入模型的方法找不到模型文件,代碼如下:

let mtlLoader = new THREE.MTLLoader();
let objLoader = new THREE.OBJLoader();
mtlLoader.setPath(`@/assets/objs/`);
mtlLoader.load("server2.mtl", function(materials) {
  materials.preload();
  objLoader.setMaterials(materials);
  objLoader.setPath(`@/assets/objs/`);
  objLoader.load("server2.obj", function(object) {

  });
});

// 頁面直接報錯,無法正常渲染

通過查詢資料后,有人說要把模型文件放在public/static目錄下,修改后導入成功,代碼如下:

let mtlLoader = new THREE.MTLLoader();
let objLoader = new THREE.OBJLoader();
mtlLoader.setPath(`/static/objs/all/`);
mtlLoader.load("server2.mtl", function(materials) {
  materials.preload();
  objLoader.setMaterials(materials);
  objLoader.setPath(`/static/objs/all/`);
  objLoader.load("server2.obj", function(object) {

  });
});

但是打包部署之后,3D模型的路徑又出現了錯誤,原因是打包后的文件路徑出現了變化,但是設置的路徑不會隨著打包變化,導致打包和本地運行時需要不同的路徑;
因為我們的項目部署后是通過ip訪問的,所以我的做法是判斷當前的url,區分是本地運行還是線上運行;也可以通過webpack配置根據不同的命令使用不同的路徑;

let resourcesUrl = ''; // 通過判斷賦予不同的路徑

let mtlLoader = new THREE.MTLLoader();
let objLoader = new THREE.OBJLoader();
mtlLoader.setPath(`${resourcesUrl}/static/objs/all/`);
mtlLoader.load("server2.mtl", function(materials) {
  materials.preload();
  objLoader.setMaterials(materials);
  objLoader.setPath(`${resourcesUrl}/static/objs/all/`);
  objLoader.load("server2.obj", function(object) {

  });
});

3D場景渲染后沒有進行銷毀

在項目中發現頻繁的在3D場景的頁面和其他頁面切換會導致頁面卡頓,是由于在切換路由時沒有清除相關模型導致大量占用了內存;
所以需要在離開3D場景銷毀模型,并且釋放相關的變量,例如renderer、scene、camera、controls

scene.remove(mesh); // scene下的模型

scene = null;
camera = null;
controls = null;
renderer.dispose();

感謝你能夠認真閱讀完這篇文章,希望小編分享的“如何解決將three項目遷移至vue項目遇到的問題”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

丰顺县| 丹巴县| 谢通门县| 南京市| 盖州市| 土默特右旗| 平遥县| 银川市| 谢通门县| 闽清县| 广灵县| 茂名市| 隆化县| 新兴县| 格尔木市| 南丹县| 新和县| 河间市| 嘉定区| 德清县| 郯城县| 合水县| 高淳县| 津市市| 宜兰县| 滦平县| 甘德县| 搜索| 垦利县| 会昌县| 曲周县| 轮台县| 通许县| 横山县| 萍乡市| 武清区| 阳泉市| 双峰县| 邯郸县| 莒南县| 渭源县|