我用WebGL打造了一款动态壁纸

我用WebGL打造了一款动态壁纸

简述

最近在给自己电脑换壁纸的时候发现了一张很有特点的图(就是下面这张),于是我突发奇想,要是能把这张图变成一张动态的壁纸。那该多好。于是我打算用threejs开发一个3D的动态壁纸网页。

相关技术

Vite+Vue、Threejs、TwinSpace(我自己基于Threejs封装的一个工具库)

制作步骤,流程

先参照壁纸绘制一张图,记住一定要分图层

然后将图层依次导出(记住是PNG)

接着我们创建Vue项目
npm create vite@latest SmartClock -- --template vue

创建一个绘制的图层,在网页上创建几个方块,

然后将刚刚导出的图,依次贴在方块上,然后绘制完成
图片[1]-我用WebGL打造了一款动态壁纸-五八三

这样呢,我们的一个基本样式就绘制完成了。接着呢
我们得能让他动起来,这边我们在代码中添加相关的获取时间更新的方法

  //计算时间更新
  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打造成一款多平台的壁纸时钟。。。
大家有什么想法和意见欢迎留言一起相互交流。
敬请期待

© 版权声明
THE END
喜欢就支持一下吧
点赞0

Warning: mysqli_query(): (HY000/3): Error writing file '/tmp/MYi9omHo' (Errcode: 28 - No space left on device) in /www/wwwroot/583.cn/wp-includes/class-wpdb.php on line 2345
admin的头像-五八三
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

图形验证码
取消
昵称代码图片