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

关于Threejs的使用二

Threejs之前是没有使用过的,由于项目需要最近一段时间一直在研究;

关于绘制字体:

   有两种方案:

       1.可以通过页面添加标签化元素进行插入到页面中:

          //創建元素const descriptionElement = document.createElement('div');descriptionElement.style.position = 'absolute';descriptionElement.style.top = '10px';descriptionElement.style.left = '10px';descriptionElement.style.color = 'black';descriptionElement.innerHTML = description;document.body.appendChild(descriptionElement);//根據位置進行調整object.updateDescriptionPosition = function() {const vector = new THREE.Vector3();vector.setFromMatrixPosition(sphere.matrixWorld);const projectedPosition = vector.project(_this.cameraPersp);descriptionElement.style.left = (window.innerWidth * (projectedPosition.x + 1) / 2) + 'px';descriptionElement.style.top = (window.innerHeight * (1 - projectedPosition.y) / 2) + 'px';};

        2.可以通过使用threejs的3d文字绘制;

    在此使用之前遇到了一个问题: threejs的3d通过加载文字 英文、数字是没问题的,汉字显示的是问号,这就说明没有转换成功,后来找到原因是:由于threejs本身是不支持的,所以我们可以把需要的字体文件转换成json或者ttf版本进行加载;

import { FontLoader } from "three/examples/jsm/loaders/FontLoader.js";
import jsonText from "three/examples/fonts/FangSong_Regular.json";

      const fontLoader = new FontLoader();const font = fontLoader.parse(jsonText);const textGeometry = new THREE.TextGeometry("哈喽啊,朋友们~", {font: font,size: 5,height: 1.2,curveSegments: 12,bevelEnabled: true,bevelThickness: 0.1,bevelSize: 0.1,bevelOffset: 0,bevelSegments: 5,});var textMaterial = new THREE.MeshBasicMaterial({ color: color });var textMesh = new THREE.Mesh(textGeometry, textMaterial);textMesh.position.x = 10;   //根据自己的需要可以实时更新文字位置的变化textMesh.position.y = 10;textMesh.position.z = 10;this.scene.add(textMesh);function moveClick() { //改变字体的朝向textMesh.lookAt(_this.control.camera.position);}this.renderer.domElement.addEventListener("mousedown", moveClick, false);

相关文章:

  • 东芝-Soft Limit 报警及其解决办法
  • 代码随想录算法训练营第29天(贪心)|455.分发饼干、376. 摆动序列、53. 最大子序和
  • C语言 图的基础知识
  • HTTP/2 协议学习
  • VMware ESXi 8.0U2c macOS Unlocker OEM BIOS ConnectX-3 网卡定制版 (集成驱动版)
  • 流程图工具评测:十大热门软件对比
  • Spring Boot 中如何解决跨域问题、Spring Cloud 5大组件、微服务的优缺点是什么?
  • 模拟原神圣遗物系统-小森设计项目,设计圣遗物(生之花,死之羽,时之沙,空之杯,理之冠)抽象类
  • 【软件测试】软件测试入门
  • AOSP开发环境搭建
  • 志愿服务管理系统的设计
  • 【全网最全最详细】RabbitMQ面试题
  • 【Go】用 DBeaver、db browser 和 SqlCipher 读取 SqlCipher 数据库
  • Java基础16(集合框架 List ArrayList容器类 ArrayList底层源码解析及扩容机制)
  • C++ unique_ptr
  • [分享]iOS开发-关于在xcode中引用文件夹右边出现问号的解决办法
  • FineReport中如何实现自动滚屏效果
  • javascript 哈希表
  • JavaWeb(学习笔记二)
  • PHP变量
  • 高程读书笔记 第六章 面向对象程序设计
  • 开年巨制!千人千面回放技术让你“看到”Flutter用户侧问题
  • 驱动程序原理
  • 数组的操作
  • AI又要和人类“对打”,Deepmind宣布《星战Ⅱ》即将开始 ...
  • TPG领衔财团投资轻奢珠宝品牌APM Monaco
  • #### golang中【堆】的使用及底层 ####
  • $Django python中使用redis, django中使用(封装了),redis开启事务(管道)
  • (Java实习生)每日10道面试题打卡——JavaWeb篇
  • (Matlab)遗传算法优化的BP神经网络实现回归预测
  • (Python第六天)文件处理
  • (附源码)计算机毕业设计SSM疫情社区管理系统
  • (一)搭建springboot+vue前后端分离项目--前端vue搭建
  • (游戏设计草稿) 《外卖员模拟器》 (3D 科幻 角色扮演 开放世界 AI VR)
  • (转)es进行聚合操作时提示Fielddata is disabled on text fields by default
  • (转)我也是一只IT小小鸟
  • .Family_物联网
  • .Net 转战 Android 4.4 日常笔记(4)--按钮事件和国际化
  • .net后端程序发布到nignx上,通过nginx访问
  • .NET轻量级ORM组件Dapper葵花宝典
  • .net使用excel的cells对象没有value方法——学习.net的Excel工作表问题
  • .stream().map与.stream().flatMap的使用
  • /etc/fstab和/etc/mtab的区别
  • :中兴通讯为何成功
  • @data注解_SpringBoot 使用WebSocket打造在线聊天室(基于注解)
  • @DateTimeFormat 和 @JsonFormat 注解详解
  • [5] CUDA线程调用与存储器架构
  • [AIGC] Spring Interceptor 拦截器详解
  • [android] 练习PopupWindow实现对话框
  • [BZOJ4010]菜肴制作
  • [C++提高编程](三):STL初识
  • [CUDA 学习笔记] CUDA kernel 的 grid_size 和 block_size 选择
  • [Doc][px4][ros2][gazebo][yolov8]PX4-ROS2-Gazebo-YOLOv8
  • [Foreman]解决Unable to find internal system admin account
  • [HNOI2015]实验比较