threejs 3D标注

在这里插入图片描述

import { CSS3DObject } from "three/examples/jsm/renderers/CSS3DRenderer";gltfLoader.load("./model/exhibit2.glb", (gltf) =>{let array = ["雕像", "中药房", "浸制区", "道地沙盘","动物标本区","灵芝","茶话室","药材制作"];console.log(gltf)this.exhibitionHall = gltf.scene;// 判断子元素是否是物体this.exhibitionHall.traverse((child) => {if(child.isMesh){child.material.emissiveIntensity = 15;}if (array.indexOf(child.name) !== -1){console.log(child)const css3DObject = this.createTag(child);css3DObject.visible =truethis.floor2Tags.push(css3DObject);this.exhibitionHall.add(css3DObject);}})let fakeChild = {name: "标注",position: {x:100,y:100,z:20}}const css3DObject = this.createTag(fakeChild);css3DObject.visible =truethis.floor2Tags.push(css3DObject);this.exhibitionHall.add(css3DObject);this.exhibitionHall.position.set(0,0,0)this.exhibitionHall.scale.set(15,15,15)console.log(gltf)scene.add(this.exhibitionHall)})createTag(object3d) {// 创建各个区域的元素const element = document.createElement("div");element.className = "elementTag";element.innerHTML = `<div class="elementContent"><h3>${object3d.name}</h3><p>温度:26℃</p><p>湿度:50%</p></div>`;const objectCSS3D = new CSS3DObject(element);objectCSS3D.position.copy(object3d.position);objectCSS3D.scale.set(0.2, 0.2, 0.2);return objectCSS3D;// scene.add(objectCSS3D);}
css 样式内不要加 scoped 会找不到样式
// app.vue
<style lang="less">.cssrender {display: flex;position: fixed;top: 0;left: 0;z-index: 100;pointer-events: none;
}.elementTag {position: relative;left: -30px;top: 20px;
}
.elementTag::before {content: "";display: block;position: absolute;width: 100px;height: 1px;background: rgb(127 177 255 / 75%);bottom: 0;right: -100px;transform-origin: 0 0;transform: rotate(30deg);
}
.elementTag::after {content: "";display: block;position: absolute;width: 20px;height: 20px;background: rgb(127 177 255 / 75%);bottom: -65px;right: -105px;border-radius: 50%;
}.elementContent {background-color: rgb(20 143 221 / 68%);box-shadow: 0px 0px 12px rgb(0 128 255 / 75%);border: 1px solid rgb(127 177 255 / 75%);padding: 20px;color: #efefef;
}.elementContent h3 {font-size: 20px;font-weight: bold;margin: 15px 0;color: #efefef;
}
</style>
//index.html 
// 加入css样式渲染区
<div class="cssrender"></div>
// renderer.js
import { CSS3DRenderer } from "three/examples/jsm/renderers/CSS3DRenderer.js";// 创建css3drender
// 所有涉及到渲染的 都需要css3drender 去渲染
const css3drender = new CSS3DRenderer();
css3drender.setSize(window.innerWidth, window.innerHeight);
document.querySelector(".cssrender").appendChild(css3drender.domElement);
export default { css3drender };import rendererModule from "@/three/renderer.js";
// 使用渲染器渲染相机看到这个场景的内容渲染出来
rendererModule.renderer.render(scene, cameraModule.activeCamera);
rendererModule.css3drender.render(scene, cameraModule.activeCamera);

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java——Stream流的学习

在开发过程中&#xff0c;经常或忽略流的使用&#xff0c;导致用的不熟练&#xff0c;于是抽时间系统的学习下stream的使用&#xff0c;找了哔哩哔哩的教程跟着看看练练。 准备工作 创建Book、Aurhor实体类&#xff0c;初始化数据 public static List<Author> getAuth…

【Linux | C++ 】基于环形队列的多生产者多消费者模型(Linux系统下C++ 代码模拟实现)

阅读导航 引言一、生产者消费者模型二、环形队列简介三、基于环形队列的生产者消费者模型&#xff08;C 代码模拟实现&#xff09;⭕Makefile文件⭕ . h 头文件✅sem.hpp✅ringQueue.hpp ⭕ . cpp 文件✅testMain.cpp 温馨提示 引言 在上一篇文章中&#xff0c;我们深入探讨了…

如何在CentOS安装SQL Server数据库并实现无公网ip环境远程连接

文章目录 前言1. 安装sql server2. 局域网测试连接3. 安装cpolar内网穿透4. 将sqlserver映射到公网5. 公网远程连接6.固定连接公网地址7.使用固定公网地址连接 前言 简单几步实现在Linux centos环境下安装部署sql server数据库&#xff0c;并结合cpolar内网穿透工具&#xff0…

异常统一处理:HttpRequestMethodNotSupportedException(Http请求方法不支持异常)

一、引言 本篇内容是“异常统一处理”系列文章的重要组成部分&#xff0c;主要聚焦于对 HttpRequestMethodNotSupportedException 的原理解析与异常处理机制&#xff0c;并给出测试案例。 关于 全局异常统一处理 的原理和完整实现逻辑&#xff0c;请参考文章&#xff1a; 《Sp…

STM32 USART详细解读(理论知识)

文章目录 前言一、同步传输和异步传输二、UART协议三、UART硬件结构1.波特率&#xff0c;数据位&#xff0c;校验位&#xff0c;停止位设置2.数据发送流程3.数据接收流程4.中断控制 总结 前言 本篇文章来给大家讲解一下STM32中的USART&#xff0c;USART是STM32中非常重要的一个…

Vscode vim 插件使用Ctrl+C和V进行复制粘贴到剪切板

Vscode vim 插件使用CtrlC和V进行复制粘贴到剪切板 使用这一个插件的时候复制粘贴和其他软件互动的时候体验不好, 并且不可以用Ctrl c, Ctrl v很不爽 "vim.commandLineModeKeyBindings": [{"before" : ["Ctrl", "c"],"after&q…

索引失效的10中场景

目录 前言 1. 准备工作 1.1 创建user表 1.2 插入数据 1.3 查看数据库版本 1.4 查看执行计划 2. 不满足最左匹配原则 2.1 哪些情况索引有效&#xff1f; 2.2 哪些情况索引失效&#xff1f; 3. 使用了select * 4. 索引列上有计算 5. 索引列用了函数 6. 字段类型不同 …

Vue25 过滤器

实例 dayjs.min.js需要去bootcdn下载 <!DOCTYPE html> <html><head><meta charset"UTF-8" /><title>过滤器</title><script type"text/javascript" src"../js/vue.js"></script><script t…

第三讲 数据存储

面向磁盘的架构 DBMS 假定数据库的主要存储位置位于非易失性磁盘【non-volatile disk】上。 DBMS 的组件【components】负责管理非易失性【non-volatile】和易失性【volatile】存储之间的数据移动。 为了理解来回移动数据的影响&#xff0c;我们首先要先理解存储层次结构是什么…

C#分部类、分割类的用法,及用分割类设计一个计算器

目录 一、涉及到的知识点 1.分部类 2.分部类主要应用在以下两个方面 3.合理使用分部类分割类 4.事件处理程序 5.Math.Ceiling方法 6.Text.Contains() 7.pictureBox.Tag属性 二、实例 1.源码 2.生成效果 在开发一些大型项目或者特殊部署时&#xff0c;可能需要…

Appium Python自动化测试之环境搭建

Appium简介 Appium是一个自动化测试开源工具&#xff0c;支持IOS和Android平台上的移动原生应用、移动Web应用和混合应用。所谓的“移动原生应用”是指那些用IOS或者Android SDK写的应用&#xff1b;所谓的“移动Web应用”是指使用移动浏览器方位的应用&#xff08;Appium支持…

SQL注入工具之SQLmap入门操作

了解SQLmap 基础操作 SQLmap是一款自动化的SQL注入工具&#xff0c;可以用于检测和利用SQL注入漏洞。 以下是SQLmap的入门操作步骤&#xff1a; 1.下载SQLmap&#xff1a;可以从官方网站&#xff08;https://sqlmap.org/&#xff09;下载最新版本的SQLmap。 2.打开终端&#…