three.js 创建文本的几种方式

2023-10-27


精灵贴图文本

.text {
      width: 128px;
      height: 128px;
      font-size: 16px;
      text-align: center;
      color: #ffffff;
      background: #ff0000;
    }

 <div class="text" id="text">精灵贴图文本</div>
  <div class="text" id="text2">平面贴图文本</div>
  <div class="text" id="text3">CSS2DRenderer渲染文本</div>
  <div class="text" id="text4">CSS3DRenderer CSS3DObject渲染文本</div>
  <div class="text" id="text5">CSS3DRenderer CSS3DSprite渲染文本</div>



  let div1 = document.getElementById('text');
  let div2 = document.getElementById('text2');
  let div3 = document.getElementById('text3');
  let div4 = document.getElementById('text4');
  let div5 = document.getElementById('text5');


	html2canvas(div1).then(canvas => {
	    let texture = new THREE.CanvasTexture(canvas);
	    let material = new THREE.SpriteMaterial({
	      map: texture
	    });
	    let sprite = new THREE.Sprite(material);
	    sprite.scale.set(4, 4, 1);
	    scene.add(sprite)
  })


平面贴图文本

html2canvas(div2).then(canvas => {
	    let texture = new THREE.CanvasTexture(canvas);
	    let material = new THREE.MeshBasicMaterial({
	      map: texture,
	      side: THREE.DoubleSide
	    });
	    let geometry = new THREE.PlaneGeometry(4, 4, 2);
	    let plane = new THREE.Mesh(geometry, material);
	    plane.position.set(10, 0, 0);
	    scene.add(plane)
  })

CSS2DRenderer

let label2DRenderer = new THREE.CSS2DRenderer();
  label2DRenderer.setSize(window.innerWidth, window.innerHeight);
  label2DRenderer.domElement.style.position = 'absolute';
  label2DRenderer.domElement.style.top = '0px';
  label2DRenderer.domElement.style.left = '0px';
  //设置.pointerEvents=none,以免模型标签HTML元素遮挡鼠标选择场景模型
  label2DRenderer.domElement.style.pointerEvents = 'none';
  document.body.appendChild(label2DRenderer.domElement);

let label2D = new THREE.CSS2DObject(div3);
  label2D.position.set(-10, 0, 0);
  scene.add(label2D);

label2DRenderer.render(scene, camera)

CSS3DRenderer

 let label3DRenderer = new THREE.CSS3DRenderer();
  label3DRenderer.setSize(window.innerWidth, window.innerHeight);
  label3DRenderer.domElement.style.position = 'absolute';
  label3DRenderer.domElement.style.top = '0px';
  label3DRenderer.domElement.style.left = '0px';
  //设置.pointerEvents=none,以免模型标签HTML元素遮挡鼠标选择场景模型
  label3DRenderer.domElement.style.pointerEvents = 'none';
  document.body.appendChild(label3DRenderer.domElement);

 let label3DObject = new THREE.CSS3DObject(div4);
  label3DObject.position.set(-20, 0, 0);
  label3DObject.scale.set(0.05, 0.05, 0.05);
  scene.add(label3DObject);

  let label3DSprite = new THREE.CSS3DSprite(div5);
  label3DSprite.position.set(-30, 0, 0);
  label3DSprite.scale.set(0.05, 0.05, 0.05);
  scene.add(label3DSprite);

label3DRenderer.render(scene, camera)

总结

CSS2DRenderer渲染的文本的大小不会随着缩放而改变,会一直保持原大小,其余的均会对应的改变大小
CSS3DRenderer渲染的CSS3DSprite 和精灵模型渲染的文本始终会面朝屏幕,不会随着旋转而改变角度。CSS3DRenderer渲染的CSS3DObject 和平面渲染的文本会随着角度的改变而改变
添加事件的方式不同,CSS3DRenderer和CSS2DRenderer渲染的本质还是dom,可以直接添加dom事件,精灵模型和mesh则是要通过射线的方式。
在渲染大批量文本的时候使用CSS3DRenderer和CSS2DRenderer性能最佳,将html转化为canvas这个步骤消耗的性能很大,如果直接是生成的canvas进行贴图则无所谓。

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

three.js 创建文本的几种方式 的相关文章

随机推荐

  • 大华、海康rtsp视频流格式

    一 海康威视热眼警戒摄像机DS 2TD1217 3 PA 型号 1号与2号摄像头 Camera 01 Camera 02 方法一 只能读取1号摄像头 rtsp admin 密码 192 168 1 64 554 cam realmonito
  • 美食推荐系统的设计与实现

    1 1 系统的总体目标 该美食推荐系统的总体目标是为用户提供一个全面 准确 方便的美食推荐服务 以满足用户的多样化需求 系统的主要目标如下 1 提供丰富多样的美食信息和推荐内容 为用户提供准确 全面的美食推荐服务 2 实现管理员和用户分离
  • linux文件系统搭建记录

    ubuntu 热插拔挂载 编辑 etc udev 99 xxx rules KERNEL mmcblk1p1 SUBSYSTEMS block ACTION add RUN program usr bin systemd mount no
  • 论文阅读:CVPR 2022 Object Localization under Single Coarse Point Supervision

    任务 point based object localization POL Motivation 具有相同语义信息的点具有不同的标签 而其他方法预先定义的关键点可能是不准确的 因此本文提出来基于粗糙点定位的模式 概述如下 1 采用粗略的点
  • C++中vector的删除

    在vector中有三种涉及删除的方法 第一种是vector clear 第二种是vector erase 第三种是vector pop back clear用来清空整个vector 同时将size变成0 无返回值 erase通过传入迭代器进
  • 小程序点击导航栏返回顶部小例子

  • Java提高性能的50个优化,记得收藏

    在JAVA程序中 性能问题的大部分原因并不在于JAVA语言 而是程序本身 养成良好的编码习惯非常重要 能够显著地提升程序性能 1 尽量在合适的场合使用单例 使用单例可以减轻加载的负担 缩短加载的时间 提高加载的效率 但并不是所有地方都适用于
  • unity3d中利用代码脚本控制按钮的开关

    1 软件环境 unity2019 4 12f1 Visual Studio2019 2 unity工程设置 右键在UI中添加Button组件 接下来添加C 脚本 将此脚本挂在Button的父物体上 后面会用到transfrom来查找到But
  • Axure中后台管理信息系统通用原型方案 v1

    点此下载原型模板 本作品是一套通用型的中后台管理系统原型设计方案 可以帮助你快速输出标准和美观的中后台产品原型方案 极大的节省协作成本和提升工作效率 这套方案提供了12套不同类型的登录界面和系统框架 并涵盖了大量的常用组件和常用页面模板 可
  • 组件开发概述——vue组件开发(一)

    前言 组件化是WEB前端开发中的一个非常重要概念 体现面向对象编程主要特征之一 封装性 组件化开发的目的和意图是提高了软件的可维护性 实现前端代码复用性 组件是扩展 HTML 元素 其使用方式和HTML5提供的组件使用方式一致 它补充HTM
  • Java实现根据当前时间获取本周(工作日)日期(周一~周五或周天)

    import java text ParseException import java text SimpleDateFormat import java util Date import java util Calendar public
  • 【100%通过率 】【华为OD机试 c++】基站维护工程师【 2023 Q1

    华为OD机试 题目列表 2023Q1 点这里 2023华为OD机试 刷题指南 点这里 题目描述 基站维护工程师 小王是一名基站维护工程师 负责某区域的基站维护 某地方有 n 个基站 1 lt n lt 10 已知各基站之间的距离 s 0 l
  • linux脚本实现scp命令自动输入密码和yes/no等确认信息

    实现方式 通过expect工具实现 bin bash yum y install expect expect c spawn scp r root 192 168 10 106 root qumf Agoly txt root qumf e
  • mysql 查询 投影_sql--查询(基本,条件,投影,排序)

    要查询数据库表的数据 我们使用如下的SQL语句 SELECT FROM 使用SELECT FROM students时 SELECT是关键字 表示将要执行一个查询 表示 所有列 FROM表示将要从哪个表查询 该SQL将查询出students
  • 位域(bit fields)简介

    1 简介 位域是指信息在存储时 并不需要占用一个完整的字节 而只需占几个或一个二进制位 例如在存放一个开关量时 只有0和1 两种状态 用一位二进位即可 为了节省存储空间 并使处理简便 C语言又提供了一种数据结构 称为 位域 或 位段 所谓
  • 信息学奥赛-逻辑运算

    学习内容 1 逻辑运算概念介绍 非 not 与 and 或 or 异或 xor 2 运算规则 AVB 两个命题中至少有一个真命题时 其复合命题为真 A B 两个命题必须全为真命题 其复合命题才是真命题 A 将原命题取反 A B 两个命题一真
  • 【深度学习】tensorflow各个版本下载地址

    tensorflow与CUDA对应表如下 需要装低版本的tensorflow 下载地址 http mirrors aliyun com pypi simple tensorflow gpu
  • 吴晓波:2020年怎么看,怎么办?

    origin https 36kr com p 5274524 快公司 时代已经过去了 编者按 本文来自微信公众号 正和岛 ID zhenghedao 口述 吴晓波 财经作家 890新商学创始人 采写 曹雨欣 36氪经授权发布 再次见到吴晓
  • C++笔记-用指定字符串替换目标字符串中的字串-find-substr-replace

    功能是 用字符串zhangsan lisi wangwu替换目标字符串names 1 2 3 中的 1 2 3 结果是 names zhangsan lisi wangwu 1 使用std string的replace方法 std stri
  • three.js 创建文本的几种方式

    精灵贴图文本 text width 128px height 128px font size 16px text align center color ffffff background ff0000 div class text 精灵贴图