iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >vue+threejs写物体动画之物体缩放动画效果
  • 707
分享到

vue+threejs写物体动画之物体缩放动画效果

2024-04-02 19:04:59 707人浏览 八月长安
摘要

目录写在前面代码说明写在最后写在前面 本文用Vue+threejs写物体动画:物体缩放动画。 实现原理:让缩放值根据秒数的增加呈函数式变化,以达到动画展示的效果。 下面是演示gif:

写在前面

本文用Vue+threejs写物体动画:物体缩放动画。

实现原理:让缩放值根据秒数的增加呈函数式变化,以达到动画展示的效果。

下面是演示gif:

代码说明

  • 准备一个id容器,用于插入渲染器节点
<template>
  <div class="item">
    <div id="THREE42"></div>
  </div>
</template>
  • 引入threejs及需要的模块,并在mounted方法中调用initThreejs方法
  • OrbitControls 轨道控制器,用于画面响应鼠标的操作
  • DRACOLoader 用于加载.drc模型
import * as THREE from "three";
import { OrbitControls } from "three/examples/jsm/controls/OrbitControls.js";
import { DRACOLoader } from "three/examples/jsm/loaders/DRACOLoader.js";

mounted() {
  this.initThreejs();
},
  • initThreejs的全部代码及其说明
  • 定义一个跟踪时间的对象:let clock = new THREE.Clock();下面会用到它的.getElapsedTime()方法,该方法用于获取自时钟启动后的秒数。
  • 创建场景scene = new THREE.Scene();
  • 创建灯光const light = new THREE.DirectionalLight(0xffffff);
  • 创建相机camera = new THREE.PerspectiveCamera(35,(window.innerWidth - 201) / window.innerHeight,1,500);
  • 创建渲染器renderer = new THREE.webGLRenderer({ antialias: true });
  • 以上是threejs最基础的部分,就不过多说明了
  • 创建地面:BoxGeometry用于创建一个立方体,参数是(长,宽,高)。MeshPhongMaterial用于创建一个具有镜面高光的光泽表面的材质。最后用Mesh创建一个具有高光材质的立方体网格模型
  • 监听鼠标落下事件:document.addEventListener("pointerdown", animate);,鼠标落下的后开始缩放动画,缩放值根据秒数的增加呈函数式变化
  • 使用DRACOLoader加载.drc模型
  • 以上就是实现缩放动画的全部过程说明和代码说明。
initThreejs() {
  let camera, scene, renderer;

  let mesh;

  let clock = new THREE.Clock();

  const dracoLoader = new DRACOLoader();
  dracoLoader.setDecoderPath("js/libs/draco/");
  dracoLoader.setDecoderConfig({ type: "js" });

  init();

  function init() {
    // 创建场景
    scene = new THREE.Scene();
    scene.background = new THREE.Color(0x000000); // 设置场景背景颜色

    // 创建灯光
    const light = new THREE.DirectionalLight(0xffffff); // 平行光
    light.position.set(0.5, 1.0, 0.5).nORMalize(); // 设置平行光的方向,从(0.5, 1.0, 0.5)->target一般(0, 0, 0)
    scene.add(light); // 将灯光添加到场景中

    // 创建相机
    camera = new THREE.PerspectiveCamera(
      35,
      (window.innerWidth - 201) / window.innerHeight,
      1,
      500
    ); // 透视相机
    camera.position.x = 0.5;
    camera.position.y = 0.5; // 设置相机的位置
    camera.position.z = 1.8;
    scene.add(camera); // 将相机添加到场景中

    // 创建渲染器
    renderer = new THREE.WEBGLRenderer({ antialias: true });
    renderer.outputEncoding = THREE.sRGBEncoding;
    renderer.setPixelRatio(window.devicePixelRatio);
    renderer.setSize(window.innerWidth - 201, window.innerHeight);
    document.getElementById("THREE42").appendChild(renderer.domElement);

    // 创建轨道控制器
    const controls = new OrbitControls(camera, renderer.domElement);
    controls.addEventListener("change", render);
    controls.update();

    // 创建地面
    const ground = new THREE.Mesh(
      new THREE.BoxGeometry(1, 0.0015, 1),
      new THREE.MeshPhongMaterial({
        color: 0x999999,
        depthWrite: false,
        transparent: true,
        opacity: 1,
      })
    );
    ground.receiveShadow = true;
    scene.add(ground);

    document.addEventListener("pointerdown", animate); // 监听鼠标、手指落下

    //  加载模型
    dracoLoader.load("/models/models/draco/bunny.drc", function (geometry) {
      geometry.computeVertexNormals();

      const material = new THREE.MeshStandardMaterial({ color: 0xffffff });
      mesh = new THREE.Mesh(geometry, material);
      mesh.castShadow = true;
      mesh.receiveShadow = true;
      scene.add(mesh);

      dracoLoader.dispose();

      render();
    });
  }

  function animate() {
    requestAnimationFrame(animate);

    const elapsed = clock.getElapsedTime();
    // getElapsedTime 获取自时钟启动后的秒数
    // 让缩放值根据秒数的增加呈函数式变化,以达到动画展示的效果
    let scale = 1 + 0.5 * Math.sin(2 * elapsed);
    mesh.scale.set(scale, scale, scale);

    render();
  }

  function render() {
    renderer.render(scene, camera);
  }
},

写在最后

以上就是所有的代码和说明。

到此这篇关于vue+threejs写物体动画之物体缩放动画效果的文章就介绍到这了,更多相关vue+threejs物体缩放动画内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: vue+threejs写物体动画之物体缩放动画效果

本文链接: https://www.lsjlt.com/news/168850.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • vue+threejs写物体动画之物体缩放动画效果
    目录写在前面代码说明写在最后写在前面 本文用vue+threejs写物体动画:物体缩放动画。 实现原理:让缩放值根据秒数的增加呈函数式变化,以达到动画展示的效果。 下面是演示gif:...
    99+
    2024-04-02
  • WebGL中three.js怎么实现物体的阴影动画效果
    小编给大家分享一下WebGL中three.js怎么实现物体的阴影动画效果,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!实现物体的...
    99+
    2024-04-02
  • Unity实现物体运动时画出轨迹
    本文实例为大家分享了Unity实现物体运动时画出轨迹的具体代码,供大家参考,具体内容如下 1、新建空物体,上赋LineRenderer 2、新建空物体,把轨迹画出来,设计和脚本。 ...
    99+
    2024-04-02
  • vue怎么实现购物车小球动画效果
    这篇文章主要介绍“vue怎么实现购物车小球动画效果”,在日常操作中,相信很多人在vue怎么实现购物车小球动画效果问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”vue怎么实现购物车小球动画效果”的疑惑有所帮助!...
    99+
    2023-07-04
  • Vue.js WebGL 中的动画:让你的 3D 物体动起来
    npm install three npm install gsap 步骤 2:设置场景和摄像机 import * as THREE from "three"; import { PerspectiveCamera } from "thr...
    99+
    2024-04-02
  • Flutter Animation实现缩放和滑动动画效果
    本文实例为大家分享了Flutter Animation实现缩放和滑动动画的具体代码,供大家参考,具体内容如下 Animation对象是Flutter动画库中的一个核心类,它生成指导动...
    99+
    2024-04-02
  • css3怎么实现缩放动画效果
    这篇文章主要介绍css3怎么实现缩放动画效果,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完! css中,可利用“@keyframes”规则、animatio...
    99+
    2024-04-02
  • css3如何实现字体放大缩小动画
    这篇文章主要讲解了“css3如何实现字体放大缩小动画”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“css3如何实现字体放大缩小动画”吧! ...
    99+
    2024-04-02
  • Flutter怎么实现不同缩放动画效果
    本篇内容主要讲解“Flutter怎么实现不同缩放动画效果”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Flutter怎么实现不同缩放动画效果”吧!需求背景组件缩放可以向着一个方向进行缩放,放大列...
    99+
    2023-07-02
  • Flutter实现不同缩放动画效果详解
    目录需求背景可缩放组件介绍ScaleTransitionSizeTransitionAnimatedSizeAnimatedBuilder小结需求背景 组件缩放可以向着一个方向进行缩...
    99+
    2024-04-02
  • css3如何实现旋转缩放动画效果
    这篇文章主要介绍了css3如何实现旋转缩放动画效果,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。 方法:1、利用...
    99+
    2024-04-02
  • CSS如何实现小球抛物线运动的动画效果
    这篇文章将为大家详细讲解有关CSS如何实现小球抛物线运动的动画效果,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。   一个物体实现抛物线运动,物理上是将物体分为水平运动...
    99+
    2024-04-02
  • CSS动画:如何实现元素的抖动缩放效果
    CSS动画:如何实现元素的抖动缩放效果在网页设计中,元素的动画效果能够增加用户的视觉体验,为平淡的页面增添活力。而CSS动画正是实现这些效果的强大工具之一。本文将详细介绍如何使用CSS动画实现元素的抖动缩放效果,并提供具体的代码示例供读者参...
    99+
    2023-11-21
    动画 CSS 缩放
  • Android仿一号店货物详情轮播图动画效果
    还不是很完全,目前只能点中间图片才能位移,图片外的其他区域没有。。(属性动画),对了,图片加载用得是facebook的一款android图片加载库,感觉非常NB啊,完爆一切。先看布局<?xml version="1.0" en...
    99+
    2023-05-31
    android 轮播图 roi
  • Android列表实现单选点击缩放动画效果
    recycleView单选的时候,一般的处理就是选中的item做个stroke或者字体颜色改变,但要提升用户体验就得加点动画了。也就是点击选中的元素放大,同时之前选中的item缩小,...
    99+
    2024-04-02
  • CSS+jQuery实现的一个放大缩小动画效果
    今天帮朋友写了一些代码,自己觉得写着写着,好几个版本以后,有点满意,于是就贴出来。 都是定死了的。因为需求就只有4个元素。如果是要用CSS的class来处理,那就需要用到CSS3动画...
    99+
    2022-11-15
    jQuery+CSS 放大缩小动画
  • jQuery如何模拟实现天猫购物车动画效果
    这篇文章主要介绍了jQuery如何模拟实现天猫购物车动画效果,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、功能描述: &nbs...
    99+
    2024-04-02
  • Android Flutter实现自由落体弹跳动画效果
    目录粒子运动概念如何保持持续运动 创建粒子对象创建粒子控制器初始化粒子创建画板多粒子实现八大行星加速度自由落体弹跳总结粒子运动概念 粒子运动是将对象按照一定物理公式进行的自...
    99+
    2022-11-13
    Android Flutter自由落体弹跳动画 Flutte 弹跳动画 Flutter 动画
  • Jquery怎么实现商品飞入购物车的动画效果
    本篇内容主要讲解“Jquery怎么实现商品飞入购物车的动画效果”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Jquery怎么实现商品飞入购物车的动画效果”吧!&...
    99+
    2024-04-02
  • Android如何实现直播app送礼物连击动画效果
    这篇文章将为大家详细讲解有关Android如何实现直播app送礼物连击动画效果,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。最近在做公司的直播项目,需要实现一个观看端连击送礼物的控件:直接上代码:publ...
    99+
    2023-05-31
    android
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作