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

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

时间:2023-07-29 18:01:58浏览次数:42  
标签:const WebGL num 网页 壁纸 我用 rotation Math

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

简述

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

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

相关技术

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

制作步骤,流程

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

我用WebGL打造了一款动态壁纸_可视化_02

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

我用WebGL打造了一款动态壁纸_个性壁纸_03

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

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

我用WebGL打造了一款动态壁纸_时钟_04

然后将刚刚导出的图,依次贴在方块上,然后绘制完成

我用WebGL打造了一款动态壁纸_可视化_05

我用WebGL打造了一款动态壁纸_个性壁纸_06

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

//计算时间更新
  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;
  };

然后添加一下屏幕的鼠标位置监听就可以了,这样一款网页动态可视化时钟就做完了。

我用WebGL打造了一款动态壁纸_个性壁纸_07

网页效果地址

紧接着我们把web项目部署到网页上就可以了。在线效果地址:https://sobigrice.gitee.io/smartClock

如何把网页设置成壁纸呢

众所周知MacOS/Window是没办法直接将网页设置成壁纸的。这里我们就需要用到第三方软件来设置Mac: Plash window: lively wallpaper / wallPaperEngine

成品

我用WebGL打造了一款动态壁纸_时钟_08

后续计划

目前这个项目我已经开源了,开源地址:https://gitee.com/soBigRice/smart-clock后续我打算利用electron和ReactNative打造成一款多平台的壁纸时钟。。。 大家有什么想法和意见欢迎留言一起相互交流。 敬请期待

标签:const,WebGL,num,网页,壁纸,我用,rotation,Math
From: https://blog.51cto.com/u_16000407/6894134

相关文章

  • 我用WebGL打造了一款动态壁纸
    我用WebGL打造了一款动态壁纸简述最近在给自己电脑换壁纸的时候发现了一张很有特点的图(就是下面这张),于是我突发奇想,要是能把这张图变成一张动态的壁纸。那该多好。于是我打算用threejs开发一个3D的动态壁纸网页。相关技术Vite+Vue、Threejs、TwinSpace(我自己基于Threejs封装......
  • 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图形的开发,希望可以通过网页来实现更多......