91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

HTML5怎么實現多視角3D逼真水波動畫

發布時間:2022-03-08 10:24:22 來源:億速云 閱讀:110 作者:iii 欄目:web開發

這篇文章主要介紹“HTML5怎么實現多視角3D逼真水波動畫”,在日常操作中,相信很多人在HTML5怎么實現多視角3D逼真水波動畫問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”HTML5怎么實現多視角3D逼真水波動畫”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

HTML代碼

XML / HTML代碼將內容復制到文本

< img id = “ tiles” src = “ tiles.jpg” >    

< img id = “ xneg” src = “ xneg.jpg” >    

< img id = “ xpos” src = “ xpos.jpg” >    

< img id = “ ypos” src = “ ypos.jpg” >    

< img id = “ zneg” src = “ zneg.jpg” >    

< img id = “ zpos” src = “ zpos.jpg” >    

JavaScript代碼

JavaScript代碼將內容復制到

函數 Water(){   

  var  vertexShader =  '/ 

    變化的vec2坐標; /  

    void main(){/  

      坐標= gl_Vertex.xy * 0.5 + 0.5; /  

      gl_Position = vec4(gl_Vertex.xyz,1.0); /  

    } /  

  ' ;   

  這個.plane = GL.Mesh.plane();   

  如果 (!GL.Texture.canUseFloatingPointTextures()){   

    拋出新的 錯誤(“此演示需要OES_texture_float擴展名” );    

  }   

  var  filter = GL.Texture.canUseFloatingPointLinearFiltering()嗎?gl.LINEAR:gl.NEAREST;   

  這個.textureA = 新的 GL.Texture(256,256,{類型:gl.FLOAT,過濾器:過濾器});   

  這個.textureB = 新的 GL.Texture(256,256,{類型:gl.FLOAT,過濾器:過濾器});   

  這個.dropShader =  new  GL.Shader(vertexShader,  '/ 

    const float PI = 3.141592653589793; /  

    均勻的sampler2D紋理; /  

    統一的vec2中心; /  

    均勻的浮動半徑; /  

    均勻的浮力; /  

    變化的vec2坐標; /  

    void main(){/  

      / *獲取頂點信息* //  

      vec4信息= texture2D(紋理,坐標); /  

      /  

      / *將下落添加到高度* //  

      浮動落差= max(0.0,1.0-長度(中心* 0.5 + 0.5-坐標)/半徑); /  

      下降= 0.5-cos(下降* PI)* 0.5; /  

      info.r + =下降*強度; /  

      /  

      gl_FragColor = info; /  

    } /  

  ' );   

  這個.updateShader =  new  GL.Shader(vertexShader,  '/ 

    均勻的sampler2D紋理; /  

    統一的vec2增量; /  

    變化的vec2坐標; /  

    void main(){/  

      / *獲取頂點信息* //  

      vec4信息= texture2D(紋理,坐標); /  

      /  

      / *計算平均鄰居身高* //  

      vec2 dx = vec2(delta.x,0.0); /  

      vec2 dy = vec2(0.0,delta.y); /  

      浮動平均值=(/  

        texture2D(紋理,坐標-dx).r + /  

        texture2D(紋理,坐標-dy).r + /  

        texture2D(紋理,坐標+ dx).r + /  

        texture2D(紋理,坐標+ dy).r /  

      )* 0.25; /  

      /  

      / *更改速度以移向平均值* //  

      info.g + =(平均值-info.r)* 2.0; /  

      /  

      / *稍微減弱速度,所以波浪不會永遠持續* //  

      info.g * = 0.995; /  

      /  

      / *沿速度移動頂點* //  

      info.r + = info.g; /  

      /  

      gl_FragColor = info; /  

    } /  

  ' );   

  這個.normalShader =  new  GL.Shader(vertexShader,  '/ 

    均勻的sampler2D紋理; /  

    統一的vec2增量; /  

    變化的vec2坐標; /  

    void main(){/  

      / *獲取頂點信息* //  

      vec4信息= texture2D(紋理,坐標); /  

      /  

      / *更新常規* //  

      vec3 dx = vec3(delta.x,texture2D(texture,vec2(coord.x + delta.x,coord.y))。r-info.r,0.0); /  

      vec3 dy = vec3(0.0,texture2D(紋理,vec2(coord.x,coord.y + delta.y))。r-info.r,delta.y); /  

      info.ba = normalize(cross(dy,dx))。xz; /  

      /  

      gl_FragColor = info; /  

    } /  

  ' );   

  這個.sphereShader =  new  GL.Shader(vertexShader,  '/ 

    均勻的sampler2D紋理; /  

    統一的vec3 oldCenter; /  

    統一的vec3 newCenter; /  

    均勻的浮動半徑; /  

    變化的vec2坐標; /  

    /  

    float volumeInSphere(vec3 center){/  

      vec3到Center = vec3(coord.x * 2.0-1.0,0.0,coord.y * 2.0-1.0)-中心; /  

      浮點t =長度(到中心)/半徑; /  

      浮點dy = exp(-pow(t * 1.5,6.0)); /  

      浮點ymin = min(0.0,center.y-dy); /  

      浮點ymax = min(max(0.0,center.y + dy),ymin + 2.0 * dy); /  

      回報率(ymax-ymin)* 0.1; /  

    } /  

    /  

    void main(){/  

      / *獲取頂點信息* //  

      vec4信息= texture2D(紋理,坐標); /  

      /  

      / *添加舊卷* //  

      info.r + = volumeInSphere(oldCenter); /  

      /  

      / *減去新音量* //  

      info.r-= volumeInSphere(newCenter); /  

      /  

      gl_FragColor = info; /  

    } /  

  ' );   

}   

Water.prototype.addDrop = 函數(x,y,半徑,強度){   

  var  this_ =  this ;   

  這個.textureB.drawTo(function (){   

    this_.textureA.bind();   

    this_.dropShader.uniforms({   

      中心:[x,y],   

      半徑:半徑,   

      實力:實力   

    })。draw(this_.plane);   

  });   

  this .textureB.swapWith(this .textureA);   

};   

Water.prototype.moveSphere = 函數(舊中心,新中心,半徑){   

  var  this_ =  this ;   

  這個.textureB.drawTo(function (){   

    this_.textureA.bind();   

    this_.sphereShader.uniforms({   

      oldCenter:oldCenter,   

      newCenter:newCenter,   

      半徑:半徑   

    })。draw(this_.plane);   

  });   

  this .textureB.swapWith(this .textureA);   

};   

Water.prototype.stepSimulation =  function (){   

  var  this_ =  this ;   

  這個.textureB.drawTo(function (){   

    this_.textureA.bind();   

    this_.updateShader.uniforms({   

      增量:[1 / / this_.textureA.width,1 / / this_.textureA.height]   

    })。draw(this_.plane);   

  });   

  this .textureB.swapWith(this .textureA);   

};   

Water.prototype.updateNormals =  function (){   

  var  this_ =  this ;   

  這個.textureB.drawTo(function (){   

    this_.textureA.bind();   

    this_.normalShader.uniforms({   

      增量:[1 / / this_.textureA.width,1 / / this_.textureA.height]   

    })。draw(this_.plane);   

  });   

  this .textureB.swapWith(this .textureA);   

};   

到此,關于“HTML5怎么實現多視角3D逼真水波動畫”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

皮山县| 当雄县| 洛宁县| 苏尼特左旗| 徐闻县| 陕西省| 岳普湖县| 金门县| 阿拉善左旗| 宣化县| 台州市| 崇州市| 图木舒克市| 古浪县| 南京市| 华容县| 杂多县| 墨玉县| 财经| 宣城市| 新郑市| 临邑县| 武夷山市| 上虞市| 临洮县| 镇平县| 通道| 百色市| 翼城县| 桂林市| 石楼县| 遵义县| 虹口区| 府谷县| 铁岭市| 日喀则市| 邵武市| 钦州市| 龙州县| 乐亭县| 穆棱市|