当前位置: 首页 > article >正文

Three.js 3D人物漫游项目(下)

本文目录

  • 前言
  • 最终效果
  • 1、效果回顾
  • 2、编写人物模型动画执行类并调用
    • 2.1 代码
    • 2.2 代码解读
    • 2.3 实例化动画类并调用
    • 2.4 效果
      • 2.4.1 休息动画
      • 2.4.2 跑步动画
      • 2.4.3 走路动画
      • 2.4.4 舞蹈1动画
      • 2.4.5 舞蹈2动画
  • 3、键盘控制动画
    • 3.1 站立休息、走、跑、舞蹈1、舞蹈2代码
      • 3.1.1 效果
    • 3.2 跳跃动画
      • 3.2.1 缺陷代码
      • 3.2.2 bug效果
      • 3.2.3 优化代码
  • 4、控制人物的正确朝向
    • 4.1 代码
    • 4.2 效果
  • 5、控制人物运动
    • 5.1 代码
    • 5.2 效果

前言

在数字技术的浪潮中,三维图形渲染技术以其独特的魅力,正逐步渗透到我们生活的方方面面,从电影特效的震撼呈现到游戏世界的沉浸式体验,再到虚拟现实(VR)与增强现实(AR)技术的蓬勃发展,三维图形技术无疑成为了连接现实与虚拟世界的桥梁。而在这众多技术中,Three.js作为一款轻量级、易于上手且功能强大的JavaScript 3D库,凭借其跨平台、高性能的特点,成为了前端开发者探索三维世界的重要工具。本文章基于Three.js 3D人物漫游项目(上)与Three.js 3D人物漫游项目(中)基础上将完成键盘控制人物的动画以及运动。本文已绑定整个项目压缩包,下载解压后直接运行命令yarn serve,网页访问http://localhost:8080/roam3D/index.html即可一键查看项目,也可自行修改源码或人物模型,满足自己的项目。

最终效果

请添加图片描述

1、效果回顾

我们在之前已经有了如下的效果:
请添加图片描述
我们将在此效果上完成人物的动画及运动效果。


2、编写人物模型动画执行类并调用

2.1 代码

我们在src文件目录下新建customAnimations.js,新建动画类,写入如下代码:

import {
    AnimationMixer } from "three";

export default class ModelAnimation {
   
    constructor(model, animations) {
   
        this.mixer = new AnimationMixer(model);
        this.animations = animations;
        this.actionObject = {
   }; // 动画对象
        this.currentAction = null; // 当前动画
        this.previousAction = null; // 上一个动画
    }
    start(name) {
   
        this.actionInit(name);
    }
    actionInit(name) {
   
        this.animations.forEach((clip) => {
   
            console.log(clip)
            const action = this.mixer.clipAction(clip);
            this.actionObject[clip.name] = action; // 将动画以命名为健 值为对的方式存储
        });
        console.log(this.actionObject);
        this.currentAction = this.actionObject[name];
        console.log(this.currentAction);
        this.currentAction.play(

http://www.kler.cn/news/316395.html

相关文章:

  • 统信服务器操作系统a版e版【dde桌面限制登录次数】介绍
  • 大数据处理技术:HBase的安装与基本操作
  • python画正方形、平行四边形、六边形、五角星、风车(四个半圆)
  • ansible远程自动化运维、常用模块详解
  • SpringSecurity -- 入门使用
  • 网络安全-利用 Apache Mod CGI
  • antd table 可展开行的多种控制
  • 相亲交易系统源码详解与开发指南
  • 2024年华为杯数学建模E题-高速公路应急车道启用建模-基于YOLO8的数据处理代码参考(无偿分享)
  • 大厂面试真题:如何保证Kafka的消息不被重复消费
  • Laravel接口中实现WebSocket服务消息发送PHP中使用socket扩展搭建WebSocket服务
  • 网站自动识别使用设备
  • React 知识框架
  • SIP信令的基本流程
  • Android架构组件: MVVM模式的实战应用与数据绑定技巧
  • 低空经济刚需篇:各种道路不畅地区无人机吊装详解
  • Stable Diffusion 优秀博客转载
  • 【方案】智慧消防建设规划方案(PPT)
  • 富格林:积攒经验阻挠欺诈套路
  • 公用代码片码抽取需要不断的强化代码复用意识
  • 【高效且应用广泛的排序 —— 快速排序算法】
  • 如何让程序等待输入
  • springboot 整合酷狗获取MV视频最高画质(使用自己账户)
  • 2024人工智能结课作业-DFS/BFS/Astar解决数码问题
  • Linux主流Web服务器:你选择哪一款?
  • 华为---以太网静态路由配置使用下一跳通信正常,而使用出接口无法通信
  • React项目实战(React后台管理系统、TypeScript+React18)
  • 锤炼核心技能以应对编程革命
  • threejs加载高度图渲染点云,不支持tiff
  • 【Linux:共享内存】