Threejs引入字体,实现3D文字,Canvas画布作为纹理贴图实现滚动字幕

本文主要是介绍Threejs引入字体,实现3D文字,Canvas画布作为纹理贴图实现滚动字幕,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1,介绍

该示例使用的是 r95版本Three.js库。

主要实现功能:Threejs引入字体,实现3D文字,Canvas画布作为纹理贴图实现滚动字幕。效果图如下:

2,主要说明

1,使用FontLoader加载字体,显示3D文字

2,使用Canvas作为纹理贴图,实现滚动字幕

Three.js提供了几种可以在场景中使用的字体。这些字体基于由TypeFace.js库提供的字体。TypeFace.js库可以将TrueType和OpenType字体转换为JavaScript文件或者JSON文件,以便在网页中的JavaScript程序中直接使用。在旧版本的Three.js使用字体时,需要用转换得到的JavaScript文件,而新版Three.js改为使用JSON文件了。

转换得到JSON文件后,你可以使用THREE.FontLoader加载字体,,并将字体对象赋给THREE.TextGeometry的font属性。

使用Facetype.js生成json字体入口

用于Threejs的谷歌字体库地址入口

function add3DFont() {new THREE.FontLoader().load('font/FZYaoTi_Regular.json', function(font) {//加入立体文字var text = new THREE.TextGeometry("左本的博客,Three.js3D文字", {// 设定文字字体font: font,//尺寸size: 24,//厚度height: 5});text.computeBoundingBox();// 设置偏移text.translate(-220, 0, 0);//3D文字材质var m = new THREE.MeshStandardMaterial({color: "#FF0000"});fontMesh = new THREE.Mesh(text, m)fontMesh.position.y = 100;scene.add(fontMesh);});
}

创建Canvas设置字体填充文字,作为纹理CanvasTexture引入到材质MeshPhongMaterial中。

// 创建LED电子屏幕
function addLEDScreen() {var canvas = document.createElement("canvas");canvas.width = 512;canvas.height = 64;var c = canvas.getContext('2d');c.fillStyle = "#aaaaff";c.fillRect(0, 0, 512, 64);// 文字c.beginPath();c.translate(256, 32);c.fillStyle = "#FF0000"; //文本填充颜色c.font = "bold 28px 宋体"; //字体样式设置c.textBaseline = "middle"; //文本与fillText定义的纵坐标c.textAlign = "center"; //文本居中(以fillText定义的横坐标)c.fillText("左本的博客,Three.js3D文字", 0, 0);var cubeGeometry = new THREE.BoxGeometry(512, 64, 5);canvasTexture = new THREE.CanvasTexture(canvas);canvasTexture.wrapS = THREE.RepeatWrapping;var material = new THREE.MeshPhongMaterial({map: canvasTexture, // 设置纹理贴图});var cube = new THREE.Mesh(cubeGeometry, material);cube.rotation.y += Math.PI; //-逆时针旋转,+顺时针scene.add(cube);
}

在线预览:左本的博客 (zuoben.top)

这篇关于Threejs引入字体,实现3D文字,Canvas画布作为纹理贴图实现滚动字幕的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/632950

相关文章

C语言实现黑客帝国代码雨

🚀欢迎互三👉:程序猿方梓燚 💎💎 🚀关注博主,后期持续更新系列文章 🚀如果有错误感谢请大家批评指出,及时修改 🚀感谢大家点赞👍收藏⭐评论✍ 引言 在编程的世界里,我们常常追求创造出令人惊叹的视觉效果和交互体验。今天,我们将深入探索一段用 C语言编写的代码,它实现了一个令人仿佛置身于《黑客帝国》电影中的矩阵效果。 想象一下,你的屏幕上如瀑布般落下一串串神秘的绿色

AI绘制思维导图:使用SpringBoot和Vue实现智能可视化

目录 引言: 思维导图的重要性和应用场景: AI在思维导图绘制中的应用: 概述SpringBoot和Vue框架的特点: 第一部分:思维导图概述 思维导图的定义和历史 思维导图的结构和组成部分 思维导图在不同领域的应用案例 第二部分:AI在思维导图绘制中的作用 人工智能技术简介 AI如何辅助思维导图的自动生成 AI在思维导图中的潜在应用和优势 第三部分:技术选型和项目概

如何使用ssm实现开放式教学评价管理系统+vue

@TOC ssm121开放式教学评价管理系统+vue 第1章 绪论 1.1 背景及意义 系统管理也都将通过计算机进行整体智能化操作,对于开放式教学评价管理系统所牵扯的管理及数据保存都是非常多的,例如个人中心、教师管理、学生管理、游客管理、评价信息管理、综合评价管理,这给管理者的工作带来了巨大的挑战,面对大量的信息,传统的居民方面的信息管理,都是通过笔记的方式进行详细信息的统计,后来出现电脑

Eureka Server高可用模式详解:实现无缝的故障转移与容灾

目录 引言 Eureka Server背景与重要性高可用模式的必要性故障转移与容灾的核心概念 Eureka Server概述 Eureka架构简介Eureka Server与Eureka Client的工作机制Eureka在微服务架构中的角色与功能 Eureka Server的单节点架构及其局限性 单节点部署的特点单点故障的影响面临的挑战与风险分析 Eureka Server高可用模式的

Java对域名一二级区分实现

1.引入maven文件  <dependency><groupId>de.malkusch.whois-server-list</groupId><artifactId>public-suffix-list</artifactId><!--<version>2.2.0</version>--><version>2.0.1</version></dependency> private s

Kylin源码解析——Cube构建过程中如何实现降维

-维度简述 Kylin中Cube的描述类CubeDesc有两个字段,rowkey和aggregationGroups。 @JsonProperty("rowkey")private RowKeyDesc rowkey;@JsonProperty("aggregation_groups")private List<AggregationGroup> aggregationGroups; 其

influxdb数据写入操作(python、C++实现)

基础概念 Point Point由时间戳(time)、数据(field)、标签(tags)组成。 Point相当于传统数据库里的一行数据 Point属性 传统数据库中的概念 time 每个数据记录时间,是数据库中的主索引(会自动生成) fields 各种记录值(没有索引的属性)也就是记录的值:温度, 湿度 tags 各种有索引的属性:地区,海拔 python实现 普通写入操作 '<us

[项目]-通讯录的实现

前言 各位师傅大家好,我是qmx_07,今天来结合前面所学知识点,写一个能够增删改查,持久化数据的通讯录功能 准备工作 项目 一般会写成多个文件来实现,调用,接口声明,接口实现,这是一种良好的编写习惯 test.c //调用contact.h //通讯录的接口声明contact.c//通讯录的接口实现 test.c #include"contact.h"void men

游戏流程与底层实现 逐步完成

http://naotu.baidu.com/file/99f3bc1bbf0a8c9bf32bb6853b2b1dbb?token=854be96620bee55e

Simple RPC - 07 从零开始设计一个服务端(下)_RPC服务的实现

文章目录 PreRPC服务实现服务注册请求处理 设计: 请求分发机制 Pre Simple RPC - 01 框架原理及总体架构初探 Simple RPC - 02 通用高性能序列化和反序列化设计与实现 Simple RPC - 03 借助Netty实现异步网络通信 Simple RPC - 04 从零开始设计一个客户端(上) Simple RPC - 05 从零开始