Threejs进阶之五:使用CSS2DRenderer给模型添加HTML标签

2023-11-17

这一节给场景中的模型添加标签,想实现的效果是,通过鼠标点击场景中摩托车的某个部位,则在场景中出现一个标签,并在标签上显示该部位的信息。最终的效果图如下:
在这里插入图片描述
要实现上面的效果,需要用到CSS 2D渲染器,先来了解下CSS 2D渲染器

CSS2DRenderer(CSS 2D渲染器)

CSS2DRenderer(CSS 2D渲染器)可以把HTML元素作为标签标注到三维场景中,CSS2DRenderer是CSS3DRenderer(CSS 3D渲染器)的简化版本,它唯一支持的变换是位移。通过CSS2DRenderer我们可以将三维物体和基于HTML的标签相结合,来更好的表达场景中物体的信息。

构造函数

CSS2DRenderer()

方法

.getSize () 返回一个包含有渲染器宽和高的对象。

.render ( scene : Scene, camera : Camera ) 使用camera渲染scene。

.setSize (width : Number, height : Number) 将渲染器的尺寸调整为(width, height).

使用CSS2DRenderer

CSS2DRenderer是threejs提供的扩展库,在threejs文件包目录examples/jsm/renderers/,文件夹下面可以找到CSS2DRenderer.js扩展库。

CSS2DRenderer.js提供了两个类CSS2DRenderer(CSS2D渲染器)和CSS2DObject(CSS2D模型对象)

要使用CSS2DRenderer,我们需要先将其引入

// 引入CSS2渲染器CSS2DRenderer和CSS2模型对象CSS2DObject
import {
    CSS2DRenderer,CSS2DObject } from 'three/examples/jsm/renderers/CSS2DRenderer'

创建HTML标签

在vue文件的模板中添加如下代码,都是基础的HTML语音,这里不再细说

<div id="label">
    <div style="position: relative; width: 139px; height: 167px;color: #ffffff;">
      <img src="../assets/images/info.png" alt="" style="width: 100%; position: absolute;left: 0px;top: 0px;"> 
      <div style="position: absolute; left: 48px;top: 4px;font-size: 12px;">
        <div style="font-size: 14px;font-weight: 400;">
          <span id="txtName">车身</span>
        </div>
        <div style="margin-top: 8px;margin-left: -25px;">
            <span style="color: #fff;font-weight: 300;">材质:</span>
            <span style="font-weight: 400;margin-left: 10px;" id="txtMaterial">金属</span>
        </div>
        <div style="margin-top: 8px;margin-left: -25px;">
            <span style="color: #fff;font-weight: 300;">颜色:</span>
            <span style="font-weight: 400;margin-left: 2px;" id="txtColor">红色</span>
        </div>
      </div>
    </div>
  </div>

添加上述代码后,我们创建的标签出现在了浏览器页面的左下方,这是典型的浏览器div的排列属性,但是这不是我们想要的,我们想要将这个div标签放到三维场景中去展示。这就涉及到了世界坐标xyz与屏幕坐标的转换,这是一个很麻烦的事情。好在threejs的扩展库CSS2DRenderer.js已经帮我们考虑到了这一点,给我们提供了CSS2DObject 对象
在这里插入图片描述

CSS2DObject 对象

通过CSS2DObject对象,可以把HTML元素转化为一个类似threejs网格模型的对象,即把CSS2DObject当成threejs的一个模型一样去设置位置.position或添加到场景中;

const div = document.querySelector('#label')
const tag = new
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Threejs进阶之五:使用CSS2DRenderer给模型添加HTML标签 的相关文章

  • Ionic 2:隐藏滚动条并继续滚动

    我只想hide滚动条 在需要滚动的页面中 我正在使用离子2 My 不工作解决方案 scroll content bar overflow hidden 此解决方案隐藏滚动条but使屏幕不可滚动 首先 改变浏览器的自然行为和预期的用户体验是一
  • 判断字符串是否包含有效的javascript代码

    我正在寻找一个C 返回的函数true如果字符串包含有效的 JavaScript 语法 例如 IsValidJavascript alert hello 会回来true but IsValidJavascript alertXXhelloZ
  • 以下文档我无法创建 Vue.js 3 的实例

    The code https stackblitz com edit vue ttt file src main js https stackblitz com edit vue ttt file src main js 问题 我正在尝试在
  • 更新存储在 chrome 扩展本地存储中的对象

    我正在开发一个 chrome 扩展 我将存储服务器发送的对象 例如 我将收到 命令 id 1 类型 A 大小 B 优先级 C 如果我有一个数据库 我会将其作为表中的一行插入commands 使用 chrome storage 我将这些对象的
  • Javascript 作为对象键的函数与块中标记函数之间的语法冲突

    假设您有一个支持两者的浏览器带标签的函数声明 https developer mozilla org en US docs Web JavaScript Reference Statements label Labeled function
  • 如何将一个数组中的所有项目复制到另一个数组中?

    如何将数组的每个元素 其中元素是对象 复制到另一个数组中 以便它们完全独立 我不想更改一个数组中的元素来影响另一个数组 这里的关键是 数组中的条目是对象 并且 您不希望对一个数组中的对象的修改显示在另一个数组中 这意味着我们不仅需要将对象复
  • 如何通过setTimeout函数定期打印数字?

    var i 0 function counter for i i lt 100 i setTimeout gt console log i 2000 counter 我想以 2 秒的间隔打印 i 但它立即打印 每次打印调用只需要几微秒 为什
  • 检查用户设备的 GPS 是否开启

    我正在使用 jQuery Mobile 和 PHP 开发一个应用程序 我没有使用 Phonegap 或其他框架 我需要找到用户的geolocation 如果用户设备的 GPS 关闭 那么我无法获取位置 现在我需要查找用户设备的 GPS 是否
  • websockets 如何处理同一浏览器的两个选项卡

    I have 1 个 PHP 服务器 提供 http 请求 和 1 node js 发布更新的数据消息 每个连接都带有 websocket php 服务器设置其 cookie 在一个浏览器中 此 cookie 可在所有选项卡中使用 当浏览器
  • 通过 JavaScript 单击按钮/页面提交

    我想了解 asp net 框架如何知道何时单击了按钮 因此一旦收到请求 就会在服务器上触发其单击事件 我需要了解它是如何工作的 因为我想从 JavaScript 触发按钮的服务器单击事件 我能够从 JavaScript 执行页面提交 doc
  • 全高全宽 CSS 布局

    我正在寻找一种方法来创建具有 5 个区域的纯 CSS 无 JavaScript 布局 如下所示 H A B C F
  • Angular2:动态同步http请求

    Goal 发出一系列同步 http 请求并能够将它们作为一个可观察流进行订阅 示例 不工作 let query arr test1 test2 test3 function make request query arr if query a
  • 播放没有音频标签的音频

    是否可以在没有音频标签的情况下仅使用 javascript 播放音频 我通过 tinyMce 编辑器注入脚本 因为我无权访问网站的后端 并且它不支持客户端的音频标签 她只想要当您将鼠标悬停在图像上时发出简单的声音 我已经完成了所有设置 但是
  • 从链接打开本地文件夹

    如何通过单击任何链接打开本地文件夹视图 我尝试了很多选择 例如 a href Open folder a or a Open folder a or a Open folder a 解决方案 启动可下载链接 以下内容适用于所有浏览器 但一如
  • ES6 模块范围

    我有代码 lib js var a a export var b b main js console log a a variable is not available in a global scope import b from lib
  • javascript - 如何获取对象名称或关联数组索引名称?

    我有一个像这样的 JSON 对象 var list name1 element1 value1 name2 element1 value2 如何提取所有 nameX 字符串值 例如 假设我想将它们连接在一个字符串中输出 例如 name1 n
  • React Redux - 在辅助函数中访问现有存储

    我试图在反应组件之外获取存储实例 存储状态 即在单独的辅助函数中 我有我的减速器 我的动作 我在最上面的组件中创建了一个商店 configStore js import createStore from redux import gener
  • 我应该创建一个块还是一个元素 BEM CSS?

    Bem官网说 创建一个块如果一段代码可以被重用并且它不依赖于正在实现的其他页面组件 创建一个元素如果一段代码在没有父实体 块 的情况下无法单独使用 我有一个 关于部分 块 它的元素依赖于父级并且不能在网站中重复使用 如何根据 bem 这段代
  • Three.js点击单个粒子

    In this example http jsfiddle net agqq96bq 2 您可以看到 2 个可点击的粒子 但它们都受到点击的影响 另外 我只想检测粒子上的点击 而不将它们过滤出场景 像这儿 if intersects len
  • 如果 POST 响应仅包含 ID,如何将数据保存到我的 Ember 存储?

    Ember 数据期望我的服务器在每次成功后返回完整的对象POST 但是 我的 API 只返回一种元对象 其中包含id 当 Ember 收到此对象时 记录中的现有数据将被删除 除了id 例如 当我这样做时 var asset App Asse

随机推荐

  • 用python开发了一个绘制股票k线图的工具,还可以预测股票涨跌!【文末附源码和教学视频】

    文章目录 聊一聊这个工具 效果展示 股票数据 运行项目 前端界面 后端接口 源码地址 聊一聊这个工具 起初 我并不在意echarts 这不过是一个偶然 一次选择 一条简单的代码 一个图表的诞生 直到我完成了K线图的绘制 股票 一个神奇的发明
  • JS的内存泄露及处理方式

    概念 应用程序不再需要占用内存的时候 由于某些原因 内存没有被操作系统或可用内存池回收 就叫做内存泄漏 memory leak 内存的生命周期 内存分配 当我们声明变量 函数 对象的时候 系统会自动为他们分配内存 内存使用 即读写内存 也就
  • 利用CSS调整图片大小

    通常 我们可以给图片 img 设置一个CSS属性 定义其高度和宽度 但有时候 我们只希望控制图片的最大可见大小 这样的操作 一般有两种办法 1 直接使用CSS属性值 2 使用JavaScript动态设置CSS值 一 固定大小 一般 为了限制
  • 新手傻瓜式推荐教程:anaconda+Tensorflow+keras的安装详细教程

    目录 一 Anaconda的安装 二 Anaconda下配置Tensorflow 三 keras下载 四 出现报错 You are using pip version 9 0 1 however version 21 1 3 is avai
  • Java-用for循环嵌套输出1~100的质数(素数)

    package kjul public class jgtd public static void main String args int i j for i 2 i lt 100 i boolean flag true for j 2
  • pg数据库(七)之备份还原

    一 备份数据库 1 切换到postgres用户 切换到postgres用户即可 不用psql sudo su postgres 2 备份数据库 pg dump host 数据库IP port 端口 user 用户名 password 密码
  • MySQL——规范数据库设计

    文章目录 1 为什么需要设计数据库 2 三大范式 2 1 第一范式 1NF 2 2 第二范式 2NF 2 3 第三范式 3NF 3 规范性和性能的问题 1 为什么需要设计数据库 当数据库比较复杂的时候 我们就需要设计 糟糕的数据库设计 数据
  • postgresql定位未使用的索引(unused index)

    unused index会导致不必要的io开销 如写操作 insert update 期间 必须维护所有index 1 鉴于pg stat reset 函数能够reset统计信息到0 查找unused index时 先参考pg stat d
  • echarts地图的tooltip自定义样式显示图表

    echarts地图的tooltip自定义样式显示图表 最近遇到一个需求 需要在地图中实现鼠标点击或者停留在地图中某一片区域时 该区域显示亮高和显示tooltip提示框信息 但是难点在于需要在tooltip提示框中再绘制一层图表 按以往我们做
  • elasticsearch的版本和支持的jdk版本情况

    elasticsearch的版本和支持的jdk版本情况 参加官网 https www elastic co cn support matrix matrix jvm
  • 快速选择算法

    快速选择算法 我们可以将快速排序算法稍作修改将其应用在选择问题上 该算法称为快速选择算法 复杂度O NlogN 最坏情况为O N 2 令 A 为A中的元素个数 查找A中第k个最小元 算法步骤如下 1 如果 A 1 那么k 1 则将A中的元素
  • H5 及 web 页面微信授权登录流程

    一 事先准备工作 配置参数测试公众平台信息 测试号相关配置示例 1 打开公众平台的测试账号 2 配置js接口安全域名 3 扫码关注测试公众号 4 修改网页授权地址 配置授权回调的域名 至于什么是OAuth2 0 大家自行百度吧 这里的域名也
  • 传奇数据库字段说明

    MagicDb 是你所修炼的法术和各种技能 1 magsid 物品代号 2 magname 物品名称 3 effect type 效果属性 4 effect 效果 放此魔法所产生的动画效果 5 spell 每次耗用魔法值 6 defspel
  • 无版权,全免费,请收藏这10个免费高清无权素材网站

    无版权 全免费 请收藏这10个免费高清无权素材网站 2020 12 9 适用人群 网页设计师 平面设计人员 视频制作 动画设计人员 PS初学者 产品运营人员配图 公众号运营人员配图 对于设计师来说 图片 视频素材的好坏决定了设计效果的满意度
  • C/C++犯二程度计算

    文章目录 步骤一 步骤二 步骤三 下面为此题解析 为了详细 篇幅可能有点长 如果不想看解析 可翻到步骤三查看源程序 此题可以清晰看出 这是一道对数组操作的题目 因为整型数据的范围为 32 768 32767可以看出该题目要求是位数不大于10
  • Android异常 SecurityException: Permission Denial: starting Intent

    异常信息如下 SecurityException Permission Denial starting Intent act android intent action MAIN cat android intent category LA
  • 【报错】解决读取json时,出现 NameError: name ‘false‘ is not defined

    以文本格式 读取json文件时 出现如下类型错误 NameError name false is not defined NameError name null is not defined 原因是因为直接以为本流读取json 导致 fal
  • ETL数据库数据采集&订单数据采集

    问题解决 增加目标数据库配置信息 结果写出MySQL的数据库相关配置 target host localhost target port 3306 target user root target password mysql target
  • c# .net mvc的IHttpHandler奇妙之旅--图片文件请求安全过滤,图片防盗链

    源码下载 c net mvc图片文件请求安全过滤 图片防盗链 https download csdn net download cplvfx 88206428 在阅读该文章前 请先阅读该文章 c net mvc的IHttpHandler奇妙
  • Threejs进阶之五:使用CSS2DRenderer给模型添加HTML标签

    这一节给场景中的模型添加标签 想实现的效果是 通过鼠标点击场景中摩托车的某个部位 则在场景中出现一个标签 并在标签上显示该部位的信息 最终的效果图如下 要实现上面的效果 需要用到CSS 2D渲染器 先来了解下CSS 2D渲染器 CSS2DR