首页 > 其他分享 >ThreeJs 中如何实现动画效果

ThreeJs 中如何实现动画效果

时间:2024-10-29 12:16:56浏览次数:7  
标签:动画 ThreeJs cube const 效果 THREE new animate

在 ThreeJs 中,动画是创建动态 3D 场景的重要组成部分。本文将介绍如何使用 ThreeJs 实现基础的动画效果,包括物体的旋转、位置变化和简单的过渡动画。

一、创建基础场景

在开始动画之前,首先需要创建一个基础的 ThreeJs 场景。以下是一个简单的场景设置:

import * as THREE from 'three';

// 创建场景、相机和渲染器
const scene = new THREE.Scene();
const camera = new THREE.PerspectiveCamera(
  75,
  window.innerWidth / window.innerHeight,
  0.1,
  1000,
);
const renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);

二、添加几何体

接下来,我们将添加一个立方体,并使用基本的材质为其着色:

const geometry = new THREE.BoxGeometry();
const material = new THREE.MeshBasicMaterial({ color: 0x00ff00 });
const cube = new THREE.Mesh(geometry, material);
scene.add(cube);

// 设置相机位置
camera.position.z = 5;

三、实现基础动画

1. 旋转动画

使用 requestAnimationFrame 创建一个渲染循环,在循环中更新立方体的旋转角度:

function animate() {
  requestAnimationFrame(animate);

  // 更新立方体的旋转
  cube.rotation.x += 0.01; // 绕 x 轴旋转
  cube.rotation.y += 0.01; // 绕 y 轴旋转

  renderer.render(scene, camera);
}

animate();

2. 位置动画

除了旋转,你还可以通过改变物体的位置来实现动画效果。以下是一个示例,展示如何让立方体在上下移动:

let direction = 1;

function animate() {
  requestAnimationFrame(animate);
  // 更新立方体的位置
  cube.position.y += 0.02 * direction; // 上下移动

  // 碰到边界反向移动
  if (cube.position.y > 2 || cube.position.y < -2) {
    direction *= -1; // 反向移动
  }
  renderer.render(scene, camera);
}

animate();

3. 过渡动画

如果想实现更复杂的过渡效果,可以使用简单的数学函数(如正弦函数)来平滑移动:

let clock = new THREE.Clock();

function animate() {
  requestAnimationFrame(animate);

  const elapsedTime = clock.getElapsedTime(); // 获取经过的时间
  cube.position.y = Math.sin(elapsedTime) * 2; // 使用正弦函数实现上下波动

  renderer.render(scene, camera);
}

animate();

总结

在 ThreeJs 中实现基础的动画效果非常简单。通过使用 requestAnimationFrame 创建渲染循环,你可以轻松实现物体的旋转、位置变化和其他动画效果。掌握这些基础知识后,你可以进一步探索更复杂的动画技术,例如利用 Tween.js 进行平滑过渡,或结合物理引擎实现逼真的物理动画。

标签:动画,ThreeJs,cube,const,效果,THREE,new,animate
From: https://blog.csdn.net/2401_87546826/article/details/143325867

相关文章

  • 青否数字人直播带货怎么操作效果好?一文讲清所有流程!
    随着人工智能技术的不断成熟,以数字人直播为首的各项应用逐渐被各大中小型企业引进,连带着与之相关的各类话题,如数字人直播带货怎么操作等也开始备受关注。而就目前的使用情况来看,绝大多数企业都或多或少地遭遇过数字人直播违规和数字人直播带货效果不佳等问题,让自身蒙受损失......
  • Manim教程:第五章 动画对象 ——【中】
    5.2三次贝塞尔曲线5.2.1介绍1.定义三次贝塞尔曲线是一种由四个控制点定义的曲线,这四个点通常被称为:起始点()第一个控制点()第二个控制点()结束点()数学上,三次贝塞尔曲线的参数方程可以表示为:其中 ......
  • Qt 实现启动动画
    受bilibili客户端启发,同款效果动画初始化voidMainWindow::initOverlayLabelAnimation(){//在centralwidget上创建一个覆盖的labeloverlayLabel=newQLabel(this);//加载logo图片QPixmappix=QPixmap(PNG_LINEX);floatscaled=0.3;ov......
  • qq打卡功能实现--卡片切换反转效果
    今天实现了一个类似qq的打卡反转效果,效果图如下(卡片样式比较简陋大家可以自己美化一下),快来看看怎么实现的吧先写两个layout显示卡片部分分别写打卡前的卡片样式(包括按钮)和打卡后显示的卡片,代码如下打卡前(cardbefore.xml)<?xmlversion="1.0"encoding="utf-8"?><LinearLay......
  • 鼠标移入高亮边框效果
    效果展示鼠标移入边框效果一、布局//布局<template><divclass="container"><divclass="card"><divclass="inner">君不见,黄河之水天上来,奔流到海不复回。</div></div><divclas......
  • 【STM32+HAL库】使用通用定时器生成的PWM实现呼吸灯效果
    板子:STM32F103C8仿真软件:Proteus8软件平台:cubemx+keil1新建STM32CubeMX工程1.1配置系统时钟RCC  1.2配置定时器这里用的PB3和PA15一对在TIM2中,时钟源选择内部时钟InternalClock,通道1选择PWM输出PWMGenerationCH1通道2选择PWM输出PWMGenerationCH2 ......
  • 人工智能_神经网络103_感知机_感知机工作原理_感知机具备学习能力_在学习过程中自我调
    由于之前一直对神经网络不是特别清楚,尤其是对神经网络中的一些具体的概念,包括循环,神经网络卷积神经网络以及他们具体的作用,都是应用于什么方向不是特别清楚,所以现在我们来做教程来具体明确一下。当然在机器学习之后还有深度学习,然后在深度学习中对各种神经网络的探讨就会比较......
  • Python工程数学7VPython制作3D图形和动画(上)坐标系、基本形状、点和线
    7简介VPython是一个基于Python语言的开源库,专门用于创建三维图形和动画。它为用户提供了一种简单而直观的方式,通过Python代码构建出生动的三维场景。VPython的设计初衷是让用户能够轻松地将物理概念可视化,因此在教学、科研和学习物理等领域得到了广泛应用。VPython的特点易......
  • 过采样与欠采样技术原理图解:基于二维数据的常见方法效果对比
    在现实场景中,收集一个每个类别样本数量完全相同的数据集是十分困难的。实际数据往往是不平衡的,这对于分类模型的训练可能会造成问题。当模型在这样一个不平衡数据集上训练时,由于某个类别的样本数量远多于其他类别,模型通常会更擅长预测样本量较大的类别,而在预测小类别时表现不......
  • FlowLayout实现流式布局效果,看这一篇就够了!
    FlowLayout实现流式布局效果    【Android开源库】FlowLayout的基本使用什么是流式布局?就是像水一样可以流动?不,之所以这样命名只是在强调它的不规则性,它会根据你的内容多少测量你需要的控件的尺寸,完成自定义的效果。之前我做过自定义View的流式布局效果,今天就来使用hon......