mirror of
https://gitee.com/ice-gl/icegl-three-vue-tres.git
synced 2025-04-05 06:22:43 +08:00
2 lines
5.7 KiB
JavaScript
2 lines
5.7 KiB
JavaScript
import{Y as l,aE as d,aL as m,a2 as u,o as p,c as h,a as i,a5 as x,bL as y,I as t,bP as g,U as n,s as f,B as _,a6 as b,$ as z,a0 as w,a1 as C,G as o,bQ as s,a9 as M}from"./vendor-76c85ed2.js";const P="uniform float time;\nuniform float amplitude;\nuniform float speed;\nuniform float frequency;\n\n// Description : Array and textureless GLSL 2D/3D/4D simplex\n// noise functions.\n// Author : Ian McEwan, Ashima Arts.\n// Maintainer : ijm\n// Lastmod : 20110822 (ijm)\n// License : Copyright (C) 2011 Ashima Arts. All rights reserved.\n// Distributed under the MIT License. See LICENSE file.\n// https://github.com/ashima/webgl-noise\n//\n\nvec3 mod289(vec3 x){\n return x-floor(x*(1./289.))*289.;\n}\n\nvec4 mod289(vec4 x){\n return x-floor(x*(1./289.))*289.;\n}\n\nvec4 permute(vec4 x){\n return mod289(((x*34.)+1.)*x);\n}\n\nvec4 taylorInvSqrt(vec4 r){\n return 1.79284291400159-.85373472095314*r;\n}\n\nfloat noise(vec3 v){\n const vec2 C=vec2(1./6.,1./3.);\n const vec4 D=vec4(0.,.5,1.,2.);\n \n // First corner\n vec3 i=floor(v+dot(v,C.yyy));\n vec3 x0=v-i+dot(i,C.xxx);\n \n // Other corners\n vec3 g=step(x0.yzx,x0.xyz);\n vec3 l=1.-g;\n vec3 i1=min(g.xyz,l.zxy);\n vec3 i2=max(g.xyz,l.zxy);\n \n // x0 = x0 - 0.0 + 0.0 * C.xxx;\n // x1 = x0 - i1 + 1.0 * C.xxx;\n // x2 = x0 - i2 + 2.0 * C.xxx;\n // x3 = x0 - 1.0 + 3.0 * C.xxx;\n vec3 x1=x0-i1+C.xxx;\n vec3 x2=x0-i2+C.yyy;// 2.0*C.x = 1/3 = C.y\n vec3 x3=x0-D.yyy;// -1.0+3.0*C.x = -0.5 = -D.y\n \n // Permutations\n i=mod289(i);\n vec4 p=permute(permute(permute(\n i.z+vec4(0.,i1.z,i2.z,1.))\n +i.y+vec4(0.,i1.y,i2.y,1.))\n +i.x+vec4(0.,i1.x,i2.x,1.));\n \n // Gradients: 7x7 points over a square, mapped onto an octahedron.\n // The ring size 17*17 = 289 is close to a multiple of 49 (49*6 = 294)\n float n_=.142857142857;// 1.0/7.0\n vec3 ns=n_*D.wyz-D.xzx;\n \n vec4 j=p-49.*floor(p*ns.z*ns.z);// mod(p,7*7)\n \n vec4 x_=floor(j*ns.z);\n vec4 y_=floor(j-7.*x_);// mod(j,N)\n \n vec4 x=x_*ns.x+ns.yyyy;\n vec4 y=y_*ns.x+ns.yyyy;\n vec4 h=1.-abs(x)-abs(y);\n \n vec4 b0=vec4(x.xy,y.xy);\n vec4 b1=vec4(x.zw,y.zw);\n \n //vec4 s0 = vec4(lessThan(b0,0.0))*2.0 - 1.0;\n //vec4 s1 = vec4(lessThan(b1,0.0))*2.0 - 1.0;\n vec4 s0=floor(b0)*2.+1.;\n vec4 s1=floor(b1)*2.+1.;\n vec4 sh=-step(h,vec4(0.));\n \n vec4 a0=b0.xzyw+s0.xzyw*sh.xxyy;\n vec4 a1=b1.xzyw+s1.xzyw*sh.zzww;\n \n vec3 p0=vec3(a0.xy,h.x);\n vec3 p1=vec3(a0.zw,h.y);\n vec3 p2=vec3(a1.xy,h.z);\n vec3 p3=vec3(a1.zw,h.w);\n \n //Normalise gradients\n vec4 norm=taylorInvSqrt(vec4(dot(p0,p0),dot(p1,p1),dot(p2,p2),dot(p3,p3)));\n p0*=norm.x;\n p1*=norm.y;\n p2*=norm.z;\n p3*=norm.w;\n \n // Mix final noise value\n vec4 m=max(.6-vec4(dot(x0,x0),dot(x1,x1),dot(x2,x2),dot(x3,x3)),0.);\n m=m*m;\n return 42.*dot(m*m,vec4(dot(p0,x0),dot(p1,x1),\n dot(p2,x2),dot(p3,x3)));\n }\n \n // the function which defines the displacement\n float displace(vec3 point){\n return noise(vec3(point.x*frequency,point.y*frequency,time*speed))*amplitude;\n }\n \n // http://lolengine.net/blog/2013/09/21/picking-orthogonal-vector-combing-coconuts\n vec3 orthogonal(vec3 v){\n return normalize(abs(v.x)>abs(v.z)\n ?vec3(-v.y,v.x,0.)\n :vec3(0.,-v.z,v.y));\n }\n \n void main(){\n vec3 displacedPosition=position+normal*displace(position);\n \n float offset=.0001;\n vec3 tangent=orthogonal(normal);\n vec3 bitangent=normalize(cross(normal,tangent));\n vec3 neighbour1=position+tangent*offset;\n vec3 neighbour2=position+bitangent*offset;\n vec3 displacedNeighbour1=neighbour1+normal*displace(neighbour1);\n vec3 displacedNeighbour2=neighbour2+normal*displace(neighbour2);\n \n // https://i.ya-webdesign.com/images/vector-normals-tangent-16.png\n vec3 displacedTangent=displacedNeighbour1-displacedPosition;\n vec3 displacedBitangent=displacedNeighbour2-displacedPosition;\n \n // https://upload.wikimedia.org/wikipedia/commons/d/d2/Right_hand_rule_cross_product.svg\n vec3 displacedNormal=normalize(cross(displacedTangent,displacedBitangent));\n \n // vNormal=normalMatrix*displacedNormal;\n //vNormal = normal;\n csm_Normal=normalMatrix*displacedNormal;\n // gl_Position=projectionMatrix*modelViewMatrix*vec4(displacedPosition,1.);\n csm_Position=displacedPosition;\n }",N=["rotation-x"],T=n("TresPlaneGeometry",{args:[10,10,20,20]},null,-1),L=l({__name:"waterGlass",setup(v){const e={time:{type:"f",value:.1},amplitude:{type:"f",value:.366},speed:{type:"f",value:.277},frequency:{type:"f",value:15}},a={side:d,color:new m("#346DB7"),metalness:.087,roughness:0,transmission:1,thickness:1.5,refractionRatio:1.5},{onLoop:r}=u();return r(({delta:c})=>{e.time.value+=c}),(c,k)=>(p(),h("TresMesh",{"rotation-x":-Math.PI/2,"position-y":1},[T,i(t(g),x(a,{baseMaterial:y,vertexShader:t(P),uniforms:e,silent:""}),null,16,["baseMaterial","vertexShader"])],8,N))}}),D=n("TresPerspectiveCamera",{position:[10,10,10]},null,-1),S=n("TresAmbientLight",{intensity:1},null,-1),B={args:[16777215,100,0,.1],position:[0,3,0]},A={args:[16777215,100,0,.1],position:[1,3,1]},G={args:[16777215,100,0,.1],position:[-1,3,-1]},j=n("TresGridHelper",{args:[10,10]},null,-1),I=l({__name:"waterGlass",setup(v){const e={clearColor:"#222",shadows:!0,alpha:!1,shadowMapType:z,outputColorSpace:w,toneMapping:C,useLegacyLights:!0,antialias:!0,logarithmicDepthBuffer:!0};return(a,r)=>(p(),f(t(b),x(e,{"window-size":""}),{default:_(()=>[D,S,o(n("TresPointLight",B,null,512),[[t(s)]]),o(n("TresPointLight",A,null,512),[[t(s)]]),o(n("TresPointLight",G,null,512),[[t(s)]]),i(t(M)),j,i(L)]),_:1},16))}});export{I as default};
|