THREEJS - 动态标签(dom方式)

2023-11-11

在三维场景中,我们会有一种需求:需要给三维场景中的模型打上标签,例如展示模型的名称/性能展示等,三维场景打标签的方式很多,有dom、sprite、Mesh等等,这篇文章来给大家介绍的是一种比较常见的打标签方式:dom。这种方式我们可以自定义任何样式的dom标签,比较容易满足各种场景的需求。

1.创建dom元素:

<div id="sign" style="position: absolute;">
    <div class="sign">
        <div class="name">我是标签</div>
    </div>
    <img src="./img/mark.png" class="mark" alt="">
</div>

2.函数的封装:目的是将三维场景中的坐标转化为屏幕坐标系的二维坐标:

/**
 * 添加标签:dom方式
 * @param {*} targePosition :需要传递当前标签的位置
 * @param {*} targetId :标签对应的dom的唯一ID,暂且用时间戳代替,避免重复
 */
function newTag(targePosition, targetId) {
    let world_vector = new THREE.Vector3(targePosition.x, targePosition.y, targePosition.z);
    let vector = world_vector.project(camera);
    let halfWidth = window.innerWidth / 2,
        halfHeight = window.innerHeight / 2;
    let x = Math.round(vector.x * halfWidth + halfWidth);
    let y = Math.round(-vector.y * halfHeight + halfHeight);

    /**
     * 更新立方体元素位置
     */
    let div = document.getElementById(targetId)
    div.style.left = x + 'px';
    div.style.top = y + 'px';
}

3.将目标标签的函数,放置到render函数中,这样做的目的就是保证标签可以根据我们需要展示的三维场景坐标实时转化为屏幕的二维坐标,保证标签是跟随场景的视角实时联动:

function render() {
    newTag({x: 100,  y: 100, z: 100}, 'sign');
    renderer.render(scene, camera);
}

上面就是三维场景中给模型打标签的方式之一 —— dom,其它的几种方式,我们会在后续文章中给出。
 

欢迎大家提意见或者建议,相互学习!!!!!!

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

THREEJS - 动态标签(dom方式) 的相关文章

  • 如何检测浏览器是否支持自定义元素

    我正在查看 Modernizr 它应该有助于功能检测 这应该可以帮助确定您的网站是否与给定的 Web 浏览器兼容 但我没有看到任何表明我可以使用它来检测自定义 HTML 的内容我们在内容中创建和定义的元素 如果不是 Modernizr 我如
  • 从数据 URI 解码 QR 码

    我尝试从数据 uri 中解码二维码 var dataUri data image gif base64 R0lGODdh9gD2AIAAAAAAAP ywAAAAA9gD2AAAC decodeQrCode dataUri cb 我已经尝试
  • 为什么 JavaScript base-36 转换看起来不明确

    我目前正在编写一段使用 Base 36 编码的 JavaScript 我遇到了这个问题 parseInt welcomeback 36 toString 36 看来要回归了 welcomebacg 我在 Chrome 开发者控制台和 Nod
  • 使用 useReducers 调度函数发送多个操作?

    使用时是否可以通过调度函数发送多个动作useReducer挂钩反应 我尝试向它传递一组操作 但这会引发未处理的运行时异常 明确地说 通常会有一个初始状态对象和一个减速器 如下所示 const initialState message1 nu
  • 使用模数按字母顺序对列表进行排序

    我在获取元素列表并按字母顺序对它们进行排序方面没有任何问题 但我很难理解如何使用模数来做到这一点 更新 这是按我的方式工作的代码 但是 我更喜欢下面提供的答案的可重用性 因此接受了该答案
  • 在 Wordpress 站点中进行 AJAX 调用时出现问题

    我在使用 Wordpress 站点功能的 AJAX 部分时遇到了一些问题 该功能接受在表单上输入的邮政编码 使用 PHP 函数来查找邮政编码是否引用特定位置并返回到该位置的永久链接 我的第一个问题是关于我构建的表单 现在我的表单操作是空白的
  • 可以使用 jQuery 或 Javascript 将图片的特定部分用作链接吗?

    我有这个想法 将图片 而不是文本 的各个部分链接到不同的页面或网站 并且我想在不实际创建不同的照片并将它们彼此靠近的情况下完成 这样看起来就像是一张完整的图片 这里有人知道如何使用 JavaScript 的变体 例如 jQuery 或纯 J
  • Node.js:如何在检索数据(块)时关闭响应/请求

    我正在用 node js 构建一个应用程序 它加载多个页面并分析内容 因为 node js 发送块 所以我可以分析这些块 如果一个块包含例如索引 nofollow 我想关闭该连接并继续其余部分 var host example com to
  • 音频 blob 的 URL.createObjectURL 在 Firefox 中给出 TypeError

    我正在尝试从创建的音频 blob 创建对象 URLgetUserMedia 该代码在 Chrome 中可以运行 但在 Firefox 中存在问题 错误 当我打电话时stopAudioRecorder 它停在audio player src
  • 在requestAnimationFrame中使用clearRect不显示动画

    我正在尝试在 HTML5 画布上做一个简单的 javascript 动画 现在我的画布是分层的 这样当我收到鼠标事件时 背景层不会改变 但带有头像的顶层会移动 如果我使用 requestAnimationFrame 并且不清除屏幕 我会看到
  • 将div设置为隐藏,延时后可见

    我试图在 X 时间后 也许甚至在随机时间之后 但现在我们只做固定时间 在黑色背景上出现一个黄色方块 function initialSetup if document getElementById yellow null document
  • 表单计算器脚本基本价格未加载 OnLoad

    我的表单中有一个计算器来计算我的下拉选项选择 function select calculate on change calc input type checkbox calculate on click calc function cal
  • 如何使输入字段和提交按钮变灰

    我想变灰这两件事 http doorsplit heroku com 歌曲输入字段和提交按钮 直到用户输入艺术家 有没有一种简单的方法可以通过 JQuery 来做到这一点 艺术家输入字段的id是 request artist 你可以这样做
  • 提交表单并重定向页面

    我在 SO 上看到了很多与此相关的其他问题 但没有一个对我有用 我正在尝试提交POST表单 然后将用户重定向到另一个页面 但我无法同时实现这两种情况 我可以获取重定向或帖子 但不能同时获取两者 这是我现在所拥有的
  • 如何在类似控制台的环境中运行 JavaScript?

    我正在尝试遵循这里的示例 http eloquentjavascript net chapter2 html http eloquentjavascript net chapter2 html and print blah 在浏览器中运行时
  • Javascript 纪元时间(以天为单位)

    我需要以天为单位的纪元时间 迄今为止 我已经看到过有关如何翻译它的帖子 但几天后就没有了 我对纪元时间很不好 我怎么能得到这个 我需要以天为单位的纪元时间 我将解释为您想要自纪元以来的天数 纪元本身是第 0 天 或第 1 天的开始 无论您如
  • 如何仅在最后一个
  • 处给出透明六边形角度?
  • 我必须制作这样的菜单 替代文本 http shup com Shup 330421 1104422739 My Desktop png http shup com Shup 330421 1104422739 My Desktop png
  • 将 MQTTNet 服务器与 MQTT.js 客户端结合使用

    我已经启动了一个 MQTT 服务器 就像this https github com chkr1011 MQTTnet tree master例子 该代码托管在 ASP Net Core 2 0 应用程序中 但我尝试过控制台应用程序 但没有成
  • 导致回发到与弹出窗口不同的页面

    我有一个主页和一个详细信息页面 详细信息页面是从主页调用的 JavaScript 弹出窗口 当单击详细信息页面上的 保存 按钮时 我希望主页 刷新 是否有一种方法可以调用主页的回发 同时还可以从详细信息页面维护保存回发 Edit 使用win
  • 如何从图像输入中获取 xy 坐标?

    我有一个输入设置为图像类型

随机推荐

  • 【ACM出版 + EI检索稳定】第六届高性能编译、计算和通信国际会议(HP3C 2022)

    第六届高性能编译 计算和通信国际会议 HP3C 2022年6月23 25日 中国吉林 2022年第六届高性能编译 计算和通信国际会议 HP3C 2022 将于2022年6月23 25日在中国吉林举行 本次会议由东北电力大学主办 东北电力大学
  • 再谈 Java中Runnable和Thread的区别

    在面试中老有面试官问这个问题 个人觉得这个问题问的没有技术 一个死记硬背就能回答的很好 但是更深的回答是什么了 那就是直接回答源码吧 thread类实现了runnable 接口 Runnable就是一个借口 只能我们去实现了才能用 对吧 不
  • js 日期格式 转换 yyyy-MM-dd

    之前js获取到数据库的Date 总是显示成 后来知道是js 的Date 格式不能直接转换常用的yyyy MM dd 的格式 Date prototype yyyymmdd function var yyyy this getFullYear
  • H5的本地存储(localStorage)和会话(sessionStorage)还有cookie的使用与注意事项

    目录 本地存储使用的时候注意 js代码如下 cookie使用的时候注意 open in browser与open with live server的区别 最后是总代码如下 本地存储使用的时候注意 js代码如下 本地存储的使用 localSt
  • Linux系统下运行jar文件,提示:No main manifest attribute, in XXX.jar

    在Linux系统下执行java jar XXX jar com HelloWorld往往会提示 No main manifest attribute in XXX jar 原因如下 正常情况下 java打包成jar包需要在MANIFEST
  • 数据化看板(vue+Element+Echarts)

    效果图 由于一些原因无法上传整体的代码 只能放一些部分页面的代码 Element ui Echarts Echarts实例 分割线 首页代码
  • node_modules安装及node-sass使用

    node modules安装及node sass使用 终端进入项目文件夹运行以下命令 一 安装node modules 1 输入npm init 一直回车 会生成package json文件 2 npm i D vue 然后就成功node
  • 第十二届蓝桥杯嵌入式总结及分享

    蓝桥杯嵌入式总结以及分享 这是我第一次写CSDN的文章 如果有什么写的不好的 还请各位见谅 不喜勿喷 谢谢 经过这两个星期时间准备省赛 两个星期准备国赛 最终取得了国二的成绩 个人认为这个比赛就是耗时长 我对源码不够熟悉 所以导致时间基本都
  • 走得最慢的人,只要他不丧失目标,也比漫无目的地徘徊的人走得快。

    走得最慢的人 只要他不丧失目标 也比漫无目的地徘徊的人走得快 莱辛 有着坚定明确的目标 且知道如何做能达成目标 没有追求 未来迷茫 或许大家都想当第一种人 但可能在不知不觉中就成了第二种人 自己也不知道 或是因为目标太大 难以后继 最终失却
  • 1049 数列的片段和

    给定一个正数数列 我们可以从中截取任意的连续的几个数 称为片段 例如 给定数列 0 1 0 2 0 3 0 4 我们有 0 1 0 1 0 2 0 1 0 2 0 3 0 1 0 2 0 3 0 4 0 2 0 2 0 3 0 2 0 3
  • Xshell缺少.dll文件解决方案

    背景 安装Xshell时报错 由于找不到MSVCR110 dll文件 无法继续执行代码 重新安装程序可能会解决此问题 这种情况是缺少运行库 解决方案 微软常用运行库 https pan baidu com s 1kgJRky3cicOMxR
  • 计算机打不开excel表格,excel表格打不开怎么办?excel表格打不开的原因及解决方法...

    今天有网友反映 他昨天做的Excel表格打不开了 但其他Excel表格是可以打开的 非常郁闷 那么Excel表格打不开是什么原因呢 Excel表格打不开怎么办呢 下面脚本之家小编就来说说有关造成Excel表格打不开的几种原因及解决办法 一
  • 基于Loung Attention+LSTM的机器翻译模型

    目录 需要掌握的基础知识 1 Encoder Decoder架构 2 LSTM模型原理 3 Attention机制 基于Loung Attention LSTM的机器翻译模型 模型 数据 训练 基于Bahdanau Attention LS
  • 大数据安全治理平台建设方案

    近年来 随着大数据应用的普及 在新基建 智慧城市 云端应用等大背景趋势下 给我们日常生活便来了很多方便 同时也派生出更多网络安全风险 如企业数据泄露 欺诈 数据违规使用 个人隐私泄露以及企业内部各种威胁和潜在风险 数据是宝贵的资源和财富 当
  • LCD操作原理

    一 LCD原理介绍 LCD内部内部结构 1 lcd由Framebuffer lcd屏幕 信号线 电子枪 lcd控制器组成 2 Framebuffer提供显示数据 lcd屏幕显示 信号线传输Frambuffer中的数据和lcd控制器发出的信号
  • 【深度学习】Attention提速9倍!FlashAttention燃爆显存,Transformer上下文长度史诗级提升...

    转载自 新智元 继超快且省内存的注意力算法FlashAttention爆火后 升级版的2代来了 FlashAttention 2是一种从头编写的算法 可以加快注意力并减少其内存占用 且没有任何近似值 比起第一代 FlashAttention
  • Sqli-labs Less-1 报错注入

    Sqli labs Less 1 报错注入 1 首先打开less1后是一个页面 提示输入id作为参数 输入id 1试一下 然后会出现 name 和 password 添加一个单引号 测试一下注入点 输入单引号发现 会直接将报错结果显示在页面
  • 模拟IC设计——MOS计算及常见MOS管电路

    小生初入模拟IC 作此笔记在大佬面前实属班门弄斧 若有不当之处还请指正 1 MOSFET概述 场效应管与晶体管一样 也具有放大作用 但与普通晶体管是电流控制型器件相反 场效应管是电压控制型器件 它具有输入阻抗高 噪声低的特点 1 MOSFE
  • 使用OpenCV中的matchTemplate函数实现模板匹配【C++版】

    matchTemplate函数原型 void cv matchTemplate InputArray image InputArray templ OutputArray result int method InputArray mask
  • THREEJS - 动态标签(dom方式)

    在三维场景中 我们会有一种需求 需要给三维场景中的模型打上标签 例如展示模型的名称 性能展示等 三维场景打标签的方式很多 有dom sprite Mesh等等 这篇文章来给大家介绍的是一种比较常见的打标签方式 dom 这种方式我们可以自定义