three+webgl实现晶莹剔透的茶杯旋转效果代码
代码语言:html
所属分类:三维
代码描述:three+webgl实现晶莹剔透的茶杯旋转效果代码
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
<!DOCTYPE html>
<html lang="en" >
<head>
<meta charset="UTF-8">
<style>
body {
margin: 0;
padding: 0;
}
#container {
position: fixed;
touch-action: none;
}
</style>
</head>
<body >
<script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/three.88.js"></script>
<script id="vertexShader" type="x-shader/x-vertex">
void main() {
gl_Position = vec4( position, 1.0 );
}
</script>
<script id="fragmentShader" type="x-shader/x-fragment">
uniform vec2 u_resolution;
uniform float u_time;
uniform vec2 u_mouse;
uniform sampler2D u_noise;
const int octaves = 2;
const float seed = 43758.5453123;
const float seed2 = 73156.8473192;
// Epsilon value
const float eps = 0.05;
const vec3 ambientLight = 0.99 * vec3(1.0, 1.0, 1.0);
const vec3 light1Pos = vec3(10., 5.0, -25.0);
const vec3 light1Intensity = vec3(0.35);
const vec3 light2Pos = vec3(-20., -25.0, 85.0);
const vec3 light2Intensity = vec3(0.2);
// movement variables
vec3 movement = vec3(.0);
// Gloable variables for the raymarching algorithm.
const int maxIterations = 256;
const int maxIterationsShad = 16;
const float stepScale = .7;
const float stopThreshold = 0.001;
vec3 hash33(vec3 p){
return texture2D(u_noise, p.xy * p.z * 256.).rgb;
}
float pn( in vec3 p ) {
vec3 i = floor(p); p -= i; p *= p*(3. - 2.*p);
p.xy = texture2D(u_noise, (p.xy + i.xy + vec2(37, 17)*i.z + .5)/256., -100.).yx;
return mix(p.x, p.y, p.z);
}
// Thanks to Shane for this one.
// Basic low quality noise consisting of three layers of rotated, mutated
// trigonometric functions. Needs work, but sufficient for this example.
float trigNoise3D(in vec3 p){
float res = 0., sum = 0.;
// IQ's cheap, texture-lookup noise function. Very efficient, but still
// a little too processor intensive for multiple layer usage in a largish
// "for loop" setup. Therefore, just one layer is being used here.
float n = pn(p*8. + u_time*.5);
// Two sinusoidal layers. I'm pretty sure you could get rid of one of
// the swizzles (I have a feeling the GPU doesn't like them as much),
// which I'll try to do later.
vec3 t = sin(p.yzx*3.14159265 + cos(p.zxy*3.14159265+1.57/2.))*0.5 + 0.5;
p = p*1.5 + (t - 1.5); // + u_time*0.1
res += (dot(t, vec3(0.333)));
t = sin(p.yzx*3.14159265 + cos(p.zxy*3.14159265+1.57/2.))*0.5 + 0.5;
res += (dot(t, vec3(0.333)))*0.7071;
return ((res/1.7071))*0.85 + n*0.15;
}
mat4 rotationMatrix(vec3 axis, float angle)
{
axis = no.........完整代码请登录后点击上方下载按钮下载查看
















网友评论0