三维云团魔球变幻效果

代码语言:html

所属分类:三维

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

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">

<style>
body { margin: 0; }
canvas { width: 100%; height: 100% }
</style>

</head>
<body translate="no">
<script type="text/javascript" src="http://repo.bfw.wiki/bfwrepo/js/three-min.js"></script>

<script src='http://repo.bfw.wiki/bfwrepo/js/OrbitControls.js'></script>
<script >
    
    THREE.ShaderChunk.simple_lambert_vertex = `
	vec3 vLightFront, vLightBack;
	#include <beginnormal_vertex>
	#include <defaultnormal_vertex>
	#include <begin_vertex>
	#include <project_vertex>
	#include <lights_lambert_vertex>
`

THREE.ShaderChunk.noise = `
	//
	// Description : Array and textureless GLSL 2D/3D/4D simplex 
	//               noise functions.
	//      Author : Ian McEwan, Ashima Arts.
	//  Maintainer : stegu
	//     Lastmod : 20110822 (ijm)
	//     License : Copyright (C) 2011 Ashima Arts. All rights reserved.
	//               Distributed under the MIT License. See LICENSE file.
	//               https://github.com/ashima/webgl-noise
	//               https://github.com/stegu/webgl-noise
	// 

	vec3 mod289(vec3 x) {
	  return x - floor(x * (1.0 / 289.0)) * 289.0;
	}

	vec4 mod289(vec4 x) {
	  return x - floor(x * (1.0 / 289.0)) * 289.0;
	}

	vec4 permute(vec4 x) {
		 return mod289(((x*34.0)+1.0)*x);
	}

	// Permutation polynomial (ring size 289 = 17*17)
	vec3 permute(vec3 x) {
	  return mod289(((x*34.0)+1.0)*x);
	}
	
	float permute(float x){
		return x - floor(x * (1.0 / 289.0)) * 289.0;;
	}

	vec4 taylorInvSqrt(vec4 r){
	  return 1.79284291400159 - 0.85373472095314 * r;
	}

	vec2 fade(vec2 t) {
	  return t*t*t*(t*(t*6.0-15.0)+10.0);
	}

	vec3 fade(vec3 t) {
	  return t*t*t*(t*(t*6.0-15.0)+10.0);
	}
	
	// Hashed 2-D gradients with an extra rotation.
	// (The constant 0.0243902439 is 1/41)
	vec2 rgrad2(vec2 p, float rot) {
	#if 0
	// Map from a line to a diamond such that a shift maps to a rotation.
	  float u = permute(permute(p.x) + p.y) * 0.0243902439 + rot; // Rotate by shift
	  u = 4.0 * fract(u) - 2.0;
	  // (This vector could be normalized, exactly or approximately.)
	  return vec2(abs(u)-1.0, abs(abs(u+1.0)-2.0)-1.0);
	#else
	// For more isotropic gradients, sin/cos can be used instead.
	  float u = permute(permute(p.x) + p.y) * 0.0243902439 + rot; // Rotate by shift
	  u = fract(u) * 6.28318530718; // 2*pi
	  return vec2(cos(u), sin(u));
	#endif
	}

	float snoise(vec3 v){ 
	  const vec2  C = vec2(1.0/6.0, 1.0/3.0) ;
	  const vec4  D = vec4(0.0, 0.5, 1.0, 2.0);

	// First corner
	  vec3 i  = floor(v + dot(v, C.yyy) );
	  vec3 x0 =   v - i + dot(i, C.xxx) ;

	// Other corners
	  vec3 g = step(x0.yzx, x0.xyz);
	  vec3 l = 1.0 - g;
	  vec3 i1 = min( g.xyz, l.zxy );
	  vec3 i2 = max( g.xyz, l.zxy );

	  //   x0 = x0 - 0.0 + 0.0 * C.xxx;
	  //   x1 = x0 - i1  + 1.0 * C.xxx;
	  //   x2 = x0 - i2  + 2.0 * C.xxx;
	  //   x3 = x0 - 1.0 + 3.0 * C.xxx;
	  vec3 x1 = x0 - i1 + C.xxx;
	  vec3 x2 = x0 - .........完整代码请登录后点击上方下载按钮下载查看

网友评论0