当前位置: 首页 > news >正文

站长工具查询域名网络营销方式有哪些

站长工具查询域名,网络营销方式有哪些,how to use wordpress ninja forms,wordpress 企业 下载在做 3D 可视化项目时,我们经常需要给场景中的物体、房间、设备等加上文字说明,比如:房间号(101、102…)设备标签(空调、电梯、传感器)人员名字或状态问题是:Three.js 本身不能直接显…

在做 3D 可视化项目时,我们经常需要给场景中的物体、房间、设备等加上文字说明,比如:

  • 房间号(101、102…)

  • 设备标签(空调、电梯、传感器)

  • 人员名字或状态

问题是:Three.js 本身不能直接显示文字。
我们需要一个办法,把文字“画”出来,再贴到 3D 世界里。

本文就带你实现:用 Canvas 生成文字 → 转换为纹理 → 在 Three.js 中作为标签展示


🔹 为什么不用 HTML 直接写?

Three.js 有两种常见方式做标签:

  1. HTML + CSS2DRenderer

    • 直接用 DOM 元素 (<div>) 作为标签,叠加在 3D 场景上

    • 优点:样式好写,和写网页差不多

    • 缺点:标签不是真正的 3D 对象,旋转时可能不跟随场景

  2. Canvas 生成纹理 → Sprite (本文讲的方式)

    • 用 Canvas 画一个文字框(可带背景、边框、圆角)

    • 转换为 Three.js 纹理 → 贴到 Sprite

    • 优点:标签是真正的 3D 元素,跟随相机缩放、旋转

    • 缺点:需要写点 Canvas 绘图代码

 所以,当你需要“标签和模型在同一个 3D 世界里”时,Canvas 方案更合适。

🔹 实现思路

  1. 在 Canvas 上画一个“圆角矩形 + 文本”的小图片

  2. 把 Canvas 转换为 THREE.CanvasTexture

  3. THREE.SpriteMaterial 包装成材质

  4. 创建 THREE.Sprite 并放到场景中

  5. 调整位置和缩放

🔹 代码实现

1. 创建一个文字标签

function createBoxLabel(text, options = {}) {const {color = "white",        // 文字颜色fontSize = 28,          // 字体大小bgColor = "black",      // 背景颜色borderColor = "white",  // 边框颜色borderWidth = 2,        // 边框宽度borderRadius = 8,       // 圆角半径padding = 10            // 内边距} = options;// 创建画布const canvas = document.createElement("canvas");const context = canvas.getContext("2d");canvas.width = 412;canvas.height = 156;// 绘制圆角矩形背景function roundRect(ctx, x, y, w, h, r) {ctx.beginPath();ctx.moveTo(x + r, y);ctx.lineTo(x + w - r, y);ctx.quadraticCurveTo(x + w, y, x + w, y + r);ctx.lineTo(x + w, y + h - r);ctx.quadraticCurveTo(x + w, y + h, x + w - r, y + h);ctx.lineTo(x + r, y + h);ctx.quadraticCurveTo(x, y + h, x, y + h - r);ctx.lineTo(x, y + r);ctx.quadraticCurveTo(x, y, x + r, y);ctx.closePath();ctx.fillStyle = bgColor;ctx.fill();ctx.lineWidth = borderWidth;ctx.strokeStyle = borderColor;ctx.stroke();}roundRect(context, 0, 0, canvas.width, canvas.height, borderRadius);// 写文字context.fillStyle = color;context.font = `${fontSize}px Arial`;context.textAlign = "center";context.textBaseline = "middle";context.fillText(text, canvas.width / 2, canvas.height / 2);// 转换为 Three.js 纹理const texture = new THREE.CanvasTexture(canvas);const material = new THREE.SpriteMaterial({ map: texture, transparent: true });const sprite = new THREE.Sprite(material);// 缩放到合适大小sprite.scale.set(1.5, 0.75, 1);return sprite;
}

2. 添加到场景

function addLabelAtPosition(text, x, y, z) {const label = createBoxLabel(text, {color: "white",bgColor: "black",borderColor: "#007bff"});label.position.set(x, y, z);scene.add(label);return label;
}// 示例:在 3D 场景中某个位置加标签
addLabelAtPosition("101 房间", 0.1, 0.2, -3.2);

http://www.dtcms.com/a/475058.html

相关文章:

  • 萧山区住房和城乡建设局网站进入公众号核酸检测
  • 记录oracle19c安装完成后,使用navcat连接数据库一直报错ORA-00922: 选项缺失或无效
  • 网站不被收录自建网站推广的最新发展
  • 泰安微信网站建设asp.net 当前网站
  • LINUX复习资料(二)
  • 基于视觉与IMU融合的地下停车场自动导航系统原理与实现
  • 国外域名购买网站品牌策划方案设计
  • 外设模块学习(5)——DS18B20温度传感器(STM32)
  • 网站增加点击率 怎样做app制作哪里正规
  • 自己做的网站慢是什么原因哪些网站微信支付平台
  • 编程语言比较从Java到C++,探索主流开发工具的特性与应用场景
  • 自定义网站模板科技公司网页设计欣赏
  • 【完整源码+数据集+部署教程】管道与支架检测系统源码和数据集:改进yolo11-RepNCSPELAN
  • 长沙便宜网站建设手机设计软件下载大全
  • Unity网络开发--自定义协议生成工具
  • 做宣传类网站需要什么资质浙江省建设执业注册中心网站
  • 怎么做视频解析的网站网站数据分析
  • 营销网站建站长沙营销型网站设计
  • 多输入,多输出来学英语
  • 矩阵的除法
  • 网站建设与优化推广方案内容WordPress安装插件要FTP
  • 合肥网站推广 公司哪家好手机论坛网站模板
  • 什么网站做唱歌主播网站建设 说明
  • 建设户外腰包网站旅游网站开发价格
  • CRYSTALS-Kyber在TLS 1.3中的实现挑战
  • 伴随矩阵的定义
  • PagedAttention详解
  • 网站搭建软件微信公众号对接网站如何做
  • 北京哪个公司做网站宁波网站设计制作
  • c2c模式的典型网站宜宾网站建设