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

news2024/9/23 17:31:31

本文目录

  • 前言
  • 最终效果
  • 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.coloradmin.cn/o/2158083.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

1000Km弹射巡飞器技术详解

随着现代战争形态的演变及科技水平的飞速提升,远程侦察、打击与持久监视能力成为各国军事力量建设的重要方向。1000Km弹射巡飞器作为一种新型无人机系统,凭借其超远的航程、长时间的续航以及高度的灵活性,成为近年来军事技术领域的研究热点。…

开源ids snort (windows版)

Snort-IPS-on-Windows-main资源-CSDN文库 GitHub - eldoktor1/Snort-IPS-on-Windows: A comprehensive guide to installing and configuring Snort IPS on Windows, ensuring robust network security 手动打造Snortbarnyard2BASE可视化告警平台 - FreeBuf网络安全行业门户 …

记录|项目管理软件PingCode使用【待更新】

目录 前言一、项目的创建二、需求2.1 需求页面认识 2.2 添加需求更新时间 前言 参考视频: 快速上手PingCode:创建Scrum、看板、瀑布项目 这个主要用于细化自己和队友、团队之间的任务,进一步管理整个的软件开发的进度。【如下图】 一、项目的…

Python可迭代对象(2)

目录 3。字典 字典的构造 字典的添加和修改 字典推导式的使用 以上全部代码编译结果展示 字典复习 4。集合(set) 集合的创建 集合的运算 集合的添加和删除元素 以上全部代码的编译结果 序列解包(Sequence unpacking) 3。字典 字典的构造 #字…

ChatGLM-6B 部署与使用——打造你的专属GLM

ChatGLM-6B 部署与使用指南 ChatGLM-6B 是清华大学与智谱 AI 开源的一款对话语言模型,基于 General Language Model (GLM) 架构,参数达到 62 亿,因其卓越的语言理解与生成能力,受到广泛关注。 一、在 DAMODEL 上部署 ChatGLM-6B…

AD层次化设计中的常见错误

Duplicate Net Names Wire 仔细检查是不是网络标签没有标上 网络标签是否一致 Nets Wire has multiple names 上面的步骤也要检查 然后设置如下:

基于丹摩智算平台-手把手拿下经典目标检测模型 Faster-Rcnn

文章目录 1. 前言1. 1 丹摩智算平台1.2 经典目标检测模型 Faster-Rcnn 2. 前置准备2.1 WindTerm(远程连接服务器)2.2 项目源码 3. 服务器平台配置3.1 创建实例3.2 远程链接 4. Faster-rcnn 的环境配置4.1 上传文件,解压4.2 安装所需环境 5. 数…

在Windows系统上安装的 zstd C++ 库

在Windows系统上安装的 zstd C 库 项目地址:安装步骤步骤一步骤二 效果 项目地址: https://github.com/facebook/zstd 经过观察发现,这个项目没有CMakeLists.txt,只有Makefile,但是Makefile在windows系统下没有什么用, 所以说,常规的方式安装不可取了 安装步骤 步骤一 往下…

idea上使用tomcat运行web项目

idea上使用tomcat运行web项目 首先需要安装tomcat,可以查看我上一篇文章 如果你已经配置tomcat,这里不需要改动。如果未配置,需要在这里选择你tomcat目录 修改下面的上下文,也就是网页上访问时http://localhost:8080/后面拼…

算数运算之短路

c语言的表达式是从左往右求值的,我们在面对&&(按位与)和||(按位或)我们要根据与还有或的特性在判断是否能够使句子能够运行下去,就举个简单的例子 if(month 12 || month1 || month 2) { printf…

LeetCode 2374.边积分最高的节点:模拟

【LetMeFly】2374.边积分最高的节点:模拟 力扣题目链接:https://leetcode.cn/problems/node-with-highest-edge-score/ 给你一个有向图,图中有 n 个节点,节点编号从 0 到 n - 1 ,其中每个节点都 恰有一条 出边。 图…

英伟达开源 NVLM 1.0 引领多模态 AI 变革

新闻 NVLM 1.0 是由英伟达(Nvidia)最新推出的一系列前沿级别的多模态大型语言模型(MLLM),这些模型在视觉-语言任务上取得了与领先专有模型(例如 GPT-4o)和开放访问模型(例如 Llama 3…

[干货] [非基础警告] Unity 发布-订阅模式下的事件中心设计

本文师承于唐老师,但是修改了一些代码,采用更加方便理解的方式设计 1.什么是事件中心 2.可以比喻成冒险者工会的任务板子 任务板子上面有发布任务和任务完成两种基础情况 2.1 发布任务 来个冒险者发布一个任务,就执行Pulishtask方法 这…

【软件工程】状态转换图 其他图形工具

状态转换图 一、定义 二、符号表示 其他图形工具 一、层次方框图 二、Warmer图 三、IPO图 例题 选择题

【k8s】:DevOps 模式详解

1.什么是DevOps模式? DevOps 是当下非常火爆的一个概念,受到了很多互联网巨头的推崇。那么什么是 DevOps?它的全称是:集成开发与运维。至于它到底是干什么用的,为什么现在这么火爆,还得从源头说起。 1.1 …

无线感知会议系列【4】【基于WiFi和4G/5G的非接触无线感知:挑战、理论和应用-2】

前言: 本篇重点分享一下该论文 《Human Respiration Detection with Commodity Wifi Devices: Do User Location and Body Orientation Matter》 接 2020年北京智源大会 张大庆老师的一个报告 参考: https://blog.csdn.net/chengxf2/article/detai…

17.2 ksm源码讲解

本节重点介绍 : k8s资源对象的 buildStores构造函数注入MetricFamiliesk8s client-go 之 Reflector listAndWatch 方法watchHandler 监听更新,调用add等action 架构图总结 项目地址 地址 go get go get -v -d k8s.io/kube-state-metrics/v2v2.1.1源码分析 m…

uniapp微信小程序用户授权方法

效果 步骤 1&#xff09;div标签 <button type"primary" class"btn-login" click"getUserInfo">一键登录</button>2&#xff09;js方法 methods: {getUserInfo() {console.log("aaaa")uni.getUserProfile({desc: Wexin, …

Python画笔案例-056 绘制正方形金字塔

1、绘制正方形金字塔 通过 python 的turtle 库绘制 正方形金字塔,如下图: 2、实现代码 绘制正方形金字塔,以下为实现代码: """正方形金字塔.py """ import turtledef draw_square(length):for _ in

【Linux】yum、vim、gcc使用(超详细)

目录 yum 安装软件 卸载软件 查看安装包 安装一下好玩的命令 vim vim基本操作 模式切换 命令集 vim批量注释 vim配置 gcc 函数库 小知识点&#xff1a; Linux中常见的软件安装方式 --------- 下载&&安装 a、yum/apt b、rpm安装包安装 c、源码安装 y…