這是一款基於HTML5的3D水波動畫特效,它的效果非常逼真,我們可以按「G」鍵來讓水池中的石頭上下浮動,按「L」鍵添加燈光效果,設計相當完美。同時說明一下,這款3D水波動畫是基於WebGL渲染技術的,大家可以了解WebGL。
HTML程式碼
- 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 =
=
- 函數 水() {
- 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); };
- 以上就是本文的全部內容,希望對大家的學習有所幫助。

html5的div元素默认一行不可以放两个。div是一个块级元素,一个元素会独占一行,两个div默认无法在同一行显示;但可以通过给div元素添加“display:inline;”样式,将其转为行内元素,就可以实现多个div在同一行显示了。

html5中列表和表格的区别:1、表格主要是用于显示数据的,而列表主要是用于给数据进行布局;2、表格是使用table标签配合tr、td、th等标签进行定义的,列表是利用li标签配合ol、ul等标签进行定义的。

固定方法:1、使用header标签定义文档头部内容,并添加“position:fixed;top:0;”样式让其固定不动;2、使用footer标签定义尾部内容,并添加“position: fixed;bottom: 0;”样式让其固定不动。

html5中不支持的标签有:1、acronym,用于定义首字母缩写,可用abbr替代;2、basefont,可利用css样式替代;3、applet,可用object替代;4、dir,定义目录列表,可用ul替代;5、big,定义大号文本等等。

HTML5中画布标签是“<canvas>”。canvas标签用于图形的绘制,它只是一个矩形的图形容器,绘制图形必须通过脚本(通常是JavaScript)来完成;开发者可利用多种js方法来在canvas中绘制路径、盒、圆、字符以及添加图像等。

html5废弃了dir列表标签。dir标签被用来定义目录列表,一般和li标签配合使用,在dir标签对中通过li标签来设置列表项,语法“<dir><li>列表项值</li>...</dir>”。HTML5已经不支持dir,可使用ul标签取代。

3种取消方法:1、给td元素添加“border:none”无边框样式即可,语法“td{border:none}”。2、给td元素添加“border:0”样式,语法“td{border:0;}”,将td边框的宽度设置为0即可。3、给td元素添加“border:transparent”样式,语法“td{border:transparent;}”,将td边框的颜色设置为透明即可。

因为html5不基于SGML(标准通用置标语言),不需要对DTD进行引用,但是需要doctype来规范浏览器的行为,也即按照正常的方式来运行,因此html5只需要写doctype即可。“!DOCTYPE”是一种标准通用标记语言的文档类型声明,用于告诉浏览器编写页面所用的标记的版本。


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

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

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

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