学习threejs,绘制任意字体模型

👨‍⚕️ 主页: gis分享者
👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅!
👨‍⚕️ 收录于专栏:threejs gis工程师


文章目录

  • 一、🍀前言
  • 二、🍀绘制任意字体模型
    • 1. ☘️实现思路
    • 2. ☘️代码样例


一、🍀前言

本文详细介绍基于threejs如何绘制任意文字模型,亲测可用。希望能帮助到您。一起学习,加油!加油!

二、🍀绘制任意字体模型

1. ☘️实现思路

  • 1、初始化renderer渲染器
  • 2、初始化Scene三维场景
  • 3、初始化camera相机,定义相机位置 camera.position.set
  • 4、初始化light灯光,定义灯光位置,Scene场景加入灯光
  • 5、加载字体模型:加载字体库,在回调函数中创建TextBufferGeometry字体模型,设置字体模型位置和贴图,Scene场景加入字体模型
  • 6、加入controls控制,加入stats监控器,监控帧数信息

2. ☘️代码样例

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>learn8(绘制字体模型)</title><script src="lib/threejs/127/three.js-master/build/three.js"></script><script src="lib/threejs/127/three.js-master/examples/js/controls/OrbitControls.js"></script><script src="lib/threejs/127/three.js-master/examples/js/libs/stats.min.js"></script>
</head>
<style>body {margin: 0;}canvas {width: 100%;height: 100%;display: block;}
</style>
<body onload="draw()"></body>
<script>var renderervar initRenderer = () => {renderer = new THREE.WebGLRenderer({antialias: true})renderer.setSize(window.innerWidth, window.innerHeight)document.body.appendChild(renderer.domElement)}var camera// 初始化相机var initCamera = () => {camera = new THREE.PerspectiveCamera(45, window.innerWidth/window.innerHeight, 1, 10000)camera.position.set(0, 0, 400)}var scene// 初始化场景var initScene = () => {scene = new THREE.Scene()}// 初始化灯光var lightvar initLight = () => {scene.add(new THREE.AmbientLight(0x404040))light = new THREE.DirectionalLight(0xffffff)light.position.set(1, 1, 1)scene.add(light)}var fontModelvar initModel = () => {var fontvar loader = new THREE.FontLoader()// 加载字体库,中文字体库参照:https://www.cnblogs.com/leisir/articles/5905700.htmlloader.load('lib/threejs/127/three.js-master/examples/fonts/gentilis_regular.typeface.json', res => {font = new THREE.TextBufferGeometry('gis sharer, thanks!', {font: res,size: 100,height: 60})// 运行以后设置font的boundingBox属性对象,如果不运行无法获得。font.computeBoundingBox()var map = new THREE.TextureLoader().load('data/img/UV_Grid_Sm.jpg')var material = new THREE.MeshLambertMaterial({map: map, side:THREE.DoubleSide})fontModel = new THREE.Mesh(font, material)//设置位置fontModel.position.x = - (font.boundingBox.max.x - font.boundingBox.min.x)/2; //计算出整个模型的宽度的一半, 保证字体居中fontModel.position.y = - 50fontModel.position.z = - 30scene.add(fontModel)})}var statsvar initStats = () => {stats = new Stats()document.body.appendChild(stats.dom)}var controlsvar initControls = () => {controls = new THREE.OrbitControls(camera, renderer.domElement)// 如果使用animate方法时,将此函数删除//controls.addEventListener( 'change', render )// 使动画循环使用时阻尼或自转 意思是否有惯性controls.enableDamping = true//动态阻尼系数 就是鼠标拖拽旋转灵敏度//controls.dampingFactor = 0.25//是否可以缩放controls.enableZoom = true//是否自动旋转controls.autoRotate = false//设置相机距离原点的最远距离controls.minDistance = 200//设置相机距离原点的最远距离controls.maxDistance = 600//是否开启右键拖拽controls.enablePan = true}// 渲染var render = () => {renderer.render(scene, camera)}var onWindowResize = () => {camera.aspect = window.innerWidth/window.innerHeightcamera.updateProjectionMatrix()render()renderer.setSize(window.innerWidth, window.innerHeight)}var animate = () => {controls.update()render()stats.update()requestAnimationFrame(animate)}var draw = () => {initRenderer()initScene()initCamera()initLight()initModel()initControls()initStats()animate()window.onresize = onWindowResize}
</script>
</html>

效果如下:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1544340.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Python邮件发送附件:怎么配置SMTP服务器?

Python邮件发送附件如何实现&#xff1f;Python发送带附件邮件&#xff1f; 在自动化和脚本编写中&#xff0c;使用Python发送带有附件的邮件是一个非常实用的功能。AokSend将详细介绍如何配置SMTP服务器&#xff0c;以便在Python中实现邮件发送附件的功能。 Python邮件发送附…

叉车高位显示器无线摄影,安装更加便捷!

叉车叉货&#xff0c;基本功能&#xff0c;但货叉升降高度确不一定&#xff0c;普通的3米左右&#xff0c;高的十几米&#xff0c;特别是仓储车&#xff0c;仓库叉货空间小&#xff0c;环境昏暗&#xff0c;视线受阻严重&#xff0c;司机叉货升的那么高怎么准确无误的插到货呢&…

艾体宝产品丨无需代码开发!Redis数据集成助你轻松优化数据库

我们不仅致力于加速应用程序的构建过程&#xff0c;更专注于助力您达成最终目标——实现应用的高效运行。因此&#xff0c;我们欣然宣布&#xff0c;Redis 数据集成&#xff08;Redis Data Integration&#xff0c;RDI&#xff09;(https://redis.io/data-integration/) 已经正…

探索LLM中的CoT链式推理:ECHO方法深度解读

近年来&#xff0c;随着大型语言模型&#xff08;LLMs&#xff09;的快速发展&#xff0c;如何有效利用这些模型进行复杂任务的推理成为了研究热点。其中&#xff0c;链式思考&#xff08;Chain-of-Thought, CoT&#xff09;推理方法作为一种有效的策略&#xff0c;能够显著提升…

Windows 安全事件日记中账户登录失败问题处理

一 window系统安全日记 在使用 Windows 系统时&#xff0c;我们可能会在安全事件日记中发现账户登录失败的记录。当遇到这种情况时&#xff0c;不必惊慌。 今天在检查自己的操作系统日记时发现系统的安全事件记录存在大量的-帐户登录失败日记如下&#xff1a; 从上次清除日记到…

Ansys Zemax | 模拟偏振敏感的散射过程

附件下载 联系工作人员获取附件 概述 这篇文章介绍了如何在OpticStudio中使用一个自定义的DLL模拟偏振敏感的体散射和荧光现象。该散射模型由MSP.DLL文件定义&#xff0c;它考虑了非序列模式下入射光的偏振属性&#xff0c;模拟了散射对光线的传播方向和偏振态的影响&#x…

上海交通大学《2020年+2021年816自动控制原理真题》 (完整版)

本文内容&#xff0c;全部选自自动化考研联盟的&#xff1a;《25届上海交通大学816自控考研资料》的真题篇。后续会持续更新更多学校&#xff0c;更多年份的真题&#xff0c;记得关注哦~ 目录 2020年真题 2021年真题 Part1&#xff1a;2020年2021年完整版真题 2020年真题 2…

中电金信多模态鉴伪技术抵御AI造假威胁

AI换脸技术&#xff0c;属于深度伪造最常见方式之一&#xff0c;是一种利用人工智能生成逼真的虚假人脸图片或视频的技术。基于深度学习算法&#xff0c;可以将一个人的面部特征映射到另一个人的面部&#xff0c;创造出看似真实的伪造内容。近年来&#xff0c;以AI换脸为代表的…

带着徒弟从一次跨域漏洞修复展开的学习

一.背景 本次测试使用到的主要工具包含&#xff1a;eclipse、谷歌浏览器、Windows11家庭版、ApiPost。 &#xff08;一&#xff09;发生的问题 公司安全兄弟提示我们一个应用存在跨域攻击的漏洞&#xff0c;需要我们修复。扫描情况及整改建议如下&#xff1a; 昨天晚上扫描了…

免费制作证件照的小程序源码

1、效果展示 可以下载程序包&#xff0c;最初级版本免费下载。以上是高级版本。如果你有开发能力的话可以自己写前端&#xff0c;然后以下调用以下api接口&#xff0c;代码如下&#xff1a; 证件照检测制作 接口地址&#xff1a;https://api.zheyings.cn/idcardv3/all 请求方…

2024年网络安全人才平均年薪 24.09 万,跳槽周期 31 个月,安全工程师现状大曝光!_2024网络安全人才市场状况研究报告

网络安全作为近两年兴起的热门行业&#xff0c;成了很多就业无门但是想转行的人心中比较向往但是又心存疑惑的行业&#xff0c;毕竟网络安全的发展史比较短&#xff0c;而国内目前网安的环境和市场情况还不算为大众所知晓&#xff0c;所以到底零基础转行入门网络安全之后&#…

通过pyenv local 3.6.1 这里设置了当前目录的python版本,通过pycharm基于这个版本创建一个虚拟环境

要在 PyCharm 中基于你通过 pyenv local 设置的 Python 版本创建虚拟环境&#xff0c;可以按照以下步骤进行操作&#xff1a; 步骤 1: 获取当前使用的 Python 路径 通过 pyenv 查找当前项目下的 Python 解释器路径&#xff0c;使用以下命令&#xff1a; pyenv which python …

『功能项目』3D模型动态UI显示【76】

本章项目成果展示 我们打开上一篇75主角属性值显示的项目&#xff0c; 本章要做的事情是将3D模型动态显示在主角属性展示界面 首先创建RawImage 调整尺寸 创建文件夹&#xff1a;RenderTexture 创建 Render Texture 创建Camera 在场景中放置一个主角预制体删除所有组件 清空标…

从理论到实践:业务能力建模在数字化转型中的落地实施路径

在数字化转型的浪潮下&#xff0c;企业正在寻求有效的方法来将复杂的战略目标、业务需求和技术能力整合为可执行的操作路径。《业务能力指南》提供了一个系统性的框架&#xff0c;通过业务能力建模帮助企业实现从理论到实践的平稳过渡。本文将以“从理论到实践应用”的视角&…

优思学院:六西格玛(6 Sigma)是什么?

自1987年起&#xff0c;在摩托罗拉公司的推动下&#xff0c;六西格玛的定义已经经历了多次演进。六西格玛可以分为三个基本类别&#xff1a;一种质量方案&#xff0c;主要关注财务成果&#xff1b;一种统计方法&#xff0c;基于过程改进&#xff1b;以及一种统计定义&#xff0…

hrm人力资源管理系统,绩效,考勤,薪酬,五险一金,等全面人力管理(源码+配套方案)

一、项目介绍 一款全源码可二开&#xff0c;可基于云部署、私有部署的企业级数字化人力资源管理系统&#xff0c;涵盖了招聘、人事、考勤、绩效、社保、酬薪六大模块&#xff0c;解决了从人事招聘到酬薪计算的全周期人力资源管理&#xff0c;符合当下大中小型企业组织架构管理运…

评论表设计与实现(多级评论)

首先分析评论的类型 对文章的回复&#xff08;也称根回复或一级回复&#xff09;对根评论的回复 &#xff08;二级回复&#xff0c;被回复的评论id和根评论相同&#xff09;对回复的回复&#xff08;二级回复&#xff0c;被回复的评论id和根评论不同&#xff09; 抽象出数据库…

使用护眼台灯能不能有效预防近视?看世界公认十大护眼灯推荐

2024年的中国&#xff0c;近视问题依旧是一个严峻的公共卫生挑战&#xff0c;特别是儿童和青少年中的近视率持续升高&#xff0c;引起了广泛的关注。据最新的调查数据显示&#xff0c;若无有效控制手段&#xff0c;2050年3-19岁儿童青少年的近视率预计达到84%&#xff0c;高度近…

初识前端监控

以下笔记来源&#xff1a;黑马程序员 背景 思考一下&#xff0c;我们的项目代码在上线之后是不是就不用管了呢&#xff1f; 并不是&#xff0c;作为前端开发工程师&#xff0c;我们是直接跟用户打交道的&#xff0c;一个应用的用户留存率跟这个应用的稳定性有很大的关系&…

学生护眼台灯哪个品牌比较好?五款市场上评价较高的护眼台灯

许多兴趣班和课后辅导班都转移到了线上进行&#xff0c;这就意味着孩子们需要长时间面对电脑或手机屏幕。尽管学习的需求使得完全避免使用这些设备变得不现实&#xff0c;但我们可以通过一些措施来减轻其对眼睛的伤害。护眼台灯的引入便是一个有效的解决方案&#xff0c;它能够…