Canvas实现文字粒子化,并且绕轴旋转(完善)

1. 之前有放过一个初始版本,但是因为在旋转的时候,有比较大的瑕疵,造成每个点运动到端点后,出现类似撞击的感觉。

2. 所以本文对旋转作了些调整,运用类似水平方向的圆周运动

a. HTML代码,定义canvas标签

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
</head>
<body>
    <canvas id="particles"></canvas>
    <script type="text/javascript" src="particle-main.js"></script>
</body>
</html>

b. js代码,实现文字转粒子,再进行运动的过程

var canvas, ctx;
canvas = document.getElementById("particles");
ctx = canvas.getContext("2d");
canvas.width = 230;
canvas.height = 230;
var dots = [];
var Dividingline = 110;
function init() {
    xiezi();
    var imgData = ctx.getImageData(0, 0, canvas.width, canvas.height);
    ctx.clearRect(0, 0, canvas.width, canvas.height);
    for (var y = 0; y < imgData.height; y += 3) {//y+=3,是因为如果按像素取,有效值非常多,所以这里就每隔3像素取一点
        for (var x = 0; x < imgData.width; x += 3) {//y是高,x是宽
            var i = (x + y * imgData.width) * 4;//这边就从左往右,从上往下;500X300的大小,会取166×100个像素点;×4则是因为rgba()
            var dot = {
                x: 0,
                y: 0
            };
            if (imgData.data[i + 3] >= 228) {//因为img.data中包含了每个像素点的rgba,+3表示取a的值
                dot.x = x;
                dot.y = y;
                dots.push(dot);//将每个满足条件的xy Add到dots数组中
            }
        }
        fengexian();
        //run();
    }
}

function xiezi() {
    ctx.beginPath();
    ctx.font = "50px Comic Sans MS";
    ctx.fillText("SoDiSnI", 20, 100);
    ctx.fill();
}
function drawparticles() {
    for (var i = 0; i < dots.length; i++) {
        var particle = dots[i];
        ctx.beginPath();
        ctx.arc(particle.x, particle.y, 1, 0, Math.PI * 2, true);
        ctx.fill();
    }
}
function fengexian() {
    ctx.beginPath();
    ctx.moveTo(Dividingline, 0);
    ctx.lineTo(Dividingline, 230);
    ctx.stroke();
}
var hudu = 0;
function run() {//主要利用弧度的特性,截取圆周运动的x坐标,可以理解为按圆周运动,但是y坐标不变,
    //相对应的在平面上看起来,快到端点的时候运动慢,在中线附近就较快
    if (hudu < 360) {
        for (var i = 0; i < dots.length; i++) {
            var particle = dots[i];
            var newx=Math.cos(hudu) * (Dividingline - particle.x) + Dividingline;
            ctx.beginPath();
            ctx.arc(newx, particle.y, 1, 0, Math.PI * 2, true);
            ctx.fill();
        }
        hudu+=0.1;//细化弧度,可以保证横坐标运动的间距小
    }
    else {
        hudu = 0;
    }
}
function clean() {
    ctx.clearRect(0, 0, canvas.width, canvas.height);
}
setInterval(function () {
    clean();
    run();
}, 50);

init();
时间: 2024-10-09 23:12:24

Canvas实现文字粒子化,并且绕轴旋转(完善)的相关文章

文字粒子化(Canvas)

文字粒子化,额或者叫小圆圈化... 1 <!DOCTYPE html> 2 <html xmlns="http://www.w3.org/1999/xhtml"> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 5 <title></title> 6 </h

文字粒子化

事情没有想象中那么难--JX官网首页3D粒子效果 随便谈谈用canvas来实现文字图片粒子化

Unity3D 控制物体旋转详解 —— 自身绕轴旋转、缓慢旋转、鼠标控制旋转、欧拉数和四元数的关系

问题描述:昨天需要实现一个功能是根据指令左转90度或者右转90度,当时脑汁可能是有浆糊吧,居然要用直接赋值rotation,这样一来就要牵扯到eulerAngles和四元数的Euler函数了,结果忙活了好久没解决,bug层出,今天经过详细了解,解决了相关问题,一并把其他关于角度和旋转的知识点整理出来. 一.问题的解决:如何让物体绕自身轴旋转 直接上关键代码: player_cube.Rotate(-90, 0, 0); player_cube是获取的需要旋转的物体的Transform,其中-90

谈谈文字图片粒子化

之前写了谈谈文字图片像素化,主要是为了将文字和图片像素化后的坐标提取出来,而本篇所讲即为像素化后的粒子化过程. 先上一个简单的demo -> 粒子化demo,本篇的目的就是为了讲解怎样做这样的简单demo(大牛请无视):同时会介绍一些优秀的demo供大家参考. 主要思路 首先我们谈谈粒子化的主要思路. 像素化后(不知道怎样像素化,参考谈谈文字图片像素化),我们得到了所需图像或者文字的具体坐标,我们将它们形象地用一个个的粒子表示(这里用了圆形),得到的坐标即是粒子的最终位置.粒子的初始位置在哪里?

canvas学习之粒子动画

项目地址:http://pan.baidu.com/s/1ccTptc 粒子动画意思就是把一个图片粒子画,然后使用粒子作出动画效果,主要两个问题:一个图片如何粒子化,这里面我们使用canvas的getImageData(http://web.jobbole.com/87602/),还有一个是作出轨迹,让粒子按照既定轨迹来运行,我们使用tweet.js(http://www.zhangxinxu.com/study/201612/how-to-use-tween-js.html,) 下载项目后,执

cocos2dx--- Node 绕Y轴旋转

step += 5; float ra = (float) CC_DEGREES_TO_RADIANS(step); float i = sinf(ra) * pNode->getCamera()->getZEye(); float j = cosf(ra) * pNode->getCamera()->getZEye(); pNode->getCamera()->setEyeXYZ(i, 0, j); cocos2dx--- Node 绕Y轴旋转,布布扣,bubuko.

canvas动画文字效果

Doughnut Chartvar c=document.getElementById("canvas");var ctx=c.getContext("2d");ctx.font="50px sans-serif";ctx.fillText("75%",40,92);//ctx.clearRect(40, 52, 74, 68); var c=document.getElementById("canvas"

Particles.js基于Canvas画布创建粒子原子颗粒效果

文章目录 使用方法 自定义参数 相关链接 Particles.js是一款基于HTML5 Canvas画布的轻量级粒子动画插件,可以设置粒子的形状.旋转.分布.颜色等属性,还可以动态添加粒子,效果非常炫酷,能和鼠标互动吸附或者是躲避鼠标指针. 使用方法 1.该粒子动画库插件使用方法非常简单,首先要在页面中引入particles.js文件. <script src="js/particles.js"></script> 2.在页面中使用一个div来作为放置粒子的容器

绕任意轴旋转的矩阵推导总结

前言 常用的几何变换中旋转是较为复杂的一种,最近看<Physically Based Rendering, Second Edition: From Theory To Implementation>一书涉及绕任意轴旋转的实现,也给出了大体思路,但具体的推导过程及最后的旋转矩阵并未直接地给出,故根据参考Animated CGEM: Rotation About an Arbitrary Axis总结(欢迎指正). (一)基础 1.点乘与叉乘 点乘(dot)亦称作内积或数量积,如图,a·b =