WEB端三维可视化(threejs)03

前言

上一篇主要写了如何创建一个场景,本篇写一下模型加载方面的细节。
目前threejs支持的模型格式有很多,gltf/glb、obj+mtl、fbx、dea等等…
主要推荐的模型格式:obj+mtl 或者 gltf/glb。

原因
obj+mtl这种格式将模型信息、材质信息、贴图拆分开,相比较于其他来说,文件分散,分散后文件体积小,唯一的缺点是,文件套多了,注意命名,小心弄乱。
gltf呢,被称为模型界的JPEG,它可以在原有的基础上有损压缩(这部分放在后边),压缩后体积更小。

个人做了一下比较:同一个模型,不同的格式,由于模型体积较小,直接模拟了300个。
fbx:加载把GPU和CPU全部跑满,模型刚渲染几个就卡住了。
obj:因为模型文件比较分散,渲染了大概一半左右,后续也是卡住了。
gltf:虽然时间长了一点,但是加载完了,还能操作,就是操作的时候掉帧稍微严重。

测试模型效果:模型是拿官网的模型
在这里插入图片描述

接下来直接开始正文

一、加载进度:

官方抄的,修修改改就成这样了。把 onProgress 和 onError 两个参数给到 .load模型的函数结尾。
稍微简单了点。
或者感觉这种不太靠谱的直接去threejs官网找个示例。
引入:

import * as THREE from 'three'
var onProgress = function(xhr) {
  if (xhr.lengthComputable) {
    var percentComplete = xhr.loaded / xhr.total * 100
    // progressLoad.value = percentComplete;
    console.log(Math.round(percentComplete, 2) + '% downloaded')
  }
}
var onError = function() { }

二、加载模型(gltf & obj)

02篇里定义了初始化加载函数 init() ,这部分直接加进去执行即可。

1、gltf

用到 Draco 解压缩的时候,注意把three资源包路径下的【 three\examples\js\libs\draco 】整个draco文件夹拷出来放到项目目录下,目录自定吧,个人测试,不管是vscode 或者Builder 这种编辑器还是vue 项目或者常规 HTML写法里,只要不是在three资源包里,放在外边静态资源文件夹下都可以。

引入

import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader'
import { DRACOLoader } from 'three/examples/jsm/loaders/DRACOLoader'
function initModel() {
  const gltf_loader = new GLTFLoader()
  const dracoLoader = new DRACOLoader()
  dracoLoader.setDecoderPath('./draco/')
  gltf_loader.setDRACOLoader(dracoLoader)
  gltf_loader.load('./static/models/male02.gltf', (gltf) => {
    mastermodel = gltf.scene
    scene.add(planemodel)
  }, onProgress, onError)
}

2、obj+mtl

引入

import { OBJLoader } from 'three/examples/jsm/loaders/OBJLoader'
import { MTLLoader } from 'three/examples/jsm/loaders/MTLLoader'
function initModel(){
  var mtlLoader = new MTLLoader();
  mtlLoader.setPath('./static/models/test/');
  mtlLoader.load('male02.mtl',(materials) => {
    materials.preload()
    var objLoader = new OBJLoader()
    objLoader.setMaterials(materials)
    objLoader.setPath('./static/models/test/');
    objLoader.load('male02.obj',(object) => {
      scene.add(object)
    }, onProgress, onError)
  });
}

三、gltf模型压缩

gltf一般情况下可以压缩,可以通过 Blender 工具或者gltf-pipeline 插件压缩,注意——【有损】——两个字,请按照自身需要的效果进行压缩。

1、Blender分级别压缩

选择左上角【文件—>导出—>gltf2.0】,值得注意的是导出面板右侧【导出格式】和【压缩】这两个选项。
在这里插入图片描述
在这里插入图片描述

2、gltf-pipeline插件进行Draco压缩

通过 【npm install gltf-pipeline】安装插件
在这里插入图片描述
cd 到gltf根目录 执行 【gltf-pipeline -i male02.gltf -o male02Draco.gltf -d】,l命令字符:-i是当前导入文件路径input,-o是当前导出文件路径output,-d是使用Draco压缩。

下边这个是我自己的模型,相比较内存占用少了一半。
在这里插入图片描述
在这里插入图片描述

  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: three.js可视化企业实战WebGL课程源码是用于教学目的的一个完整的项目源码,旨在帮助学习者通过实践来理解和掌握three.js库在WebGL渲染中的应用。这个课程的源码可以分为以下几个部分。 首先,源码包含了基础的HTML和CSS文件,这些文件用于创建网页和样式。通过这些文件,学习者可以了解如何在网页上创建并布局three.js可视化场景。 其次,源码中包含了JavaScript文件,这些文件是用来编写与three.js相关的代码。这些文件包含了创建场景、创建对象、渲染场景以及添加交互等代码。通过这些代码,学习者可以学习如何使用three.js库创建三维对象、设置材质和光照效果、应用纹理等。 此外,源码还包含了一些示例数据,这些数据用于在可视化场景中展示不同的效果和交互。学习者可以通过源码中的示例数据进行实践,并根据自己的需求进行修改和拓展。 最后,源码中的文件夹结构和一些配置文件是为了帮助学习者更好地组织和管理代码。这些文件夹和配置文件包含了场景文件、模型文件、纹理文件等。学习者可以参考这些文件夹结构和配置文件的使用,来组织自己的项目。 通过学习和理解这个课程的源码,学习者可以掌握three.jsWebGL渲染中创建可视化场景的技巧和方法。学习者可以根据自己的实际需求,修改和拓展源码,实现自己想要的效果。这个课程的源码可以作为学习和实践的参考,帮助学习者更好地掌握three.js库的应用。 ### 回答2: Three.js是一个用于创建和展示3D图形的JavaScript库。它提供了丰富的功能和工具,可以帮助开发者轻松地在Web浏览器中呈现3D模型和动画。 Three.js可视化企业实战WebGL课程源码是一个包含了使用Three.js实现可视化效果的项目代码。这个课程源码涵盖了一系列的教学示例和实践案例,旨在教授如何使用Three.js创建和定制3D图形。 通过学习这个课程源码,你会学到如何创建场景、添加摄像机、加载和渲染3D模型、应用材质和纹理、实现光照效果、处理用户交互等一系列的基础和高级的Three.js技术。 此外,这个课程源码还包含了许多实战应用的示例,如可视化数据、建筑模型展示、游戏开发等。这些实战案例可以帮助你更好地理解如何将Three.js应用于实际应用中,同时也为你提供了参考和灵感,以便你在自己的项目中进行扩展和创新。 通过学习Three.js可视化企业实战WebGL课程源码,你将掌握一种强大的工具和技术,帮助你在Web平台上创建出令人惊叹的3D视觉效果。无论你是从事Web开发还是游戏开发,这个课程源码都将帮助你提高你的技术水平,并让你的项目更加生动和吸引人。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值