three.js用粒子使用canvas生成的中文字符位图材质

news/2025/2/2 12:38:13/

three.js用粒子使用canvas生成中文字符材质

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Three.js Canvas 文字粒子</title><style>body { margin: 0; }canvas { display: block; }</style>
</head>
<body><script type="importmap">{"imports": {"three": "https://cdn.jsdelivr.net/npm/three@0.170.0/build/three.module.js","three/addons/": "https://cdn.jsdelivr.net/npm/three@0.170.0/examples/jsm/","three/addons/geometries/TextGeometry.js": "https://cdn.jsdelivr.net/npm/three@0.170.0/examples/jsm/geometries/TextGeometry.js","three/addons/loaders/FontLoader.js": "https://cdn.jsdelivr.net/npm/three@0.170.0/examples/jsm/loaders/FontLoader.js"}}</script><script type="module">import * as THREE from 'three';//--------------------------------------//需要显示的文字let textDisplayed = "新年好";// 创建场景、相机和渲染器const scene = new THREE.Scene();const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);const renderer = new THREE.WebGLRenderer();renderer.setSize(window.innerWidth, window.innerHeight);document.body.appendChild(renderer.domElement);// 设置相机位置camera.position.z = 50;// 创建 Canvas 纹理function createCanvasTexture(text) {const canvas = document.createElement('canvas');const context = canvas.getContext('2d');const size = 300; // Canvas 大小canvas.width = size;canvas.height = size;// 绘制背景context.fillStyle = 'rgba(0, 0, 0, 0)'; // 透明背景context.fillRect(0, 0, size, size);// 绘制文字context.font = '100px Arial';context.fillStyle = 'gold';context.textAlign = 'center';context.textBaseline = 'middle';context.fillText(text, size / 2, size / 2);// 将 Canvas 转换为纹理return new THREE.CanvasTexture(canvas);}// 创建粒子系统const particles = [];const particleCount = 100;const geometry = new THREE.BufferGeometry();const positions = [];for (let i = 0; i < particleCount; i++) {// 随机位置positions.push((Math.random() - 0.5) * 100, (Math.random() - 0.5) * 100, (Math.random() - 0.5) * 100);}geometry.setAttribute('position', new THREE.Float32BufferAttribute(positions, 3));// 创建粒子材质const texture = createCanvasTexture(textDisplayed);const material = new THREE.PointsMaterial({size: 10,map: texture, transparent: true,alphaTest: 0.5});const particleSystem = new THREE.Points(geometry, material);scene.add(particleSystem);// 动画循环let angle = 0;const radius = 80; // 相机绕场景中心旋转的半径renderer.setClearColor(0xff0000, 0.5); function animate() {requestAnimationFrame(animate);angle += 0.01;camera.position.x = radius * Math.cos(angle);camera.position.z = radius * Math.sin(angle);camera.lookAt(scene.position);renderer.render(scene, camera);}animate();</script>
</body>
</html>


http://www.ppmy.cn/news/1568695.html

相关文章

【Unity3D】实现2D角色/怪物死亡消散粒子效果

核心&#xff1a;这是一个Unity粒子系统自带的一种功能&#xff0c;可将粒子生成控制在一个Texture图片网格范围内&#xff0c;并且粒子颜色会自动采样图片的像素点颜色&#xff0c;之后则是粒子编辑出消散效果。 Particle System1物体&#xff08;爆发式随机速度扩散10000个粒…

[笔记] 极狐GitLab实例 : 手动备份步骤总结

官方备份文档 : 备份和恢复极狐GitLab 一. 要求 为了能够进行备份和恢复&#xff0c;请确保您系统已安装 Rsync。 如果您安装了极狐GitLab&#xff1a; 如果您使用 Omnibus 软件包&#xff0c;则无需额外操作。如果您使用源代码安装&#xff0c;您需要确定是否安装了 rsync。…

图像处理篇---图像压缩格式编码格式

文章目录 前言图像压缩格式无损压缩&#xff08;Lossless Compression&#xff09;1.PNG&#xff08;Portable Network Graphics&#xff09;2.GIF&#xff08;Graphics Interchange Format&#xff09;3.BMP&#xff08;Bitmap&#xff09;4.TIFF&#xff08;Tagged Image Fil…

从0开始使用面对对象C语言搭建一个基于OLED的图形显示框架(基础图形库实现)

目录 基础图形库的抽象 抽象图形 抽象点 设计我们的抽象 实现我们的抽象 测试 抽象线 设计我们的抽象 实现我们的抽象 绘制垂直的和水平的线 使用Bresenham算法完成任意斜率的绘制 绘制三角形和矩形 矩形 三角形 实现 绘制圆&#xff0c;圆弧和椭圆 继续我们的…

2025.1.26机器学习笔记:C-RNN-GAN文献阅读

2025.1.26周报 文献阅读题目信息摘要Abstract创新点网络架构实验结论缺点以及后续展望 总结 文献阅读 题目信息 题目&#xff1a; C-RNN-GAN: Continuous recurrent neural networks with adversarial training会议期刊&#xff1a; NIPS作者&#xff1a; Olof Mogren发表时间…

统计学习方法(第二版) 第十章 隐马尔可夫模型(第二节)

本节主要介绍针对隐马尔可夫模型计算概率的方法. 目录 前言 一、直接计算法 二、前向算法 三、后向算法 总结 前言 上节介绍了隐马尔可夫模型的基本概念,以及隐马尔可夫模型的三个基本问题&#xff0c;本节介绍隐马尔可夫模型的概率计算问题&#xff0c;包括直接计算方法&…

LeetCode LCR180文件组合

滑动窗口算法&#xff1a;寻找连续文件编号组合 问题描述 在文件传输过程中&#xff0c;待传输的文件被切分成多个部分&#xff0c;每个部分的文件编号为一个正整数&#xff08;至少有两个文件&#xff09;。传输的要求是&#xff1a;找到所有连续文件编号的组合&#xff0c;…

【深度分析】DeepSeek 遭暴力破解,攻击 IP 均来自美国,造成影响有多大?有哪些好的防御措施?

技术铁幕下的暗战&#xff1a;当算力博弈演变为代码战争 一场针对中国AI独角兽的全球首例国家级密码爆破&#xff0c;揭开了数字时代技术博弈的残酷真相。DeepSeek服务器日志中持续跳动的美国IP地址&#xff0c;不仅是网络攻击的地理坐标&#xff0c;更是技术霸权对新兴挑战者的…