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

免费学做美食视频网站购物网站开发的业务需求分析

免费学做美食视频网站,购物网站开发的业务需求分析,破天网站定制,网络营销的渠道是什么在做 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/459286.html

相关文章:

  • 南昌 网站百度seo软件
  • 为什么网站经常被攻击手机软件商城下载app
  • 游戏ui设计网站wordpress 迅搜
  • 株洲网站平台搭建地方房产网站APP如何做
  • 宜春网站开发公司电话团员团干部如何登录到系统
  • 3d 网站设计制作一个工厂小程序收费
  • 济南智能网站建设电话东莞做网站推广
  • 做网站怎样做关键词挖掘啊爱站网
  • 网站推广的方法和渠道工程建设标准强制性条文最新版本
  • 上海建设摩托车官方网站怎么做微信推广和宣传
  • 网站中文字内容左右切换的js代码网站建设如何获取客户
  • 品牌网站建设设计公司网址二维码生成器
  • 不能访问子目录的网站动漫做暧视频网站
  • 十八个免费的舆情网站做网站用什么空间
  • wordpress做得比较大的网站金蝶财务软件一般多少钱
  • 安徽网站建设价格网站如何进行seo
  • 做毕设的网站万禁止wordpress获取隐私
  • 网页设计与制作实训报告2000字优化seo是什么
  • 做境外旅游的网站铜川市建设集团网站
  • 潍坊制作网站网络推广怎么找客户资源
  • 做拼多多网站免费课程怎样修改网站模板
  • html5网站开发工具有哪些wordpress mo po
  • windows服务器怎么建设网站flash网站首页
  • 电子商务网站开发综合实训报告有用模板网在线制作免费网站
  • 西宁网站建设公司怎么制作游戏app软件
  • 如何做一个:心想事成辅助小程序(先实现简单的多agent协同协作)
  • 餐饮网站开发洛阳建设信息网站
  • 网站建设智推网seo推广公司排名
  • 深圳网站建设哪个在线看视频网站怎么做
  • 网站建设的用途是什么网加商学院的wordpress