欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品

主頁 > 知識庫 > 多視角3D逼真HTML5水波動畫

多視角3D逼真HTML5水波動畫

熱門標簽:南通數據外呼系統推廣 地圖標注位置能賺錢嗎 邢臺縣地圖標注app 阜陽企業外呼系統 外呼系統電話怎么投訴 申請400電話流程簡介 呼和浩特外呼電銷系統排名 外呼線穩定線路 pageadm實現地圖標注

這是一款基于HTML5的3D水波動畫特效,它的效果非常逼真,我們可以按“G”鍵來讓水池中的石頭上下浮動,按“L”鍵添加燈光效果,設計相當完美。同時說明一下,這款3D水波動畫是基于WebGL渲染技術的,大家可以了解一下WebGL。

在線預覽 源碼下載

HTML代碼

XML/HTML Code復制內容到剪貼板
  1. <img id="tiles" src="tiles.jpg">  
  2. <img id="xneg" src="xneg.jpg">  
  3. <img id="xpos" src="xpos.jpg">  
  4. <img id="ypos" src="ypos.jpg">  
  5. <img id="zneg" src="zneg.jpg">  
  6. <img id="zpos" src="zpos.jpg">  
  7.   

JavaScript代碼

JavaScript Code復制內容到剪貼板
  1. function Water() {   
  2.   var vertexShader = '\  
  3.     varying vec2 coord;\  
  4.     void main() {\  
  5.       coord = gl_Vertex.xy * 0.5 + 0.5;\  
  6.       gl_Position = vec4(gl_Vertex.xyz, 1.0);\  
  7.     }\  
  8.   ';   
  9.   this.plane = GL.Mesh.plane();   
  10.   if (!GL.Texture.canUseFloatingPointTextures()) {   
  11.     throw new Error('This demo requires the OES_texture_float extension');   
  12.   }   
  13.   var filter = GL.Texture.canUseFloatingPointLinearFiltering() ? gl.LINEAR : gl.NEAREST;   
  14.   this.textureA = new GL.Texture(256, 256, { type: gl.FLOAT, filter: filter });   
  15.   this.textureB = new GL.Texture(256, 256, { type: gl.FLOAT, filter: filter });   
  16.   this.dropShader = new GL.Shader(vertexShader, '\  
  17.     const float PI = 3.141592653589793;\  
  18.     uniform sampler2D texture;\  
  19.     uniform vec2 center;\  
  20.     uniform float radius;\  
  21.     uniform float strength;\  
  22.     varying vec2 coord;\  
  23.     void main() {\  
  24.       /* get vertex info */\  
  25.       vec4 info = texture2D(texture, coord);\  
  26.       \  
  27.       /* add the drop to the height */\  
  28.       float drop = max(0.0, 1.0 - length(center * 0.5 + 0.5 - coord) / radius);\  
  29.       drop = 0.5 - cos(drop * PI) * 0.5;\  
  30.       info.r += drop * strength;\  
  31.       \  
  32.       gl_FragColor = info;\  
  33.     }\  
  34.   ');   
  35.   this.updateShader = new GL.Shader(vertexShader, '\  
  36.     uniform sampler2D texture;\  
  37.     uniform vec2 delta;\  
  38.     varying vec2 coord;\  
  39.     void main() {\  
  40.       /* get vertex info */\  
  41.       vec4 info = texture2D(texture, coord);\  
  42.       \  
  43.       /* calculate average neighbor height */\  
  44.       vec2 dx = vec2(delta.x, 0.0);\  
  45.       vec2 dy = vec2(0.0, delta.y);\  
  46.       float average = (\  
  47.         texture2D(texture, coord - dx).r +\  
  48.         texture2D(texture, coord - dy).r +\  
  49.         texture2D(texture, coord + dx).r +\  
  50.         texture2D(texture, coord + dy).r\  
  51.       ) * 0.25;\  
  52.       \  
  53.       /* change the velocity to move toward the average */\  
  54.       info.g += (average - info.r) * 2.0;\  
  55.       \  
  56.       /* attenuate the velocity a little so waves do not last forever */\  
  57.       info.g *= 0.995;\  
  58.       \  
  59.       /* move the vertex along the velocity */\  
  60.       info.r += info.g;\  
  61.       \  
  62.       gl_FragColor = info;\  
  63.     }\  
  64.   ');   
  65.   this.normalShader = new GL.Shader(vertexShader, '\  
  66.     uniform sampler2D texture;\  
  67.     uniform vec2 delta;\  
  68.     varying vec2 coord;\  
  69.     void main() {\  
  70.       /* get vertex info */\  
  71.       vec4 info = texture2D(texture, coord);\  
  72.       \  
  73.       /* update the normal */\  
  74.       vec3 dx = vec3(delta.x, texture2D(texture, vec2(coord.x + delta.x, coord.y)).r - info.r, 0.0);\  
  75.       vec3 dy = vec3(0.0, texture2D(texture, vec2(coord.x, coord.y + delta.y)).r - info.r, delta.y);\  
  76.       info.ba = normalize(cross(dy, dx)).xz;\  
  77.       \  
  78.       gl_FragColor = info;\  
  79.     }\  
  80.   ');   
  81.   this.sphereShader = new GL.Shader(vertexShader, '\  
  82.     uniform sampler2D texture;\  
  83.     uniform vec3 oldCenter;\  
  84.     uniform vec3 newCenter;\  
  85.     uniform float radius;\  
  86.     varying vec2 coord;\  
  87.     \  
  88.     float volumeInSphere(vec3 center) {\  
  89.       vec3 toCenter = vec3(coord.x * 2.0 - 1.0, 0.0, coord.y * 2.0 - 1.0) - center;\  
  90.       float t = length(toCenter) / radius;\  
  91.       float dy = exp(-pow(t * 1.5, 6.0));\  
  92.       float ymin = min(0.0, center.y - dy);\  
  93.       float ymax = min(max(0.0, center.y + dy), ymin + 2.0 * dy);\  
  94.       return (ymax - ymin) * 0.1;\  
  95.     }\  
  96.     \  
  97.     void main() {\  
  98.       /* get vertex info */\  
  99.       vec4 info = texture2D(texture, coord);\  
  100.       \  
  101.       /* add the old volume */\  
  102.       info.r += volumeInSphere(oldCenter);\  
  103.       \  
  104.       /* subtract the new volume */\  
  105.       info.r -= volumeInSphere(newCenter);\  
  106.       \  
  107.       gl_FragColor = info;\  
  108.     }\  
  109.   ');   
  110. }   
  111.   
  112. Water.prototype.addDrop = function(x, y, radius, strength) {   
  113.   var this_ = this;   
  114.   this.textureB.drawTo(function() {   
  115.     this_.textureA.bind();   
  116.     this_.dropShader.uniforms({   
  117.       center: [x, y],   
  118.       radius: radius,   
  119.       strength: strength   
  120.     }).draw(this_.plane);   
  121.   });   
  122.   this.textureB.swapWith(this.textureA);   
  123. };   
  124.   
  125. Water.prototype.moveSphere = function(oldCenter, newCenter, radius) {   
  126.   var this_ = this;   
  127.   this.textureB.drawTo(function() {   
  128.     this_.textureA.bind();   
  129.     this_.sphereShader.uniforms({   
  130.       oldCenter: oldCenter,   
  131.       newCenter: newCenter,   
  132.       radius: radius   
  133.     }).draw(this_.plane);   
  134.   });   
  135.   this.textureB.swapWith(this.textureA);   
  136. };   
  137.   
  138. Water.prototype.stepSimulation = function() {   
  139.   var this_ = this;   
  140.   this.textureB.drawTo(function() {   
  141.     this_.textureA.bind();   
  142.     this_.updateShader.uniforms({   
  143.       delta: [1 / this_.textureA.width, 1 / this_.textureA.height]   
  144.     }).draw(this_.plane);   
  145.   });   
  146.   this.textureB.swapWith(this.textureA);   
  147. };   
  148.   
  149. Water.prototype.updateNormals = function() {   
  150.   var this_ = this;   
  151.   this.textureB.drawTo(function() {   
  152.     this_.textureA.bind();   
  153.     this_.normalShader.uniforms({   
  154.       delta: [1 / this_.textureA.width, 1 / this_.textureA.height]   
  155.     }).draw(this_.plane);   
  156.   });   
  157.   this.textureB.swapWith(this.textureA);   
  158. };   

以上就是本文的全部內容,希望對大家的學習有所幫助。

標簽:黃山 內蒙古 鶴崗 蚌埠 楊凌 德州 撫順 辛集

巨人網絡通訊聲明:本文標題《多視角3D逼真HTML5水波動畫》,本文關鍵詞  多,視角,逼真,HTML5,水波,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《多視角3D逼真HTML5水波動畫》相關的同類信息!
  • 本頁收集關于多視角3D逼真HTML5水波動畫的相關信息資訊供網民參考!
  • 推薦文章
    欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品
  • <rt id="w000q"><acronym id="w000q"></acronym></rt>
  • <abbr id="w000q"></abbr>
    <rt id="w000q"></rt>
    久久精品免费观看| 国内精品久久99人妻无码| 亚洲色图欧美色| 91精品国产福利| 亚洲国产日韩综合久久精品| 99国产精品99久久久久久| 亚洲波多野结衣| 中文字幕av资源一区| 国产精品一线二线三线精华| 亚洲欧美日韩第一页| 久久久久国产一区二区三区四区| 蜜桃传媒麻豆第一区在线观看| 国产老熟女伦老熟妇露脸| 3d动漫精品啪啪1区2区免费 | 久久99久久久久久久久久久| 自拍视频一区二区| 日韩一区二区三区在线| 三级在线观看一区二区 | 欧美日韩在线精品一区二区三区激情| 最近日韩中文字幕| jvid福利写真一区二区三区| 色偷偷久久一区二区三区| 亚洲美女偷拍久久| 香蕉在线观看视频| 制服视频三区第一页精品| 日本91福利区| www色com| 国产精品视频你懂的| 精品久久人人做人人爰| 麻豆国产一区二区| 日韩精品久久久久久久的张开腿让| 国产日韩欧美精品在线| 成人app网站| 欧美三片在线视频观看| 日韩精品亚洲专区| 国产精久久一区二区三区| 国产亚洲综合av| 成人美女视频在线观看| 欧美亚洲一区三区| 日本亚洲最大的色成网站www| 国产激情在线免费观看| 欧美激情在线一区二区| 99视频精品全部免费在线| 欧美精品在线一区二区| 青青草97国产精品免费观看无弹窗版| 少妇无套高潮一二三区| 成人欧美一区二区三区白人| 性感美女一区二区三区| 2021国产精品久久精品| 成人高清免费观看| 91精品国产综合久久久蜜臀图片| 久久精品av麻豆的观看方式| 国产黄在线免费观看| 性感美女久久精品| 五月天精品在线| 一区二区三区四区中文字幕| 不卡一区二区在线观看| 中文字幕制服丝袜一区二区三区| 韩国av中国字幕| 久久久国产精华| 亚洲成人激情小说| 久久免费午夜影院| 91免费视频大全| 2023国产一二三区日本精品2022| 成人高清视频在线观看| 欧美成人一区二区三区片免费| 国产91综合一区在线观看| 欧美另类z0zxhd电影| 国产精品综合一区二区三区| 欧美日韩国产综合一区二区| 国产真实乱子伦精品视频| 欧美视频一二三区| 国产精品一区在线观看乱码| 欧美日韩高清一区二区不卡| 国产一区二区免费视频| 欧美日韩激情一区二区| 国产a久久麻豆| 日韩欧美成人一区二区| 99re免费视频精品全部| 久久久久亚洲蜜桃| 一区二区免费在线观看视频| 中文字幕亚洲欧美在线不卡| 欧美性xxxx图片| 一片黄亚洲嫩模| 国产亚洲精品久久久久久豆腐| 午夜国产不卡在线观看视频| 2018天天弄| 激情六月婷婷久久| 欧美美女激情18p| 99久久婷婷国产综合精品| 久久香蕉国产线看观看99| youjizz.com日本| 亚洲人成网站影音先锋播放| 一级在线观看视频| 日本成人在线一区| 欧美日韩一级黄| 成人动漫一区二区三区| 久久久.com| 亚洲无人区一区| 极品久久久久久| xxxx日本黄色| 婷婷久久综合九色综合伊人色| www.色小姐com| 国产另类ts人妖一区二区| 日韩三级视频在线观看| 日本一区二区免费视频| 综合久久综合久久| 少妇高潮在线观看| 国产一区二区福利| www成人在线观看| 丰满圆润老女人hd| 日韩精品1区2区3区| 欧美日韩免费观看一区三区| 99久久国产综合色|国产精品| 欧美韩国日本一区| 日本在线观看网址| 精品中文字幕一区二区| 精品久久久久99| 中文字幕一区二区人妻在线不卡 | 国精产品久拍自产在线网站| 奇米在线7777在线精品| 制服丝袜亚洲播放| 亚洲av成人精品一区二区三区| 亚洲综合网站在线观看| 在线中文字幕不卡| 97se亚洲国产综合自在线不卡 | 欧美国产禁国产网站cc| 91麻豆精品国产91久久综合| 老色鬼精品视频在线观看播放| 欧美一区二区视频在线观看 | 亚洲欧美日韩在线播放| 私库av在线播放| av成人老司机| 亚洲精品久久久蜜桃| 欧洲一区在线观看| 亚洲少妇中文字幕| 午夜激情一区二区三区| 欧美一级高清大全免费观看| 国产 中文 字幕 日韩 在线| 麻豆成人免费电影| 久久中文娱乐网| 欧美88888| av欧美精品.com| 亚洲一区在线观看免费| 欧美久久一二区| v8888av| 精品无码三级在线观看视频| 久久精品视频在线看| 一区二区三区影视| proumb性欧美在线观看| 亚洲观看高清完整版在线观看| 欧美一区欧美二区| 九一在线免费观看| 不卡一区二区三区四区| 亚洲影视在线播放| 欧美一区二区三区免费大片| 久久亚洲AV无码专区成人国产| 国产剧情一区二区| 亚洲免费成人av| 欧美一卡二卡三卡| 成人性视频免费看| 97超碰欧美中文字幕| 日韩中文字幕亚洲一区二区va在线| 精品裸体舞一区二区三区| 人人艹在线视频| www日本在线观看| 老司机免费视频一区二区 | 国产亚洲精久久久久久| 一本色道**综合亚洲精品蜜桃冫 | 777久久久精品| 一级黄色片网址| 99在线热播精品免费| 精品视频在线视频| www.久久国产| 成人深夜在线观看| 视频一区欧美日韩| 亚洲国产精品精华液ab| 欧美日韩视频在线观看一区二区三区| 亚洲午夜久久久久久久久红桃| 国产伦理精品不卡| 亚洲一卡二卡三卡四卡五卡| 欧美videos中文字幕| 色综合久久久久综合体桃花网| 91黄色免费视频| 成人永久免费视频| 日韩国产高清影视| 国产精品久久国产精麻豆99网站| 欧美日本在线看| 任我爽在线视频| 亚洲精品乱码久久久久久蜜桃欧美| 极品少妇一区二区三区精品视频| 亚洲欧美激情小说另类| 精品国产精品网麻豆系列 | 国产乱色国产精品免费视频| 亚洲精品免费在线播放| 26uuu欧美| 欧美美女视频在线观看| 疯狂试爱三2浴室激情视频| 在线观看日韩精品视频| 99国产精品久久久久久久久久久|