我用WebGL打造了一款动态壁纸
简述
最近在给自己电脑换壁纸的时候发现了一张很有特点的图(就是下面这张),于是我突发奇想,要是能把这张图变成一张动态的壁纸。那该多好。于是我打算用threejs开发一个3D的动态壁纸网页。
相关技术
Vite+Vue、Threejs、TwinSpace(我自己基于Threejs封装的一个工具库)
制作步骤,流程
先参照壁纸绘制一张图,记住一定要分图层
然后将图层依次导出(记住是PNG)
接着我们创建Vue项目
npm create vite@latest SmartClock -- --template vue
创建一个绘制的图层,在网页上创建几个方块,
然后将刚刚导出的图,依次贴在方块上,然后绘制完成
这样呢,我们的一个基本样式就绘制完成了。接着呢 我们得能让他动起来,这边我们在代码中添加相关的获取时间更新的方法
//计算时间更新
const clockUpdate = () => {
// 创建一个 Date 对象实例,它将自动设置为当前时间
const now = new Date();
// 获取当前的小时(0 到 23)
const hours = now.getHours();
hour.rotation.z = -Math.PI * 2 * (hours / 12);
// 获取当前的分钟(0 到 59)
const minutes = now.getMinutes();
min.rotation.z = -Math.PI * 2 * (minutes / 60);
// 获取当前的秒钟(0 到 59)
const seconds = now.getSeconds();
sec.rotation.z = -Math.PI * 2 * (seconds / 60);
};
然后定时更新。这样呢,时钟就可以自动更新了。 接着呢,我们还需要创建相应的动画。
let num = 0;
let way = 1;
// let scale = 0;
//更新转圈圈动画
const updateAnimate = (delta) => {
num += 1 * way;
if (Math.abs(num) == 100) {
way = -way;
}
circle1.rotation.z -= Math.sin(num / 1000) * 0.5;
circle2.rotation.z += Math.sin(num / 1000) * Math.cos(num / 100) * 2;
circle3.rotation.z += Math.sin(num / 2000) * 2;
circle4.rotation.z -= Math.sin(num / 1000);
circle5.rotation.z += Math.sin(num / 500) * 0.1;
};
然后添加一下屏幕的鼠标位置监听就可以了,这样一款网页动态可视化时钟就做完了。
网页效果地址
紧接着我们把web项目部署到网页上就可以了。在线效果地址:https://sobigrice.gitee.io/smartClock
如何把网页设置成壁纸呢
众所周知MacOS/Window是没办法直接将网页设置成壁纸的。这里我们就需要用到第三方软件来设置Mac: Plash window: lively wallpaper / wallPaperEngine
成品
后续计划
目前这个项目我已经开源了,开源地址:https://gitee.com/soBigRice/smart-clock后续我打算利用electron和ReactNative打造成一款多平台的壁纸时钟。。。 大家有什么想法和意见欢迎留言一起相互交流。 敬请期待
标签:const,WebGL,num,网页,壁纸,我用,rotation,Math From: https://blog.51cto.com/u_16000407/6894134