首页 > 其他分享 >我用WebGL打造了一款动态壁纸

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

时间:2023-07-29 17:45:59浏览次数:37  
标签:const WebGL num 网页 壁纸 我用 rotation Math

我用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://www.cnblogs.com/soBigRice/p/17590183.html

相关文章

  • win10锁屏壁纸提取保存
    win10锁屏壁纸提取保存操作将fetchWinScreenAllPic.bat放在任意位置,双击它,在该脚本同级目录会产生一个images文件夹,里面存放着锁频时看到的壁纸图片。可能会包含多张不同尺寸的,甚至是之前存在的(暂时还未被系统清除掉的),选择你想要的那张另存为即可。解释bat脚本如下@echoOFFsetlo......
  • python爬取壁纸图片到本地
    源码#!/usr/bin/pythonimportrandomimportrequestsimportreimporttimefornuminrange(2,212): #url网页地址url="https://pic.netbian.com/new/index_"+str(num)+".html"#需要爬取图片的网页地址page=requests.get(url).text#得到网页源码#......
  • python实现自动切换壁纸(win10)
    因为本人工作环境特殊,很多软件的下载很麻烦,而且违规。然后发现域策略有变更,之前貌似不可以自己换壁纸。我是一个对任何重复的事物都十分容易腻的人,壁纸也包括在内,所以决定写一个自动切换壁纸的脚本importosimportctypesimporttimefromdatetimeimportdatetime#放......
  • WebGL初接触
    有感于在不少jd中看到关于WebGL的内容,想起来之前在高程中还没看完的canvas,就匆匆把剩余的一点看完了,高程中的内容还是皮毛,就属于很基础的、概念性的东西。WebGL画布的3D上下文。不是W3C制定的标准,而是KhronosGroup的标准。作为浏览器中WebGL基础的OpenGLES2.0,要使用WebGL最好......
  • 【WebGL系列-01】获取WebGL上下文
    获取WebGL上下文获取上下文WebGL上下文是从<canvas>标签中获取到的,通过canvas对象的getContext()函数可以获取WebGLRenderingContext。跟据参数的不同,getContext()函数可以获取不同种类的渲染上下文。接口canvas.getContext(contextType:String,contextAttributes?:Objec......
  • 【WebGL系列-02】创建program上下文
    WebGL程序program对象的创建program对象由顶点着色器对象和片元着色器对象构成,因此,创建program对象包含了两部分,一个是着色器对象的创建,一个是program对象的创建。总体流程创建顶点着色器对象创建片元着色器对象创建program对象将顶点着色器和片元着色器添加到程序中将程......
  • 【WebGL系列-03】获取shader变量地址及赋值
    获取shader变量地址及赋值上一节创建了WebGL程序对象,创建好program对象后,对象中包含顶点着色器和片元着色器,着色器中含有变量,我们需要对其进行赋值后才能够进行绘制。着色器代码如下:constVSHADER_SOURCE=/*glsl*/`attributevec4a_Position;voidmain(){gl_P......
  • 【WebGL系列-04】清除缓冲区并绘制图形
    清除缓冲区并绘制图形前文中已经准备好了webgl程序和绘制所用的数据,但是在绘制图像之前,还要对画布进行处理。清除缓冲区由于图像的绘制是一帧一帧绘制,每一帧针对当前的状态,计算屏幕上每个像素的颜色,得到最终的绘制结果。这些状态被保存在一个叫帧缓冲区的地方。帧缓冲区不仅能......
  • 打造原生 WebGL 2D 引擎:一场创意与技术的融合
    打造原生WebGL2D引擎:一场创意与技术的融合1.引言在当今数字化时代,网页的功能越来越丰富,已经远远超越了传统的文本和图片呈现。我们生活在一个充满交互性和视觉魅力的网络世界。每天都会遇到许多令人惊叹的网页效果和动画。作为一个Web3D图形的开发,希望可以通过网页来实现更多......
  • 护眼壁纸
    护眼壁纸分享一份来自AwesomeWallpapers的壁纸;因为源链已经找不到了,所以未能注明原著;侵权删图(及时联系).2023-07-1311:40:37星期四......