设为首页收藏本站
网站公告 | 这是第一条公告
     

 找回密码
 立即注册
缓存时间08 现在时间08 缓存数据 请试着,为欲望和懒惰松绑。你的人生,总要自己渡河摇舟。 ​早安,又是新的一天。

请试着,为欲望和懒惰松绑。你的人生,总要自己渡河摇舟。 ​早安,又是新的一天。

查看: 1040|回复: 3

浅谈将three项目迁移至vue项目遇到的问题

[复制链接]

  离线 

TA的专栏

  • 打卡等级:热心大叔
  • 打卡总天数:204
  • 打卡月天数:0
  • 打卡总奖励:3268
  • 最近打卡:2023-08-27 09:35:51
等级头衔

等級:晓枫资讯-上等兵

在线时间
0 小时

积分成就
威望
0
贡献
380
主题
350
精华
0
金钱
4373
积分
760
注册时间
2022-12-25
最后登录
2025-5-31

发表于 2023-12-25 21:22:32 | 显示全部楼层 |阅读模式
目录


  • 通过npm下载的three依赖无法正常使用
  • 导入模型的路径出现了问题
  • 3D场景渲染后没有进行销毁
由于我的3D场景起初是自己为了测试搭建的,所以使用的是html + three,后来将代码迁移到vue项目的过程中出现了下面的几个问题:

  • 通过npm下载three依赖无法正常使用
  • 导入模型的路径出现了问题,导致模型无法正常渲染
  • 3D场景渲染后没有进行销毁

通过npm下载的three依赖无法正常使用

在原项目中使用的是three相关的js文件,而迁移项目的时候本来准备直接通过npm下载相关依赖进行操作,但是发现下载依赖后照着常规的形式导入相关的控件会报错;
  1. // 例如下面的代码,导入three可以正常创建场景、创建模型
  2. // 但是使用OrbitControls等控件会报错
  3. import * as THREE from 'three'

  4. // 查询资料后有人说是需要单独导入,但是我是使用下面的导入形式从three包中导入相关文件依然会报错
  5. import "three/examples/js/controls/OrbitControls"
复制代码
当时转而使用直接导入下载好的js文件的形式,将文件放在public目录下,直接在index.html中进行引用,才解决了这个问题。

导入模型的路径出现了问题

一开始我将需要导入的模型文件放在src/assets下面,但是导入模型的方法找不到模型文件,代码如下:
  1. let mtlLoader = new THREE.MTLLoader();
  2. let objLoader = new THREE.OBJLoader();
  3. mtlLoader.setPath(`@/assets/objs/`);
  4. mtlLoader.load("server2.mtl", function(materials) {
  5.   materials.preload();
  6.   objLoader.setMaterials(materials);
  7.   objLoader.setPath(`@/assets/objs/`);
  8.   objLoader.load("server2.obj", function(object) {

  9.   });
  10. });

  11. // 页面直接报错,无法正常渲染
复制代码
通过查询资料后,有人说要把模型文件放在public/static目录下,修改后导入成功,代码如下:
  1. let mtlLoader = new THREE.MTLLoader();
  2. let objLoader = new THREE.OBJLoader();
  3. mtlLoader.setPath(`/static/objs/all/`);
  4. mtlLoader.load("server2.mtl", function(materials) {
  5.   materials.preload();
  6.   objLoader.setMaterials(materials);
  7.   objLoader.setPath(`/static/objs/all/`);
  8.   objLoader.load("server2.obj", function(object) {

  9.   });
  10. });
复制代码
但是打包部署之后,3D模型的路径又出现了错误,原因是打包后的文件路径出现了变化,但是设置的路径不会随着打包变化,导致打包和本地运行时需要不同的路径;
因为我们的项目部署后是通过ip访问的,所以我的做法是判断当前的url,区分是本地运行还是线上运行;也可以通过webpack配置根据不同的命令使用不同的路径;
  1. let resourcesUrl = ''; // 通过判断赋予不同的路径

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

  10.   });
  11. });
复制代码
3D场景渲染后没有进行销毁

在项目中发现频繁的在3D场景的页面和其他页面切换会导致页面卡顿,是由于在切换路由时没有清除相关模型导致大量占用了内存;
所以需要在离开3D场景销毁模型,并且释放相关的变量,例如renderer、scene、camera、controls
  1. scene.remove(mesh); // scene下的模型

  2. scene = null;
  3. camera = null;
  4. controls = null;
  5. renderer.dispose();
复制代码
到此这篇关于浅谈将three项目迁移至vue项目遇到的问题的文章就介绍到这了,更多相关three项目迁移至vue内容请搜索晓枫资讯以前的文章或继续浏览下面的相关文章希望大家以后多多支持晓枫资讯!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
晓枫资讯-科技资讯社区-免责声明
免责声明:以上内容为本网站转自其它媒体,相关信息仅为传递更多信息之目的,不代表本网观点,亦不代表本网站赞同其观点或证实其内容的真实性。
      1、注册用户在本社区发表、转载的任何作品仅代表其个人观点,不代表本社区认同其观点。
      2、管理员及版主有权在不事先通知或不经作者准许的情况下删除其在本社区所发表的文章。
      3、本社区的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,举报反馈:点击这里给我发消息进行删除处理。
      4、本社区一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
      5、以上声明内容的最终解释权归《晓枫资讯-科技资讯社区》所有。
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~

  离线 

TA的专栏

等级头衔

等級:晓枫资讯-列兵

在线时间
0 小时

积分成就
威望
0
贡献
0
主题
0
精华
0
金钱
17
积分
14
注册时间
2022-12-29
最后登录
2022-12-29

发表于 2024-1-15 07:24:33 | 显示全部楼层
感谢楼主,顶。
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~

  离线 

TA的专栏

等级头衔

等級:晓枫资讯-列兵

在线时间
0 小时

积分成就
威望
0
贡献
0
主题
0
精华
0
金钱
17
积分
14
注册时间
2022-12-25
最后登录
2022-12-25

发表于 2025-2-16 18:33:42 | 显示全部楼层
感谢楼主分享。
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~

  离线 

TA的专栏

等级头衔

等級:晓枫资讯-列兵

在线时间
0 小时

积分成就
威望
0
贡献
0
主题
0
精华
0
金钱
11
积分
2
注册时间
2024-8-26
最后登录
2024-8-26

发表于 前天 05:16 | 显示全部楼层
顶顶更健康!!!
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~
严禁发布广告,淫秽、色情、赌博、暴力、凶杀、恐怖、间谍及其他违反国家法律法规的内容。!晓枫资讯-社区
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

1楼
2楼
3楼
4楼

手机版|晓枫资讯--科技资讯社区 本站已运行

CopyRight © 2022-2025 晓枫资讯--科技资讯社区 ( BBS.yzwlo.com ) . All Rights Reserved .

晓枫资讯--科技资讯社区

本站内容由用户自主分享和转载自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

如有侵权、违反国家法律政策行为,请联系我们,我们会第一时间及时清除和处理! 举报反馈邮箱:点击这里给我发消息

Powered by Discuz! X3.5

快速回复 返回顶部 返回列表