web3d-three.js场景设计器-sprite广告牌

2024-01-12 18:28

本文主要是介绍web3d-three.js场景设计器-sprite广告牌,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  • three.js使用Sprite精灵实现文字或者图片广告牌
  • 1.将文字绘制到Canvas,调整对应宽高。
  • 2.作为Cavans材质绑定到Sprite
  • 3.加载到场景调整适当的scale

function createLabel({ text, fontSize, textColor, color, imageUrl }) {

    return new Promise((resolve, reject) => {

        let canvas = document.createElement('canvas');

        let context = canvas.getContext('2d');

        context.font = `${fontSize}px Arial`;

        let textWidth = context.measureText(text).width;

        canvas.width = Math.ceil(textWidth);

        canvas.height = Math.ceil(fontSize * 1.5);

        context.font = `${fontSize}px Arial`;

       

        if (color) {

            context.fillStyle = color;

            context.fillRect(0, 0, canvas.width, canvas.height);

        }

       

        let drawText = (imgHeight = 0) => {

            context.textBaseline = 'middle';

            context.textAlign = 'center';

            context.fillStyle = textColor;

            context.fillText(text, canvas.width / 2, (canvas.height + imgHeight) / 2);

            // context.fillText(text, canvas.width / 2, canvas.height - fontSize / 2);

         

            resolve(canvas);

        };

        if (imageUrl && imageUrl !== '') {

            let image = new Image();

            image.crossOrigin = "anonymous";

            image.onload = function() {

                let scale = textWidth / image.width;

                let imageHeight = image.height * scale;

                canvas.height += imageHeight;

                context.drawImage(image, 0, 0, image.width * scale, imageHeight);

                context.font = `${fontSize}px Arial`;

                drawText(imageHeight);

               

               

            };

            image.onerror = reject;

            image.src = imageUrl;

        } else {

            drawText();

        }

    });

}

这篇关于web3d-three.js场景设计器-sprite广告牌的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

JavaScript中的reduce方法执行过程、使用场景及进阶用法

《JavaScript中的reduce方法执行过程、使用场景及进阶用法》:本文主要介绍JavaScript中的reduce方法执行过程、使用场景及进阶用法的相关资料,reduce是JavaScri... 目录1. 什么是reduce2. reduce语法2.1 语法2.2 参数说明3. reduce执行过程

前端原生js实现拖拽排课效果实例

《前端原生js实现拖拽排课效果实例》:本文主要介绍如何实现一个简单的课程表拖拽功能,通过HTML、CSS和JavaScript的配合,我们实现了课程项的拖拽、放置和显示功能,文中通过实例代码介绍的... 目录1. 效果展示2. 效果分析2.1 关键点2.2 实现方法3. 代码实现3.1 html部分3.2

JS 实现复制到剪贴板的几种方式小结

《JS实现复制到剪贴板的几种方式小结》本文主要介绍了JS实现复制到剪贴板的几种方式小结,包括ClipboardAPI和document.execCommand这两种方法,具有一定的参考价值,感兴趣的... 目录一、Clipboard API相关属性方法二、document.execCommand优点:缺点:

JavaScript中的isTrusted属性及其应用场景详解

《JavaScript中的isTrusted属性及其应用场景详解》在现代Web开发中,JavaScript是构建交互式应用的核心语言,随着前端技术的不断发展,开发者需要处理越来越多的复杂场景,例如事件... 目录引言一、问题背景二、isTrusted 属性的来源与作用1. isTrusted 的定义2. 为

Python调用另一个py文件并传递参数常见的方法及其应用场景

《Python调用另一个py文件并传递参数常见的方法及其应用场景》:本文主要介绍在Python中调用另一个py文件并传递参数的几种常见方法,包括使用import语句、exec函数、subproce... 目录前言1. 使用import语句1.1 基本用法1.2 导入特定函数1.3 处理文件路径2. 使用ex

Linux alias的三种使用场景方式

《Linuxalias的三种使用场景方式》文章介绍了Linux中`alias`命令的三种使用场景:临时别名、用户级别别名和系统级别别名,临时别名仅在当前终端有效,用户级别别名在当前用户下所有终端有效... 目录linux alias三种使用场景一次性适用于当前用户全局生效,所有用户都可调用删除总结Linux

Mysql虚拟列的使用场景

《Mysql虚拟列的使用场景》MySQL虚拟列是一种在查询时动态生成的特殊列,它不占用存储空间,可以提高查询效率和数据处理便利性,本文给大家介绍Mysql虚拟列的相关知识,感兴趣的朋友一起看看吧... 目录1. 介绍mysql虚拟列1.1 定义和作用1.2 虚拟列与普通列的区别2. MySQL虚拟列的类型2

在MyBatis的XML映射文件中<trim>元素所有场景下的完整使用示例代码

《在MyBatis的XML映射文件中<trim>元素所有场景下的完整使用示例代码》在MyBatis的XML映射文件中,trim元素用于动态添加SQL语句的一部分,处理前缀、后缀及多余的逗号或连接符,示... 在MyBATis的XML映射文件中,<trim>元素用于动态地添加SQL语句的一部分,例如SET或W

Python中的可视化设计与UI界面实现

《Python中的可视化设计与UI界面实现》本文介绍了如何使用Python创建用户界面(UI),包括使用Tkinter、PyQt、Kivy等库进行基本窗口、动态图表和动画效果的实现,通过示例代码,展示... 目录从像素到界面:python带你玩转UI设计示例:使用Tkinter创建一个简单的窗口绘图魔法:用

VUE动态绑定class类的三种常用方式及适用场景详解

《VUE动态绑定class类的三种常用方式及适用场景详解》文章介绍了在实际开发中动态绑定class的三种常见情况及其解决方案,包括根据不同的返回值渲染不同的class样式、给模块添加基础样式以及根据设... 目录前言1.动态选择class样式(对象添加:情景一)2.动态添加一个class样式(字符串添加:情