Three.js 模型加载及加载简单动画

这篇具有很好参考价值的文章主要介绍了Three.js 模型加载及加载简单动画。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

时间过的好快啊~再一次感叹,忙忙碌碌一年又过去了,新年第一帖,新的一年也要加油呀!

简单介绍下Three.js吧,Three.js是基于原生WebGL封装运行的三维引擎,在所有WebGL引擎中,Three.js是国内文资料最多、使用最广泛的三维引擎。因为使用简单,入门比较容易。

Three.js的具体介绍和使用有很多教程,可以根据自己需要搜索。它重要的三个属性:场景(scene),相机(camera),渲染器(renderer),组合构成一个三维画面。

创建一个div容器,用于加载模型

 <div v-loading="loadModel"
             element-loading-text="模型渲染中"
             element-loading-spinner="el-icon-loading"
             element-loading-background="rgba(0, 0, 0, 0)"
             ref="threeBox"
             class="three-box" />

初始化数据

 loadModel: true, // 模型加载状态
      scene: null, // 3D模型场景
      camera: null, // 摄像机
      renderer: null, // 渲染器
      mixer: null, // 动画帧
      clock: null, // 锁
      glbLoader: null,
      dracoLoader: null,

 渲染模型

// 渲染模型
    init() {
      // eslint-disable-next-line @typescript-eslint/no-this-alias
      const self = this;
      self.scene = new THREE.Scene();
      self.camera = new THREE.PerspectiveCamera(45, self.$refs.threeBox.clientWidth / self.$refs.threeBox.clientHeight, 0.1, 10000);
      self.renderer = new THREE.WebGLRenderer();
      self.renderer.setClearColor('0xffffff', 0);
      self.renderer.setSize(self.$refs.threeBox.clientWidth * 1.07, self.$refs.threeBox.clientHeight);
      self.$refs.threeBox.appendChild(this.renderer.domElement);
      // self.scene.add(new THREE.AxesHelper(1000));
      self.controls = new OrbitControls(self.camera, self.renderer.domElement);
      self.controls.target.set(0, 0, 0);
      self.controls.update();
      const boxHelper = new THREE.BoxHelper();
      // 加载glb模型
      const fbxLoader = new FBXLoader();
      const actives = [];
      self.glbLoader = new GLTFLoader();
      self.dracoLoader = new DRACOLoader();
      self.dracoLoader.setDecoderPath('draco/');
      self.dracoLoader.setDecoderConfig({ type: 'js' });
      self.dracoLoader.preload();
      self.glbLoader.setDRACOLoader(self.dracoLoader);
      self.glbLoader.load(self.modelPath, (obj) => {
        const object = obj.scene;
        boxHelper.setFromObject(object);
        const { center } = boxHelper.geometry.boundingSphere;
        const { radius } = boxHelper.geometry.boundingSphere;
        const cameraPos = new THREE.Vector3(center.x + object.position.x, center.y + object.position.y, radius * 2.2 + center.z + object.position.z);
        const lookPos = new THREE.Vector3(center.x + object.position.x, center.y + object.position.y, center.z - object.position.z);
        object.rotation.y = (-90 * Math.PI) / 180;
        object.rotation.z = (-45 * Math.PI) / 180;
        self.camera.position.copy(cameraPos);
        self.controls.target = lookPos;
        self.camera.lookAt(lookPos);
        self.scene.add(object);
        self.loadModel = false;
        // 加载动画帧
        self.mixer = new THREE.AnimationMixer(object);
        obj.animations.forEach((item) => {
          actives.push(self.mixer.clipAction(item));
        });
        actives[0].play();
      });
      // 环境光
      const ambient = new THREE.AmbientLight(0xffffff);
      this.scene.add(ambient);
      // 点光源
      const point1 = new THREE.PointLight(0xD3D3D3);
      point1.position.set(200, 400, 300);
      self.scene.add(point1);
      const point2 = new THREE.PointLight(0xD3D3D3);
      point2.position.set(-200, -400, -300);
      self.scene.add(point2);
      self.camera.position.set(100, 200, 300);
      self.camera.lookAt(0, 0, 0);
    },

其中modelPath是放在public下面的模型路径,这里以glb模型为例,可以改为自己对应的glb模型地址。该模型中里面包含了动画,在加载完模型的时候,加载动画帧(mixer

modelPath: '/model/model-processed.glb', // glb模型路径

加载动画

 // 加载动画
    animate() {
      if (this.mixer) {
        this.mixer.update(this.clock.getDelta());
      }
      requestAnimationFrame(this.animate);
      this.renderer.clear();
      this.renderer.render(this.scene, this.camera);
      this.renderer.clearDepth();
    },

初始化调用

mounted() {
    this.$nextTick(() => {
      this.clock = new THREE.Clock();
      this.init();
      this.animate();
    });
  },

最终效果图

threejs加载动画,javascript,前端,3d,vue.js文章来源地址https://www.toymoban.com/news/detail-520433.html

到了这里,关于Three.js 模型加载及加载简单动画的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Three.js 进阶之旅:滚动控制模型动画和相机动画 ?

    声明:本文涉及图文和模型素材仅用于个人学习、研究和欣赏,请勿二次修改、非法传播、转载、出版、商用、及进行其他获利行为。 专栏上篇文章《Three.js 进阶之旅:页面*滑滚动-王国之泪》 讲解并实现了如何使用 R3F 进行页面图片*滑滚动,本文内容在上节的基础上,学习

    2024年02月06日
    浏览(40)
  • VUE使用Three.js实现模型,点击交互,相机旋转视角跟随移动(Threejs中使用Tweenjs,含demo源码)

    目录 一、Three.js是什么? 二、VUE简单使用Three.js步骤 1.npm安装 2.template模板 3.引入库 4.定义全局变量 5.初始化场景 6.初始化相机 7.初始化灯光 8.初始化渲染器 9.创建模型(这里我搭建的模型是一个简单双面货架模型) 10.根据浏览器窗口自适应 11.初始化函数,页面加载完成时调用

    2024年02月03日
    浏览(43)
  • Three.js之加载外部三维模型

    建模软件绘制3D场景 … 加载.gltf文件(模型加载全流程) 注:基于Three.js v0.155.0 三维建模软件 gltf格式 加载.gltf文件 OrbitControls辅助设置相机参数:相机位置、相机目标对象 gltf不同文件形式(.glb) 模型命名(程序与美术协作): .getObjectByName() 递归遍历层级模型修改材质: .traverse

    2024年02月05日
    浏览(33)
  • Three.js--》建模软件如何加载外部3D模型?

    目录 三维建模软件的介绍 Blender官方文档介绍 Blender软件安装 GLTF格式简介 gltf不同文件形式         看过我之前讲解的three文章的人都知道,我在创建模型的时候都没有使用three.js自带的一些简单模型,而是引入外部的模型并加载到页面上, 简言之 :对于简单的立方体、

    2024年02月06日
    浏览(32)
  • 【three.js / React-three-fiber】加载3D模型性能优化

    无论是大型虚拟世界还是简单的网站,性能优化都是必要的。 特别是在运用三维模型的情况下,我们需要更加深入的优化。因为 三维模型通常包含大量的数据和复杂的几何形状 ,如果不进行性能优化,浏览器可能会因为负载过重而崩溃。 在本文中,我们将探讨如何在 thre

    2024年02月02日
    浏览(37)
  • Three.js一学就会系列:05 加载3D模型

    Three.js一学就会系列:01 第一个3D网站 Three.js一学就会系列:02 画线 Three.js一学就会系列:03 炫酷3D划线 Three.js一学就会系列:04 炫酷3D文字 最近开始入坑前端3D建站,跟大家一起慢慢深入three.js做网站3D 这篇文章给大家讲下 如何加载一个3D模型 GLTFLoader : 加载GLTF加载器,glT

    2024年02月02日
    浏览(36)
  • Three.js开发神器-结合3DTiles插件加载倾斜摄影模型

    首先我们通过链接和图片来看看效果 演示Demo链接地址:https://n3gis.github.io/exportToThree(3.0).html?scene=Demo_4 使用到的软件(软件大家到Unity商城上搜索,Unity商城地址:https://assetstore.unity.com) Unity3D 3DTiles(Unity3D插件,用于加载OSGB格式的倾斜摄影数据) Export To Three.js(Unity3D插件,

    2023年04月20日
    浏览(29)
  • Three.js加载简单纹理贴图并应用到网格(凹凸贴图、法向贴图、移位贴图)

    纹理最基础的用法就是作为贴图被添加到材质上,当用这种方法创建网格时,网格的颜色就来源于纹理 UV贴图实质上就是指定模型上的哪一部分需要被映射到纹理的相应位置 可以用如下方法加载纹理 使用THREE.TextureLoader()从指定位置加载图片,图片格式可以是png,jpg或jpeg 纹理

    2024年02月05日
    浏览(50)
  • Three.js加载外部glb,fbx,gltf,obj 模型文件

    vue3使用Three.js加载外部模型文件 1.安装Three.js 2.新建一个renderModel.js 用于处理Three.js相关逻辑 3.modelPage.vue 中使用页面 6.效果图:

    2024年02月15日
    浏览(32)
  • three.js加载3D模型,在网页上展示3D模型(.glb.gltf.fbx格式)

    Three.js是一款开源的主流3D绘图JS引擎,简单点,可以将它理解为three+js就可以了,three表示3D,js表示JavaScript的意思。 结构  .glb.gltf文件最好放在服务器上 放在本地容易报找不到的错 .fbx格式文件可以在本地用3d看图(win10自带)打开另存为.glb格式 index.html代码 js代码 项目案例

    2024年02月11日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包