threejs——粒子瀑布运动

想写粒子运动很久了,看网上的粒子运动都是从一个图形变成另一个图形的运动,好像不是很炫酷,于是自己搞一个即实用又炫酷的粒子运动…,兄弟们,走曲儿~

在这里插入图片描述

源码下载地址

在线体验地址

正文

首先准备一张透明背景的logo图片,尺寸为385*100,代码中会过滤透明像素,并将图片信息缩放至合适的位置。

获取图片信息

新增一个img标签并在图片的onload的回调中创建一个canvas,获取到图片的宽高并设置给canvas,并将图片绘制到canvas中。

 const img = new Image();
img.crossOrigin = "Anonymous"; // 处理跨域情况,如果图片有跨域访问需求的话
img.onload = function () {
   
   
    const canvas = document.createElement('canvas');

    canvas.width = img.width;
    canvas.height = img.height;
    const ctx = canvas.getContext('2d');
    if (!ctx) {
   
   
        reject(new Error("无法获取canvas的2D上下文"));
        return;
    }
    ctx.drawImage(img, 0, 0);
    
    ...

接下来就是通过canvas获取图片的像素信息了

const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);

通过调用APIgetImageData,获取从canvas的起点0,0到canvas的终点的所有像素点信息,并遍历信息。

for (let y = 0; y < height; y++) {
   
    // 遍历图像的每一行
    for (let x = 0; x < width; x++) {
   
    // 遍历图像的每一列
        const index = (y * width + x) * 4; // 计算像素在数据数组中的索引
        const alpha = data[index + 3]; // 获取像素的 alpha 值
        if (alpha === 0) continue; // 过滤完全透明像素

        const r = data[index]; // 获取像素的红色值
        const g = data[index + 1]; // 获取像素的绿色值
        const b = data[index + 2]; // 获取像素的蓝色值
        pixels.push({
   
   
            x: (x - width / 2) / 500, // 计算像素的 x 坐标并进行归一化
            y: 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

孙华鹏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值