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


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

  • 相关阅读:
    腾讯云网站建设服务有哪些优势?适用于哪些场景?
    概率论之巴拿赫的火柴盒问题
    你应该在 Kubernetes 中运行有状态的应用程序吗?
    基于java+springmvc+mybatis+vue+mysql的水果食品果蔬生鲜商城销售系统
    jetpack compose中实现丝滑的轮播图效果
    卷积核的形象化解释
    live555 UsageEnvironment目录解读
    智慧能源解决方案-最新全套文件
    工厂模式概述
    linux中nginx配置https
  • 原文地址:https://www.cnblogs.com/soBigRice/p/17590183.html