webgl实现草原上的七星瓢虫三维爬行效果代码

代码语言:html

所属分类:三维

代码描述:webgl实现草原上的七星瓢虫三维爬行效果代码

代码标签: webgl 草原 瓢虫 三维

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


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

<head>

 
<meta charset="UTF-8">
 
 
 
 
<style>
html
{
 
height: 100%;
}
body
{
 
background: #286870;
 
background: -moz-linear-gradient(180deg, #286870 0%, #0b232b 62%, #588849 100%);
 
background: -webkit-linear-gradient(180deg, #286870 0%, #0b232b 62%, #588849 100%);
 
background: linear-gradient(180deg, #286870 0%, #0b232b 62%, #588849 100%);
 
overflow: hidden;
 
padding: 0;
 
margin: 0;
 
width: 100%;
 
height: 100%;
 
min-height: 100vh;
 
display: flex;
 
align-items: center;
 
position: relative;
}
canvas
{
 
box-sizing: border-box;
 
padding: 0;
 
margin: 0;
 
outline: none;
 
box-shadow: 2px 20px 13px rgba(0, 0, 0, 0.75);
 
position: absolute;
 
top: 50%;
 
left: 50%;
 
transform: translate(-50%, -50%);
 
width: 800px;
 
height: 450px;
 
z-index: 0;
}
</style>



</head>

<body >
 
<!-- VertexShader code here -->
<script id="vertexShader" type="x-shader/x-vertex">#version 300 es
precision highp
float;
in vec4 vPosition
;
void main() {
        gl_Position
= vPosition;
}
</script>
<!-- FragmentShader code here -->
<script id="fragmentShader" type="x-shader/x-fragment">#version 300 es
precision highp float;
out vec4 fragColor;
 
uniform vec4 mouse;
uniform vec2 resolution;
uniform float time;

#define R           resolution
#define T           time
#define M           mouse

#define PI  3.14159265359
#define PI2 6.28318530718

#define MAX_DIST    120.
#define MIN_DIST    .0005

float hash21(vec2 p) { return fract(sin(dot(p,vec2(23.86,48.32)))*4374.432); }
vec2  hash2( vec2 p) { return fract(sin(vec2(dot(p,vec2(127.1,311.7)),dot(p,vec2(269.5,183.3))))*43758.5453); }
vec3  hash3( vec2 p) {
    vec3 q = vec3( dot(p,vec2(127.1,311.7)), dot(p,vec2(269.5,183.3)), dot(p,vec2(419.2,371.9)) );
        return fract(sin(q)*43758.5453);
}

mat2 rot(float a) { return mat2(cos(a),sin(a),-sin(a),cos(a)); }
vec3 noised( in vec2 x ){
    vec2 f = fract(x);
    vec2 u = f*f*(3.0-2.0*f);
    vec2 p = vec2(floor(x));
    float a = hash21( p+vec2(0,0) );
        float b = hash21( p+vec2(1,0) );
        float c = hash21( p+vec2(0,1) );
        float d = hash21( p+vec2(1,1) );
        return vec3(a+(b-a)*u.x+(c-a)*u.y+(a-b-c+d)*u.x*u.y,
                   6.0*f*(1.0-f)*(vec2(b-a,c-a)+(a-b-c+d)*u.yx));
}

float fbm( vec2 p, float freq ) {      
        float h = -1.,w = 2.6,m = .35;
        for (float i = 0.; i < freq; i++) {
                h += w * noised((p * m)).x;
                w *= .5;
                m *= 2.;
        }
        return h;
}

vec2 truchet(vec2 uv, float scale) {
    uv *= scale;  
    vec2 grid = fract(uv)-.5;
    vec2 id = floor(uv);
    float hs = hash21(id);
    if(hs>.5) grid.x*=-1.;
    vec2 d2 = vec2(length(grid-.5), length(grid+.5));
    vec2 gx = d2.x<d2.y? vec2(grid-.5) : vec2(grid+.5);
    float circle = length(gx)-.5;
    circle=abs(circle)-.095;
    return vec2(clamp(circle,0.,1.),hs);
}

//@iq Voronoi Distances
//https://www.shadertoy.com/view/ldl3W8
vec4 voronoi( in vec2 x){
    vec2 n = floor(x);
    vec2 f = fract(x);
    float ox = 0.;
        float wave = 323.23123;
        vec2 mg, mr;

    float md = 8.;
    for( float j=-1.; j<=1.; j++ )
    for( float i=-1.; i<=1.; i++ )
    {
        vec2 g = vec2(i,j);
                vec2 o = hash2( n + g );

                o = .35 + .35 *sin.........完整代码请登录后点击上方下载按钮下载查看

网友评论0