VUE2+THREE.JS 设定巡航行动轨迹

news2025/1/13 15:53:49

设定巡航行动轨迹

  • 引入three.path
  • 初始化坐标点
  • animate 执行行动轨迹动画
  • 参考博客

我们写3D时,常常会有按照一定轨迹去浏览模型,
所以,我们要先确认行动轨迹,渲染出行动轨迹以后,再让人物按照行动轨迹去移动

在这里插入图片描述

引入three.path

cnpm i three.path

// 绘制路径,相较于tubeGeometry,贴图的效果展现得更好
import { PathGeometry, PathPointList } from "three.path";

初始化坐标点

1.设定关键点

这些关键点,可以通过点击模型事件,获取世界坐标点,快捷的确认点的位置

//漫游路径参数
let pointArr = [
	[-8978.959517900606, 45.881342118136104, 1947.554962778966],
	[13093.059569307103, 45.881343841552734, 1947.554962778966],
	[13293.059569307103, 45.881343841552734, 1947.554962778966],
	[13293.059569307103, 45.881343841552734, 1747.554962778966],
	[13293.059569307103, 45.881343841552734, -1927.1468571561695],
	[13293.059569307103, 45.881343841552734, -2127.1468571561695],
	[13093.059569307103, 45.881343841552734, -2127.1468571561695],
	[-8698.372139134899, 45.881343841552734, -2127.1468571561695],
	[-8898.372139134899, 45.881343841552734, -2127.1468571561695],
	[-8898.372139134899, 45.881343841552734, -2327.1468571561695],
	[-8898.372139134899, 45.881343841552734, -5454.887204286608],
	[-8898.372139134899, 45.881343841552734, -5654.887204286608],
	[-8698.372139134899, 45.881343841552734, -5654.887204286608],
	[13164.994912910091, 45.881343841552734, -5654.887204286608],
	[13364.994912910091, 45.881343841552734, -5654.887204286608],
	[13364.994912910091, 45.881343841552734, -5854.887204286608],
	[13319.501150018768, 45.881343841552734, -9088.742337004702],
	[13319.501150018768, 45.881343841552734, -9288.742337004702],
	[13119.501150018768, 45.881343841552734, -9288.742337004702],
	[-9286.076169289825, 45.881343841552734, -9288.742337004702],
	[-9486.076169289825, 45.881343841552734, -9288.742337004702],
	[-9486.076169289825, 45.881343841552734, -9088.742337004702],
	[-9486.076169289825, 45.881343841552734, 4684.565209431695],
	[-9486.076169289825, 45.881343841552734, 4984.565209431695],
	[-9286.076169289825, 45.881343841552734, 4984.565209431695],
	[12897.021265345924, 45.881343841552734, 4984.565209431695],
	[13097.021265345924, 45.881343841552734, 4984.565209431695],
	[13097.021265345924, 45.881343841552734, 5689.140945882991],
];

2.初始化路径漫游–坐标

可以通过创建圆点,直观的看出点的位置

//路径漫游 -- 坐标
initPathPoints() {
	// 将数组转为坐标数组
	let points = [];

	// 每3个元素组成一个坐标
	for (let i = 0; i < pointArr.length; i++) {
		// 将数组中的三个元素,分别作为坐标的x, y, z
		points.push(new THREE.Vector3(pointArr[i][0], pointArr[i][1], pointArr[i][2]));
		//创建圆点
		// const geo = new THREE.SphereGeometry(50);
		// const mat = new THREE.MeshBasicMaterial({ color: 0xff0000 });
		// const mesh = new THREE.Mesh(geo, mat);
		// mesh.position.set(pointArr[i][0], pointArr[i][1], pointArr[i][2]);
		// mesh.name = i;
		// scene.add(mesh);
	}

	// 生成一条不闭合曲线 pathCurve 全局定义的参数
	pathCurve = new THREE.CatmullRomCurve3(points);
},
  1. 绘制路径到场景里
    在这里插入图片描述
//绘制路径到场景下
async renderPath() {
	// 金色箭头的png作为材质
	const arrow = await new THREE.TextureLoader().loadAsync(require("../../assets/images/3ddashboard/3dworkshop/jiantou2.png"));
	// 贴图在水平方向上允许重复
	arrow.wrapS = THREE.RepeatWrapping;

	// 向异性
	arrow.anisotropy = renderer.capabilities.getMaxAnisotropy();

	// 创建一个合适的材质
	const material = new THREE.MeshPhongMaterial({
		map: arrow,
		transparent: true, //透明度
		depthWrite: false,
		blending: THREE.AdditiveBlending,
	});

	// 确定一个向上的向量
	const up = new THREE.Vector3(0, 1000, 0);

	// region 引入three.path包

	// 创建路径点的集合
	pathPoints = new PathPointList();

	// 设置集合属性
	pathPoints.set(pathCurve.getPoints(1000), 0.5, 2, up, false);

	// 创建路径几何体
	const geometry = new PathGeometry();

	// 更新几何体的属性
	geometry.update(pathPoints, {
		width: 200,
		arrow: false,
	});

	// 创建路径的网格模型
	pathToShow = new THREE.Mesh(geometry, material);
	pathToShow.name = "path";
	// 添加到场景
	scene.add(pathToShow);

	// endregion 引入three.path包

	// 在每一帧渲染的时候,更新贴图沿x轴的偏移量,形成uv动画效果
	this.registerRenderFunc("walk-way", () => {
		arrow.offset.x -= 0.02;
	});
},

/**
 * 注册渲染中执行的方法
 * @param name 设定函数名称
 * @param func 函数方法体
 */
registerRenderFunc(name, func) {
	renderFunc[name] = func;
},

animate 执行行动轨迹动画

// 执行行动轨迹移动动画
if (renderFunc["walk-way"]) {
	renderFunc["walk-way"](delta);
}

参考博客

博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1294564.html

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

相关文章

ssm校园论坛管理系统项目分享

校园论坛管理系统是基于java编程语言&#xff0c;mysql数据库&#xff0c;ssm框架和idea工具开发&#xff0c;本系统主要分为学生用户&#xff0c;管理员两个角色&#xff0c;其中用户可以注册登陆系统&#xff0c;在线发帖&#xff0c;查看栏目帖子&#xff0c;回复帖子&#…

【数据分析实战】酒店行业华住集团门店分布与评分多维度分析

文章目录 1. 写在前面2. 数据集展示3. 多维度分析3.1 门店档次多元化&#xff1a;集团投资战略观察3.1.1 代码实现3.1.2 本人浅薄理解 3.2 门店分布&#xff1a;各省市分布概览3.2.1 代码实现3.2.2 本人浅薄理解 3.3 门店分级评分&#xff1a;服务水平的多维度观察3.3.1 代码实…

远程服务器QEMU+Ubuntu+GRUB+VNC最佳实践

远程服务器QEMUUbuntuGRUBVNC最佳实践 1. 准备2. QEMU启动安装Ubuntu2.1 服务器端2.2 本地端 3. 从服务器终端控制虚拟机GRUB与虚拟机终端 这段时间参与大量内核切换测试工作&#xff0c;实体机需要硬件自检太过笨重&#xff0c;因此主要通过QEMU验证正确性。有一个很大的问题是…

开源项目CuteSqlite开发笔记(二):SQLite的架构

在开发CuteSqlite图形客户端的时候&#xff0c;需要用到SQL的语法解释&#xff0c;来对SQL语句进行优化。找了很多的SQL语法解释器&#xff0c;都不是十分满意&#xff0c;只有翻开Sqlite的源码&#xff0c;看看SQLite对SQL语句的解释过程&#xff0c;本文是翻译的官方文档。 官…

模块电源(六):前馈电容

一、前馈电容&#xff1a; 前馈电容是与电阻分压的顶部电阻 并联的"可选电容器" 二、计算及仿真&#xff1a; 1、计算 无前馈电容时&#xff0c;输出电压&#xff1a;&#xff1b;有前馈电容时&#xff0c;输出电压&#xff1a;&#xff0c;(其中&#xff0c;&am…

如何解决5G基站高能耗问题?

安科瑞 须静燕 截至2023年10月&#xff0c;我国5G基站总数达321.5万个&#xff0c;占全国通信基站总数的28.1%。然而&#xff0c;随着5G基站数量的快速增长&#xff0c;基站的能耗问题也逐渐日益凸显&#xff0c;基站的用电给运营商带来了巨大的电费开支压力&#xff0c;降低5…

JavaSE基础50题:17. (递归)求1+2+3+……+10

概述 递归求123……10 代码 public class P17 {public static int sum(int n) {if (n 1) {return 1;}return n sum(n-1);}public static void main(String[] args) {System.out.println(sum(10)); //55} }运行过程 如&#xff1a;1234&#xff0c;最后的结果为10

Nacos源码解读07——集群数据同步

Distro协议背景 Distro 协议是 Nacos 社区自研的⼀种 AP 分布式协议&#xff0c;是面向临时实例设计的⼀种分布式协议&#xff0c; 其保证了在某些 Nacos 节点宕机后&#xff0c;整个临时实例处理系统依旧可以正常工作。作为⼀种有状态 的中间件应用的内嵌协议&#xff0c;Dis…

柏林噪声C++

柏林噪声 随机噪声 如上图所示随机噪声没有任何规律可言&#xff0c;我们希望生成有一些意义的局部连续的随机图案 一维柏林噪声 假设希望生成一段局部连续的随机曲线&#xff0c;可以采用插值的方式&#xff1a;在固定点随机分配y值&#xff08;一般是整数点&#xff09;&a…

docker安装elasticsearch8.5.0和kibana

服务器环境&#xff0c;centos7 一、安装elasticsearch 1. 创建一个es和kibana通用的网络 docker network create es-net 2. 拉取es镜像&#xff0c;这里选择8.5.0版本 docker pull elasticsearch:8.5.03. 创建挂载目录&#xff0c;并授权 mkdir /usr/local/install/ela…

WebStorm:Mac/Win上强大的JavaScript开发工具

WebStorm是JetBrains公司开发的针对Mac和Windows系统的JavaScript开发工具。它为开发者提供了一站式的代码编辑、调试、测试和版本控制等功能&#xff0c;帮助你更高效地进行Web开发。新版本的WebStorm 2023在性能和用户体验方面都做出了重大改进&#xff0c;让你的JavaScript开…

机器学习实战:预测波士顿房价

前言&#xff1a; Hello大家好&#xff0c;我是Dream。 今天来学习一下机器学习中一个非常经典的案例&#xff1a;预测波士顿房价&#xff0c;在此过程中也会补充很多重要的知识点&#xff0c;欢迎大家一起前来探讨学习~ 一、导入数据 在这个项目中&#xff0c;我们利用马萨诸…

富时中国A50指数查询方法详解

富时中国A50指数&#xff0c;是指衡量中国A股市场50家具有代表性的上市公司股票表现的指数。对于投资者来说&#xff0c;了解和查询A50指数的走势对于制定投资策略至关重要。那么&#xff0c;如何轻松地查询富时中国A50指数呢&#xff1f; 1. 百度搜索 百度搜索引擎是最简便的…

【Node.js后端架构:MVC模式】基于expres讲解

Node.js后端架构&#xff1a;MVC模式 什么是MVC MVC (Model-View-Controller) 是一种软件设计模式&#xff0c;用于将应用程序的逻辑分离成三个不同的组件&#xff1a;模型、视图和控制器。 模型&#xff08;Model&#xff09;负责处理应用程序的数据逻辑。它负责从数据库或其…

使用Netty实现文件传输的HTTP服务器和客户端

现在我们来用netty实现文件传输的HTTP服务器和客户端 pom依赖文件&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-insta…

国内好用的CRM系统你知道哪些?看看这篇吧

选择CRM系统需要考虑许多因素&#xff0c;其中一个重要的标准是用户数量。使用广泛、受到用户认可的CRM系统&#xff0c;无论是在功能、易用性、灵活性还是价格上&#xff0c;都会给企业带来更多的益处。有什么国内用得比较多的CRM系统吗&#xff1f; 以Zoho CRM为例&#xff…

Linux学习教程(第十四章 Linux系统服务管理)一

第十四章 Linux系统服务管理&#xff08;一&#xff09; 什么是系统服务&#xff1f;服务是在后台运行的应用程序&#xff0c;并且可以提供一些本地系统或网络的功能。 那么&#xff0c;Linux 中常见的服务有那些&#xff0c;这些服务怎么分类&#xff0c;服务如何启动&#x…

视频处理关键知识

1 引言 视频技术发展到现在已经有100多年的历史&#xff0c;虽然比照相技术历史时间短&#xff0c;但在过去很长一段时间之内都是最重要的媒体。由于互联网在新世纪的崛起&#xff0c;使得传统的媒体技术有了更好的发展平台&#xff0c;应运而生了新的多媒体技术。而多媒体技术…

为什么感染HPV的人越来越多?劲松中西医结合医院专家发表看法

近年来&#xff0c;HPV感染率在我国呈现上升趋势&#xff0c;引起了社会的广泛关注。HPV是一种人乳头瘤病毒&#xff0c;主要通过性接触传播&#xff0c;也是引起宫颈癌的主要原因之一。那么&#xff0c;为什么我国的HPV感染率如此高呢&#xff1f; 首先&#xff0c;我们需要了…

手把手教你写 Compose 动画 -- 讲的不能再细的 AnimationSpec 动画规范

前面我们聊过 animateDpAsState 和 Animatable 两种动画 API 的用法&#xff0c;但只是简单了解了&#xff0c;这两个函数内部都有一个共同的核心参数&#xff1a;AnimationSpec。 Composable fun animateDpAsState(targetValue: Dp,animationSpec: AnimationSpec<Dp> …