VUE2+THREE.JS 模型上方显示信息框/标签(CSS3DSprite精灵模型)

THREE.JS 模型上方显示信息框/标签---CSS3DSprite精灵模型

  • 1.CSS2DRenderer/CSS3DRenderer/Sprite的优劣
  • 2.实现模型上方显示信息框
    • 2.1 引入
    • 2.2 初始化加载的时候就执行此方法
    • 2.3 animate循环执行
    • 2.4 获取设备状态并在每个设备上显示设备状态
    • 2.5 样式

CSS3DSprite精灵模型面向摄像机,场景缩放时,缩小放大跟随着,会被模型遮挡,可以被射线拾取。
CSS3DRenderer用于通过CSS3的transform属性, 将层级的3D变换应用到DOM元素上。 如果你希望不借助基于canvas的渲染来在你的网站上应用3D变换,那么这一渲染器十分有趣。 同时,它也可以将DOM元素与WebGL的内容相结合。在添加标注前需要先给模型命名

1.CSS2DRenderer/CSS3DRenderer/Sprite的优劣

在这里插入图片描述

2.实现模型上方显示信息框

2.1 引入

import { CSS3DRenderer, CSS3DSprite } from "three/examples/jsm/renderers/CSS3DRenderer.js";

2.2 初始化加载的时候就执行此方法

// 初始化 CSS3DRenderer 设备信息框
initObjectRender() {
	labelRender = new CSS3DRenderer();
	labelRender.setSize(this.$refs.draw.offsetWidth, this.$refs.draw.offsetHeight);
	labelRender.domElement.style.position = "absolute";
	labelRender.domElement.style.top = "0px";
	labelRender.domElement.style.pointerEvents = "none";
	document.getElementById("workshop").appendChild(labelRender.domElement);
},

2.3 animate循环执行

labelRender.render(scene, camera);
在这里插入图片描述

2.4 获取设备状态并在每个设备上显示设备状态

initEqpStatus() {
	let eqpStatus = {};
	const group = new THREE.Group();
	this.eqpList.forEach((item) => {
		const { enCode, status, stateDate } = item;
		eqpStatus[enCode] = { status, stateDate };
	});
	scene.traverse(async (obj) => {
	    //获取设备名称
		const regex = /[^\_\)]+(?=\()/g;
		const eqpEnCode = obj.name.match(regex);
		//说明为当前设备
		if (eqpEnCode && eqpStatus[eqpEnCode[0]]) {
			let { status, stateDate } = eqpStatus[eqpEnCode[0]];

            //以下为生成标签关键代码
			const shpereMesh = this.createCpointMesh(eqpEnCode[0], obj.position.x, obj.position.y + 500, obj.position.z);
			group.add(shpereMesh);

			const p = document.createElement("p");

			const pContainer = document.createElement("div");
			pContainer.className = `workshop-text ${this.deviceStateBg(status.toUpperCase())}`;
			pContainer.style.pointerEvents = "none"; //避免HTML标签遮挡三维场景的鼠标事件
			pContainer.appendChild(p);
			const cPointLabel = new CSS3DSprite(pContainer);
			cPointLabel.scale.set(1.2, 1.2, 1.2); //根据相机渲染范围控制HTML 3D标签尺寸
			cPointLabel.rotateY(Math.PI / 2); //控制HTML标签CSS3对象姿态角度
			cPointLabel.position.set(obj.position.x, obj.position.y + 500, obj.position.z);
			scene.add(cPointLabel);

			p.textContent = eqpEnCode[0];//标签显示内容
		}
	});
},
// 设备状态颜色
deviceStateBg(val) {
	const state = {
		RUNNING: "RUNNING",
		IDLE: "IDLE",
		OFFLINE: "OFFLINE",
		"Planned Downtime": "IDLE",
	};
	return state[val];
},
//创建基础模型
createCpointMesh(name, x, y, z) {
	const geo = new THREE.BoxGeometry(0.1);
	const mat = new THREE.MeshBasicMaterial({ color: 0xff0000 });
	const mesh = new THREE.Mesh(geo, mat);
	mesh.position.set(x, y, z);
	mesh.name = name;
	return mesh;
},

2.5 样式

.workshop-text {
	box-shadow: 0 0 5px #2d69a1;
	padding: 10px;
	background: #2d69a154;
}

.workshop-text p {
	font-size: 0.3rem;
	font-weight: bold;
	padding: 10px;
	color: #fff;
}
.workshop-text.IDLE {
	background: #ecd272 !important;
}

.workshop-text.RUNNING {
	background: #86efd4 !important;
}

.workshop-text.OFFLINE {
	background: #8ab1de !important;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【java+vue+微信小程序项目】从零开始搭建——健身房管理平台(1)项目搭建

项目笔记为项目总结笔记,若有错误欢迎指出哟~ 【项目专栏】 【java+vue+微信小程序项目】从零开始搭建——健身房管理平台(1)项目搭建 持续更新中… java+vue+微信小程序项目】从零开始搭建——健身房管理平台 项目简介Java项目搭建(IDEA)1.新建项目2.项目类型3.项目设置4…

【Node.js】笔记整理4 - 版本管理工具nvm

写在最前:跟着视频学习只是为了在新手期快速入门。想要学习全面、进阶的知识,需要格外注重实战和官方技术文档,文档建议作为手册使用 系列文章 【Node.js】笔记整理 1 - 基础知识【Node.js】笔记整理 2 - 常用模块【Node.js】笔记整理 3 - n…

《微信小程序开发从入门到实战》学习三十七

4.2 云开发JSON数据库 4.2.8 分页查询 在计算机互联网时代,很多页面底部分页导航按钮,有首页、上一页、第一页、第二页、尾页。 分页查询是指根据页码将每一页的数据查询出来。 在移动互联网时代,网页和应用都对网页进行优化,…

【Serverless架构组成及优势适用场景】

目录 引言 一、无服务器函数(Serverless Functions) 二、事件驱动(Event-Driven) 三、自动扩展(Auto Scaling) 四、按需计费(On-Demand Billing) 五、无状态(State…

程序/进程替换(讲解)

本文旨在讲解进程替换的知识!希望读完本文,能使读者对进程替换有更深一步的认识!!好的,废话不多说,干货来了! 进程替换的引进! 为什么要引进进程替换呢?我们创建子进程总…

系列十三、SpringBoot的自动配置原理

一、概述 我们知道Java发展到现在功能十分的强大,生态异常的丰富,这里面离开不了Spring及其家族产品的支持,而作为Spring生态的明星产品Spring Boot可以说像王者一般的存在,那么的耀眼,那么的光彩夺目!那么…

QT线程的使用 循环中程序的等待

QT线程的使用 循环中程序的等待 先看效果1 pro文件2 头文件3 源文件4 ui文件先看效果 1 pro文件 QT += concurrent2 头文件 #ifndef MAINWINDOW_H #define MAINWINDOW_H

Vue中 env 文件是如何读取的? 优先级?

Vue中 env 文件是如何读取的? 优先级? start 今天来研究一下 Vue 中 env 是如何读取的。跟着我的脚步来学习一下吧。作者:番茄;编写时间:2023/11/30 前情提要 env,使用方式是process.env。简单来说&…

数学建模-基于脑出血患者院前指标的多种机器学习预测模型构建及比较研究

基基于脑出血患者院前指标的多种机器学习预测模型构建及比较研究 整体求解过程概述(摘要) 卒中是全球致残率、致死率最高的疾病之一,其中脑出血(Intracerebral hemorrhage,ICH)患者仅占卒中患者的 20%,但致残、死亡人…

【深度学习】KMeans中自动K值的确认方法

1 前言 聚类常用于数据探索或挖掘前期,在没有做先验经验的背景下做的探索性分析,也适用于样本量较大情况下的数据预处理等方面工作。例如针对企业整体用户特征,在未得到相关知识或经验之前先根据数据本身特点进行用户分群,然后再…

【腾讯云云上实验室】个人对腾讯云向量数据库的体验心得

目录 前言Tencent Cloud VectorDB概念使用初体验腾讯云向量数据库的优势应用场景有哪些?未来展望番外篇:腾讯云向量数据库的设计核心结语 前言 还是那句话,不用多说想必大家都能猜到,现在技术圈最火的是什么?非人工智…

Spring Security 6.x 系列(7)—— 源码分析之建造者模式

一、建造者模式 WebSecurity、HttpSecurity、AuthenticationManagerBuilder 都是框架中的构建者,把他们放到一起看看他们的共同特点: 查看AuthenticationManagerBuilder的继承结构图: 查看HttpSecurity的继承结构图: 查看WebSec…

Logstash使用指南

介绍 Logstash是一个开源数据收集引擎,具有实时管道功能。它可以动态地将来自不同数据源的数据统一起来,并将数据标准化到你所选择的目的地。尽管Logstash的早期目标是搜集日志,现在它的功能已完全不只于此。任何事件类型都可以加入分析&…

鸿蒙原生应用/元服务开发-开发者如何进行真机测试

前提条件:已经完成鸿蒙原生应用/元服务开发,已经能相对熟练使用DevEco Studio,开发者自己有鸿蒙4.0及以上的真机设备。 真机测试具体流程如下 1.手机打开开发者模式 2.在项目中,左上角 文件(F)->项目结构 进行账号连接 3.运行

智慧配电间(配电室智能监控)

智慧配电间是一种应用物联网、云计算、大数据等先进技术,对配电室进行智能化改造和升级,依托电易云-智慧电力物联网,实现电力设备的实时监控、智能控制和远程管理的解决方案。以下是智慧配电间的主要功能和特点: 实时监控与数据分…

简明指南:使用Kotlin和Fuel库构建JD.com爬虫

概述 爬虫,作为一种自动化从网络上抓取数据的程序,广泛应用于数据分析、信息提取以及竞争对手监控等领域。不同的实现方式和编程语言都能构建出高效的爬虫工具。在本文中,我们将深入介绍如何充分利用Kotlin和Fuel库,构建一个简单…

【蓝桥杯选拔赛真题28】C++口罩分配 第十三届蓝桥杯青少年创意编程大赛C++编程选拔赛真题解析

目录 C/C++口罩分配 一、题目要求 1、编程实现 2、输入输出 二、算法分析 <

IOS/安卓+charles实现抓包(主要解决证书网站无法打开问题)

安装 官网下载 https://www.charlesproxy.com/latest-release/download.do 安装charles文档 流程 上述链接解决下图问题 使用介绍 Charles介绍 上述链接看一至三即可&#xff0c;了解首页各个按钮的作用 charles全面使用教程及常见功能详解&#xff08;较详细&#xff09…

常见智力题汇总

常见智力题汇总 扔瓶子问题扑克牌问题出队问题烧绳子问题赛马问题求出前三名求出前五名 接水问题种树问题硬币问题宝石问题核酸检测问题 笔者最近面试遇到了好几道智力题&#xff0c;这些题目特点就是如果没有见过&#xff0c;很难第一时间思考得到答案&#xff0c;因此笔者面试…

Spire.Office 8.11.2 for NET fix Crack

内容摘自来自互联网------或者SDK官方本身手册 Spire.Doc for .NET A professional Word .NET library designed to create, read, write, convert and print Word document files in any .NET ( C#, VB.NET, ASP.NET, .NET Core, Xamarin ) application with fast and high qu…
最新文章