webgl实现三维转轴时钟时间翻转动画效果代码

代码语言:html

所属分类:三维

代码描述:webgl实现三维转轴时钟时间翻转动画效果代码,显示的是当前的时间。

代码标签: webgl 三维 转轴 时钟 时间 翻转 动画

下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开

<!DOCTYPE html>
<html lang="en" >

<head>
  <meta charset="UTF-8">
  

  
  
  
<style>
html {
  height: 100%;
}
body {
  background: #333;
  overflow: hidden;
  padding: 0;
  margin: 0;
  width: 100%;
  height: 100%;
  display: flex;
  align-items: center;
}
canvas {
  height: 100%;
  width: 100%;
}
</style>


  
  
</head>

<body translate="no">
  <canvas id="canvas"></canvas>
<!-- VertexShader code here -->
<script id="vertexShader" type="x-shader/x-vertex">#version 300 es
precision highp float;
  in vec4 position;
  void main() {
    gl_Position = vec4( position );
  }
</script>

<!-- FragmentShader code here -->
<script id="fragmentShader" type="x-shader/x-fragment">#version 300 es
#if __VERSION__ < 130
#define TEXTURE2D texture2D
#else
#define TEXTURE2D texture
#endif
precision highp float;
out vec4 fragColor;
uniform vec2 u_resolution;
uniform vec4 u_mouse;
uniform float u_time;
uniform float u_date;
  
#define R u_resolution
#define T u_time
#define M u_mouse

#define PI          3.14159265359
#define PI2         6.28318530718

#define MIN_DIST    1e-4
#define MAX_DIST    50.

/** 
    License: Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License
    
    Dial Clock Concept
    
    Was kicking this around in my brain to make a clock shader. 
    The math is a little messy and there's some trick logic 
    around the hours to make the dials work.

*/

  // numbers from SDF Shapes
float box( in vec2 p, in vec2 b ){
    vec2 d = abs(p)-b;
    return length(max(d,0.))+min(max(d.x,d.y),0.);
}

float rbox( in vec2 p, in vec2 b, in vec4 r ) {
    r.xy = (p.x>0.)?r.xy : r.zw;
    r.x  = (p.y>0.)?r.x  : r.y;
    vec2 q = abs(p)-b+r.x;
    return min(max(q.x,q.y),0.)+length(max(q,0.))-r.x;
}

const vec4 bz = vec4(.075,.055,.035,.0);
const vec4 bo = vec4(.175,.15,.075,.025);
const vec2 oa = vec2(.15,.1);

// number
float get0(vec2 p) {
    float bt = max(
        rbox(p,vec2(.15,.175),bz.xxxx),
        -rbox(p,vec2(.1,.125),bz.zzzz)
    );
    return bt;
}
float get1(vec2 p) {
    float bt = box(p,vec2(.025,.175));
    return bt;
}
float get2(vec2 p) {
    float bt = max(
        rbox(p-vec2(.0,.075),oa,bz.xxww),
        -rbox(p-vec2(-.075,.075),vec2(.175,.05),bz.zzww)
    );
    bt = max(bt,-box(p-vec2(-.085,.045),vec2(.08,.08)));
    float bb = max(
        rbox(p+vec2(.0,.075),oa,bz.wwxx),
        -rbox(p+vec2(-.075,.075),vec2(.175,.05),bz.wwzz)
    );
    bb = max(bb,-box(p+vec2(-.085,.045),vec2(.08,.08)));
    return min(bt,bb);
.........完整代码请登录后点击上方下载按钮下载查看

网友评论0