婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 多視角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水波動畫的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    亚洲欧美国产三级| 国产精品69久久久久水密桃 | 亚洲三级电影网站| 3d动漫精品啪啪一区二区竹菊| 国产 欧美在线| 久久 天天综合| 日日夜夜免费精品视频| 国产精品理论片在线观看| 欧美一级片在线观看| 色噜噜夜夜夜综合网| 精品一区精品二区高清| 亚洲国产精品欧美一二99| 亚洲第一会所有码转帖| 亚洲超碰精品一区二区| 图片区日韩欧美亚洲| 日韩高清在线电影| 狠狠久久亚洲欧美| 成人爱爱电影网址| 91丨porny丨最新| 欧美探花视频资源| 91精品国产手机| 久久蜜桃av一区二区天堂| 国产精品久久久久久久久动漫| 亚洲欧美色综合| 日韩电影免费在线| 91色porny| 精品国产亚洲在线| 亚洲精品日韩综合观看成人91| 肉肉av福利一精品导航| k8久久久一区二区三区| 欧美色图在线观看| 亚洲婷婷综合色高清在线| 免费观看在线色综合| 97se亚洲国产综合在线| 精品精品国产高清a毛片牛牛| 亚洲日本电影在线| av中文字幕不卡| 日韩欧美国产综合一区| 亚洲一级二级在线| 91免费在线播放| 国产日本一区二区| 国内不卡的二区三区中文字幕 | 日本欧美加勒比视频| 欧洲亚洲国产日韩| 国产精品美女久久久久aⅴ| 九一九一国产精品| 欧美一区二区三区四区高清| 亚洲激情男女视频| 日本精品视频一区二区| 亚洲免费观看高清完整| 91极品美女在线| 亚洲免费观看高清完整| 欧美三级资源在线| 麻豆国产一区二区| 国产视频一区二区三区在线观看| 六月丁香综合在线视频| 久久精子c满五个校花| 成人av影院在线| 国产精品不卡在线| 欧美体内she精高潮| 久久成人免费电影| 国产精品美女久久久久aⅴ| 色婷婷综合视频在线观看| 亚洲香蕉伊在人在线观| 欧美精品一区二| 91小视频免费观看| 免费成人结看片| 日本一区二区三区国色天香 | 成人国产精品免费观看视频| 亚洲国产成人在线| 欧美日韩五月天| 99精品久久免费看蜜臀剧情介绍| 午夜日韩在线电影| 国产日韩欧美亚洲| 欧美一区国产二区| 欧美综合一区二区三区| 国产91精品精华液一区二区三区 | 大尺度一区二区| 日韩福利视频网| 亚洲在线视频网站| 《视频一区视频二区| 精品少妇一区二区三区| 一本一道波多野结衣一区二区| 福利一区二区在线观看| 久久99精品视频| 日韩国产高清在线| 美国三级日本三级久久99| 视频一区在线播放| 视频一区二区国产| 美女视频免费一区| 秋霞国产午夜精品免费视频| 亚洲精品国产无天堂网2021| 久久久精品国产99久久精品芒果 | 777久久久精品| 欧美日韩精品一区二区天天拍小说| 99精品视频在线观看免费| 99久久99久久精品免费观看| 欧洲亚洲国产日韩| 日韩一区国产二区欧美三区| 欧美精品一区在线观看| 精品国产三级a在线观看| 国产午夜精品一区二区三区视频| 久久精子c满五个校花| 亚洲精品伦理在线| 日韩av网站免费在线| 国产盗摄精品一区二区三区在线| 99re这里只有精品首页| 欧美无人高清视频在线观看| 欧美精品一区二区三区一线天视频 | 欧美日韩国产乱码电影| 精品国产伦一区二区三区观看方式 | 日韩理论片一区二区| 久久99在线观看| 91久久一区二区| 亚洲国产日韩a在线播放| 最新欧美精品一区二区三区| 久久精品视频在线看| 国产午夜亚洲精品不卡| 亚洲国产aⅴ成人精品无吗| 国产精品一区二区黑丝| 91精品中文字幕一区二区三区| 亚洲桃色在线一区| 国产一区二区三区观看| 欧美裸体bbwbbwbbw| 亚洲婷婷国产精品电影人久久| 久99久精品视频免费观看| 在线电影院国产精品| 亚洲欧美日韩中文播放| 成人免费视频视频| 中文字幕在线不卡一区二区三区| 国产永久精品大片wwwapp| 欧美精品日韩一区| 日韩avvvv在线播放| 日韩一区二区在线观看| 欧美在线色视频| 久久国产精品一区二区| 国产精品一区二区三区99| 欧美日韩精品一区视频| 日本色综合中文字幕| 91精品国产黑色紧身裤美女| 国产美女久久久久| 91黄色在线观看| 色偷偷成人一区二区三区91| 一区二区三区欧美久久| 欧美三级视频在线观看| 久久精品国产亚洲aⅴ| 欧美v国产在线一区二区三区| 国内精品伊人久久久久av一坑 | 亚洲一区二区在线视频| 7777精品伊人久久久大香线蕉超级流畅 | 日日夜夜免费精品| 久久久噜噜噜久噜久久综合| 丁香激情综合五月| 亚洲一区二区三区国产| 久久久久久久久久美女| 91久久精品日日躁夜夜躁欧美| 美女一区二区视频| 亚洲综合在线视频| 一个色在线综合| 国产做a爰片久久毛片| 欧美日韩国产首页| 色综合色狠狠天天综合色| 国产在线播精品第三| 亚洲国产cao| 一区二区三区久久| 国产亚洲视频系列| 久久久久高清精品| 日韩免费一区二区三区在线播放| 欧美三日本三级三级在线播放| 99久久精品免费| 91亚洲精品一区二区乱码| 国产麻豆精品theporn| 国产一二三精品| 粉嫩在线一区二区三区视频| 1区2区3区国产精品| 国产精一品亚洲二区在线视频| 免费观看一级特黄欧美大片| 午夜视黄欧洲亚洲| 图片区小说区区亚洲影院| 视频在线观看一区二区三区| 麻豆国产欧美一区二区三区| 蜜桃av噜噜一区二区三区小说| 午夜精品久久久久久久久久久 | 亚洲精品中文在线影院| 亚洲日本在线看| 久久国产剧场电影| 91麻豆国产精品久久| 欧美成人性福生活免费看| 国产亚洲精品aa午夜观看| 中文字幕一区二区三区不卡在线| 国产欧美一区二区三区网站| 精品日韩欧美在线| 日韩在线一二三区| 青青青伊人色综合久久| 黄色资源网久久资源365| 欧洲一区二区三区在线| 精品人伦一区二区色婷婷| 亚洲人吸女人奶水| 国产99久久精品| 精品国产乱码久久久久久蜜臀|