多視角3D逼真HTML5水波動畫 _html5教學技巧
3d
html5
這是一款基於HTML5的3D水波動畫特效,它的效果非常逼真,我們可以按「G」鍵來讓水池中的石頭上下浮動,按「L」鍵添加燈光效果,設計相當完美。同時說明一下,這款3D水波動畫是基於WebGL渲染技術的,大家可以了解WebGL。
HTML程式碼
XML/HTML Code複製內容到剪貼簿
- img id=id=id=id=id=
- ; 🎜> src="tiles.jpg"> 🎜>> > img id
- =id=id=id src="xneg.jpg"> img id=id=id=
-
>
img id=id=id=
" 🎜> src - ="ypos.jpg">> img id=id =
- id =
=
id" 🎜> src="zpos.jpg">
JavaScript程式碼
JavaScript Code複製內容到剪貼簿
=id
=id src="zneg.jpg">
img id=id=id=- 函數 水() {
- var vertexShader = '
- 變化的 vec2 座標;
- void main() {
- 座標 = gl_Vertex.xy * 0.5 0.5;
- gl_Position = vec4(gl_Vertex.xyz, 1.0);
- }
- ';
- 這.plane = GL.Mesh.plane();
- if (!GL.Texture.canUseFloatingPointTextures()) {
- 拋出 新 >); }
- var filter = GL.Texture.canUseFloatingPointLinearFiltering() ? gl.線性:gl.最近; 這個
- .textureA = 新 GL.Texture(256,Texture(256,I56,過濾器:過濾器}); 這個 .textureB =
- 新 GL.Texture(256,Texture(256,I56,過濾器:過濾器});
- 這個.dropShader = 新 GL.Shader((Shader), cp > const float PI = 3.141592653589793;
- 統一取樣器二維紋理;
- 均勻 vec2 中心;
- 統一浮動半徑;
- 均勻的漂浮強度;
- 變化的 vec2 座標;
- void main() {
- /* 取得頂點資訊*/
- vec4 info = texture2D(紋理, 座標);
- /* 將水滴加到高度*/
- 浮點數 = max(0.0, 1.0 - 長度(中心 * 0.5 0.5 - 座標)/半徑);
- drop = 0.5 - cos(drop * PI) * 0.5;
- info.r = 掉落 * 肌力;
- gl_FragColor = 資訊;
- }
- ');
- 這個.updateShader = 新 GL.Shader( > 統一取樣器二維紋理;
- 統一 vec2 delta;
- 變化的 vec2 座標;
- void main() {
- /* 取得頂點資訊*/
- vec4 info = 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 = 資訊;
- }
- ');
- 這個.normalShader = 新 GL.Shader((Shader) > 統一取樣器二維紋理;
- 統一 vec2 delta;
- 變化的 vec2 座標;
- void main() {
- /* 取得頂點資訊*/
- vec4 info = texture2D(紋理, 座標);
- /* 更新正常*/
- vec3 dx = vec3(delta.x, texture2D(texture, vec2(coord.x dx delta.x, coord.y)).info 🎜>
-
vec3 dy = vec3(0.0, texture2D(texture, vec2(coord.x, coord.y texture2D(texture, vec2(coord.x, coord.y ),
- info.ba = 歸一化(cross(dy, dx)).xz;
- gl_FragColor = 資訊;
- }
- ');
- 這個.sphereShader =
- 新 GL.Shader(vert( > 統一取樣器二維紋理; 統一 vec3 oldCenter;
- uniform vec3 newCenter;
- 統一浮動半徑;
- 變化的 vec2 座標;
- float volumeInSphere(vec3 center) {
- vec3 toCenter = vec3(coord.x * 2.0 - 1.0, 0.0, coord.y * 2.0 - 1.0) - center;
- float t = 長度(至中心)/ 半徑;
- float dy = exp(-pow(t * 1.5, 6.0));
- float ymin = min(0.0, center.y - dy);
- float ymax = min(max(0.0, center.y dy), ymin 2.0 *作用
- 返回(ymax - ymin)* 0.1;
- }
- void main() {
- /* 取得頂點資訊*/
- vec4 info = texture2D(紋理, 座標);
- /* 新增舊卷*/
- info.r = volumeInSphere(oldCenter);
- /* 減去新卷*/
- info.r -= volumeInSphere(newCenter);
- gl_FragColor = 資訊;
- }
- ');
- }
- Water.prototype.addDrop = 函數(x, y, 半徑, 強度) {
- var 這個_ = 這個; 🎜>這個
- ; 🎠 這個.textureB.drawTo(函數 ().
- this_.textureA.bind();
- this_.dropShader.uniforms({
- 中心:[x, y],
- 半徑:半徑,
- 強度: 強度
- }).draw(this_.plane);
- });
- 這個.textureB.swapWith(這個.textureA); };
- Water.prototype.moveSphere =
- 函數(oldCenter, newCenter, 半徑) {
- var 這個_ = 這個; 🎜>這個 ; 🎠
- 這個.textureB.drawTo(函數().
- this_.textureA.bind();
- this_.sphereShader.uniforms({
- oldCenter:oldCenter,
- 新中心:新中心,
- 半徑:半徑
- }).draw(this_.plane);
- });
- 這個.textureB.swapWith(這個.textureA); };
- Water.prototype.stepSimulation = 函數() {
- var 這個_ = 這個; 🎜>這個
- ; 🎠 這個.textureB.drawTo(函數 ().
- this_.textureA.bind();
- this_.updateShader.uniforms({
- 增量:[1 / this_.textureA.width, 1 / this_.textureA.height]
- }).draw(this_.plane);
- });
- 這個.textureB.swapWith(這個.textureA); };
- Water.prototype.updateNormals =
- 函數() {
- var 這個_ = 這個; 🎜>這個; 🎠 這個.textureB.drawTo(函數(). this_.textureA.bind();
- this_.normalShader.uniforms({
- 增量:[1 / this_.textureA.width, 1 / this_.textureA.height]
- }).draw(this_.plane);
- });
- 這個.textureB.swapWith(這個.textureA); };
- 以上就是本文的全部內容,希望對大家的學習有所幫助。
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章
R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前
By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前
By 尊渡假赌尊渡假赌尊渡假赌
刺客信條陰影:貝殼謎語解決方案
2 週前
By DDD
R.E.P.O.如果您聽不到任何人,如何修復音頻
1 個月前
By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它們
1 個月前
By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)
