HTML53D服装摇摆动画特效
2023-11-18 13:49:46
这也是一个基于HTML5画布的3D动画杰作。这是一个特殊的效果,可以挥舞着风和挥舞着三维服装。这是非常现实的,当我们把鼠标滑过衣服时,衣服会有一个摆动动画。当你点击鼠标时,衣服会更剧烈地摆动。 在线演示源代码下载 HTML代码 xml代码将内容复制到剪贴板。 2D画布上的3D演示 将光标移动到/单击以摆动 这个图书馆的js代码,它主要用来处理3D效果 Javascript代码将内容复制到剪贴板。 window.p3d = { { 纹理:null, G:空 }; p3d.clear =函数(F,W,H){ var; G.beginPath(); g.fillstyle = F; g.fillrect(0, 0,W,H); } p3d.num_cmp =功能(A,B){ return a;} p3d.drawtriangle =功能(POSS,UV,shade_clr){ 无功W = this.texture.width; var H = this.texture.height; var; var { 1 { 0 },0 },1 }; VaR VBD = { POSS { 2 }。X POSS { 0 }。X,POSS { 2 }。Y POSS { 0 }。Y }; VaR VA = {乌布苏{ 1 }。U型UV { 0 }。U、UV { 1 }。V乌布苏{ 0 }。V }; VaR VB = {乌布苏{ 2 }。U型UV { 0 }。U、UV { 2 }。V乌布苏{ 0 }。V }; VA { 0 } = w; 弗吉尼亚州{ 1 } = h; VB { 0 } = w; VB { 1 } = h; var m =新的M22(); m._11 = VA { 0 }; m._12 = VA { 1 }; m._21 = VB { 0 }; m._22 = VB { 1 }; VaR IM = m.getinvert(); 如果(!IM)返回false; var a =我。_11 * VAD { 0 } +我。_12 * VBD { 0 }; var b =我。_21 * VAD { 0 } +我。_22 * VBD { 0 }; var c =我。_11 * VAD { 1 } +我。_12 * VBD { 1 }; var a我。_21 * VAD { 1 } +我。_22 * VBD { 1 }; Var Wu =紫{ 0 }。U×W; VaR HV = UV { 0 }。V H; 吴; 吴; G.save(); G.beginPath(); G.moveTo(POSS { 0 }。X,POSS { 0 }。Y); G.lineTo(POSS { 1 }。X,POSS { 1 }。Y); G.lineTo(POSS { 2 }。X,POSS { 2 }。Y); G.clip(); G.transform(A,C,B,D,POSS { 0 }。X杜,POSS { 0 }。Y DV); 界限 VaR BX = {吴,吴+ VA { 0 },{ 0 } }吴+ VB; var = HV,HV +弗吉尼亚州{ 1 },HV + VB { 1 } }; Bx.sort(P3D。num_cmp); By.sort(P3D。num_cmp); VaR BW = BX { 2 } - BX { 0 }; { {由{ 2 } } -由{ 0 }; (如果(BX { 0 } + BW)<=(W-1)BW + +); (如果(由{ 0 } + BH)<=(H-1)BH + +); 如果(BX { 0 } > = 1){ BX { 0 }——;BW ++;} 如果(由{ 0 } = 1){ 0 } }; G.drawImage(this.texture,BX { 0 },由{ 0 },BW,BH,BX { 0 },由{ 0 },BW,BH); 如果(shade_clr){ g.fillstyle = shade_clr; g.fillrect(BX { 0 },由{ 0 },BW,BH); } G.restore(); 返回true; } p3d.drawtestbyindexbuffer =功能(pos_buf,ix_buf,剔除){ var; 如果((ix_buf。长度为3)!= 0) 抛出无效索引缓冲区长度!; VaR len = ix_buf。长度/ 3; var i,IBASE,波动; var,{ },{,},}; g.strokewidth = 1; 为(i = 0,IBASE = 0;我< len;+ +我) { 波动= ix_buf { IBASE + } << 2; POSS { 0 },{ x = pos_buf波动+ }; POSS { 0 } { } Y = pos_buf波动; 波动= ix_buf { IBASE + } << 2; POSS { 1 },{ x = pos_buf波动+ }; POSS { 1 } { } Y = pos_buf波动; 波动= ix_buf { IBASE + } << 2; POSS { 2 },{ x = pos_buf波动+ }; POSS { 2 } { } Y = pos_buf波动; 跨产品的z分量< 0 var { 1 { } 0; 0=1; var = 2 { 1 }; var = 2 { 1 }; var卡尔= (((((((斧* CY)-(唉* CX))*剔除)<0); G.beginPath(); g.strokestyle =剔除# 592 # 0f0 ; G.moveTo(POSS { 0 }。X,POSS { 0 }。Y); G.lineTo(POSS { 1 }。X,POSS { 1 }。Y); G.lineTo(POSS { 2 }。X,POSS { 2 }。Y); G.lineTo(POSS { 0 }。X,POSS { 0 }。Y); G.stroke(); } } p3d.drawbyindexbuffer =功能(pos_buf,ix_buf,tx_buf,剔除,z_clip){ 无功功率; 无功color_polyn =!this.texture; 如果(这个纹理){ W = this.texture.width; H = this.texture.height; } var; var m =新的M22(); 如果(!Culling) culling = 0; 如果((ix_buf。长度为3)!= 0) 抛出无效索引缓冲区长度!; var i,IBASE,波动,tbase,POSS = { { },{ },{ } }; VaR len = ix_buf。长度/ 3; 无功uv_0u,uv_0v,uv_1u,uv_1v,uv_2u,uv_2v; 为(i = 0,IBASE = 0;我< len;+ +我) { tbase = ix_buf { IBASE + } << 1 波动= tbase << 1; POSS { 0 },{ x = pos_buf波动+ };uv_0u = tx_buf { tbase + }; POSS { 0 },{ y = pos_buf波动+ };uv_0v = tx_buf { tbase }; 如果(z_clip(pos_buf {波动} 1){ IBASE)= 2;继续;} tbase = ix_buf { IBASE + } << 1 波动= tbase << 1; POSS { 1 },{ x = pos_buf波动+ };uv_1u = tx_buf { tbase + }; POSS { 1 },{ y = pos_buf波动+ };uv_1v = tx_buf { tbase }; 如果(z_clip(pos_buf波动} { 1)){ + IBASE;继续;} tbase = ix_buf { IBASE + } << 1 波动= tbase << 1; POSS { 2 },{ x = pos_buf波动+ };uv_2u = tx_buf { tbase + }; POSS { 2 },{ y = pos_buf波动+ };uv_2v = tx_buf { tbase }; 如果(z_clip(pos_buf { } {继续波动1));} var { 1 { 0 },0 },1 }; VaR VBD = { POSS { 2 }。X POSS { 0 }。X,POSS { 2 }。Y POSS { 0 }。Y }; var { 2 { 1 },x 1,} 2; 跨产品的z分量< 0 如果(((((((((( VAD { 0 }×VCD { 1 })-(VAD { 1 }×VCD { 0 }))*剔除)<< 0) 继续; 如果(color_polyn){ g.fillstyle = uv_0u; G.beginPath(); G.moveTo(POSS { 0 }。X,POSS { 0 }。Y); G.lineTo(POSS { 1 }。X,POSS { 1 }。Y); G.lineTo(POSS { 2 }。X,POSS { 2 }。Y); G.fill(); 继续; } VaR VA = { uv_1u - uv_0u,uv_1v - uv_0v }; VaR VB = { uv_2u - uv_0u,uv_2v - uv_0v }; VA { 0 } = w; 弗吉尼亚州{ 1 } = h; VB { 0 } = w; VB { 1 } = h; m._11 = VA { 0 }; m._12 = VA { 1 }; m._21 = VB { 0 }; m._22 = VB { 1 }; VaR IM = m.getinvert(); 如果(!im){继续;} var a =我。_11 * VAD { 0 } +我。_12 * VBD { 0 }; var b =我。_21 * VAD { 0 } +我。_22 * VBD { 0 }; var c =我。_11 * VAD { 1 } +我。_12 * VBD { 1 }; var a我。_21 * VAD { 1 } +我。_22 * VBD { 1 }; Var Wu = uv_0u * W; VaR HV = uv_0v×h; 吴; 吴; G.save(); G.beginPath(); G.moveTo(POSS { 0 }。X,POSS { 0 }。Y); G.lineTo(POSS { 1 }。X,POSS { 1 }。Y); G.lineTo(POSS { 2 }。X,POSS { 2 }。Y); G.clip(); G.transform(A,C,B,D,POSS { 0 }。X杜,POSS { 0 }。Y DV); 界限 VaR BX = {吴,吴+ VA { 0 },{ 0 } }吴+ VB; var = HV,HV +弗吉尼亚州{ 1 },HV + VB { 1 } }; Bx.sort(P3D。num_cmp); By.sort(P3D。num_cmp); VaR BW = BX { 2 } - BX { 0 }; { {由{ 2 } } -由{ 0 }; (如果(BX { 0 } + BW)<=(W-1)BW + +); (如果(由{ 0 } + BH)<=(H-1)BH + +); 如果(BX { 0 } > = 1){ BX { 0 }——;BW ++;} 如果(由{ 0 } = 1){ 0 } }; G.drawImage(this.texture,BX { 0 },由{ 0 },BW,BH,BX { 0 },由{ 0 },BW,BH); * 如果(shade_clr){ g.fillstyle = shade_clr; g.fillrect(BX { 0 },由{ 0 },BW,BH); } * / G.restore(); } } 功能vec3(_x,_y,_z) { 这_x | | x = 0; 这_y | | y = 0; 这_z | | Z = 0; } vec3.prototype = { { 函数(){ 这个= x =这个= z = 0; }, 子:函数(v){ 这个X = v.x; 这Y = y; 这Z = z; 返回此; }, 添加:函数(v){ 这个X = v.x; 这Y = y; 这Z = z; 返回此; }, 没有源:功能(v){ 这个X = v.x; 这Y = y; 这Z = z; 返回此; }, 规范:函数(){ 返回Math.sqrt(这个X,X + Y *这这。。Y +本。Z *本。Z); }, 标准化:函数(){ VaR NRM = Math.sqrt(这个X,X + Y *这这。。Y +本。Z *本。Z); 如果(NRM!= 0) { 这个X / = NRM; 这Y / = NRM; 这Z / = NRM; } 返回此; }, Smul:函数(K){ 这个; 这个; 这个; 返回此; }, DpWith:功能(v){ 退货。X v.x +本。Y * y + z,z *; }, Cp:函数(v,w){ 这个X =(w.y * z)-(w.z * y); 这个y =(w.z * v.x)-(w.x * z); ,Z =(w.x * y)-(w.y * v.x); 返回此; }, 说明:函数(){ 返回这个。 } } 函数M(CPY) { 如果(CPY) this.copyfrom(CPY); {其他 this.ident(); } } m44.prototype = { { 识别:函数(){ 这个_12 =这。_13 =这_14 = 0; 这个_21 =这。_23 =这_24 = 0; 这个_31 =这。_32 =这_34 = 0; 这个_41 =这。_42 =这_43 = 0; 这个_11 =,=这_22。_33 =这_44 = 1; 返回此; }, 没有源:功能(M){ 这_11 = m._11; 这_12 = m._12; 这_13 = m._13; 这_14 = m._14; 这_21 = m._21; 这_22 = m._22; 这_23 = m._23; 这_24 = m._24; 这_31 = m._31; 这_32 = m._32; 这_33 = m._33; 这_34 = m._34; 这_41 = m._41; 这_42 = m._42; 这_43 = m._43; 这_44 = m._44; 返回此; }, transvec3:函数(x,y,z,){ 出{ 0 } = X *本。_11 + Y + Z * *。_21本。_31 + _41本; 出{ 1 } = X *本。_12 + Y + Z * *。_22本。_32 + _42本; 出{ 2 } = X *本。_13 + Y + Z * *。_23本。_33 + _43本; 出{ 3 } = X *本。_14 + Y + Z * *。_24本。_34 + _44本; }, transvec3rot:函数(x,y,z,){ 出{ 0 } = X *本。_11 + Y + Z * *。_21 _31本; 出{ 1 } = X *本。_12 + Y + Z * *。_22 _32本; 出{ 2 } = X *本。_13 + Y + Z * *。_23 _33本; }, PerspectiveLH:功能(VW,VH,z_near,z_far){ 这个_11 = 2 * z_near /大众; 这_12 = 0; 这_13 = 0; 这_14 = 0; 这_21 = 0; 这个_22 = 2 * z_near / VH; 这_23 = 0; 这_24 = 0; 这_31 = 0; 这_32 = 0; 这个_33 = z_far /(z_far-z_near); 这_34 = 1; 这_41 = 0; 这_42 = 0; 这个_43 = z_near * z_far /(z_near-z_far); 这_44 = 0; 返回此; }, lookatlh:功能(AUP,纨绔子弟,AAT){ VaR AX =新vec3(); VaR AY =新vec3(); VaR AZ =新vec3(AAT,X,Y,Z AAT AAT。。); AZ.sub(从)规范(); AX.cp(AUP,AZ)规范(); AY.cp(AZ,AX); 这个_11 = AX。X;这。_12 =是的。X;这。_13 = AZ。X;这_14 = 0; 这个_21 = AX。Y;这。_22 =是的。Y;这。_23 = AZ。Y;这_24 = 0; 这个_31 = AX。Z;这。_32 =是的。Z;这。_33 = AZ。Z;这_34 = 0; 这_41 = -afrom.dpwith(AX); 这_42 = -afrom.dpwith(唉); 这_43 = -afrom.dpwith(AZ); 这_44 = 1; 返回此; }, 功能多:(A,B){ 这个_11 = a._11 * b._11 + a._12 * b._21 + a._13 * b._31 + a._14 * b._41; 这个_12 = a._11 * b._12 + a._12 * b._22 + a._13 * b._32 + a._14 * b._42; 这个_13 = a._11 * b._13 + a._12 * b._23 + a._13 * b._33 + a._14 * b._43; 这个_14 = a._11 * b._14 + a._12 * b._24 + a._13 * b._34 + a._14 * b._44; 这个_21 = a._21 * b._11 + a._22 * b._21 + a._23 * b._31 + a._24 * b._41; 这个_22 = a._21 * b._12 + a._22 * b._22 + a._23 * b._32 + a._24 * b._42; 这个_23 = a._21 * b._13 + a._22 * b._23 + a._23 * b._33 + a._24 * b._43; 这个_24 = a._21 * b._14 + a._22 * b._24 + a._23 * b._34 + a._24 * b._44; 这个_31 = a._31 * b._11 + a._32 * b._21 + a._33 * b._31 + a._34 * b._41; 这个_32 = a._31 * b._12 + a._32 * b._22 + a._33 * b._32 + a._34 * b._42; 这个_33 = a._31 * b._13 + a._32 * b._23 + a._33 * b._33 + a._34 * b._43; 这个_34 = a._31 * b._14 + a._32 * b._24 + a._33 * b._34 + a._34 * b._44; 这个_41 = a._41 * b._11 + a._42 * b._21 + a._43 * b._31 + a._44 * b._41; 这个_42 = a._41 * b._12 + a._42 * b._22 + a._43 * b._32 + a._44 * b._42; 这个_43 = a._41 * b._13 + a._42 * b._23 + a._43 * b._33 + a._44 * b._43; 这个_44 = a._41 * b._14 + a._42 * b._24 + a._43 * b._34 + a._44 * b._44; 返回此; }, 函数(x,y,z){ 这个_11 = 1;这个_12 = 0;这个_13 = 0;这_14 = 0; 这个_21 = 0;这个_22 = 1;这个_23 = 0;这_24 = 0; 这个_31 = 0;这个_32 = 0;这个_33 = 1;这_34 = 0; 这个_41 = x;这。_42 = Y;这。_43 = Z;这_44 = 1; 返回此; }, transpose33:函数(){ var t; 这_12 T =; 这本_21。_12 =; 这_21 = T; 这_13 T =; 这本_31。_13 =; 这_31 = T; 这_23 T =; 这本_32。_23 =; 这_32 = T; 返回此; }, 样式旋转 glrotate:函数(x,y,z的角度){ var = Math.sin(角); var c = math.cos(角度); var; var; VaR ZZ = Z×Z; var; VaR YZ = Y×Z; VaR ZX = Z××; VaR xs = X *; var; VaR ZS = Z的; 无功one_c = 1 C; * 这个_11 =(one_c * XX)+ C; 这个_21 =(one_c * XY)- ZS; 这个_31 =(one_c * ZX)+ YS; 这_41 = 0; 这个_12 =(one_c * XY)+ ZS; 这个_22 =(one_c * YY)+ C; 这个_32 =(one_c * YZ)xs; 这_42 = 0; 这个_13 =(one_c * ZX)- YS; 这个_23 =(one_c * YZ)+ X; 这个_33 =(one_c * ZZ)+ C; 这_43 = 0; 这_14 = 0; 这_24 = 0; 这_34 = 0; 这_44 = 1; * / 这个_11 =(one_c * XX)+ C; 这个_12 =(one_c * XY)- ZS; 这个_13 =(one_c * ZX)+ YS; 这_14 = 0; 这个_21 =(one_c * XY)+ ZS; 这个_22 =(one_c * YY)+ C; 这个_23 =(one_c * YZ)xs; 这_24 = 0; 这个_31 =(one_c * ZX)- YS; 这个_32 =(one_c * YZ)+ X; 这个_33 =(one_c * ZZ)+ C; 这_34 = 0; 这_41 = 0; 这_42 = 0; 这_43 = 0; 这_44 = 1; 返回此; } } 矩阵 / / 2x2 M22()函数 { 这_11 = 1; 这_12 = 0; 这_21 = 0; 这_22 = 1; } m22.prototype.getinvert =功能() { var =新的M22(); VAR DET =这。_11 *本。_22这。_12 *本。_21; 如果(DET > -0.0001 DET<0.0001) 返回null; 出来。_11 =这_22 / DET; 出来。_22 =这_11 / DET; 出来。_12 = -这_12 / DET; 出来。_21 = -这_21 / DET; 回来了; } 3d服装动画js代码 Javascript代码将内容复制到剪贴板。 ClothApp()函数 { this.canvas = document.getelementbyid(简历); 色。G = this.canvas.getcontext(2D); 新图像(); this.texture1 =特; tex.onload =函数(){ _this.start();}; tex.src =20090226032826。gif; 新图像(); this.texture2 =特; tex.onload =函数(){ _this.start();}; tex.src =20090226032825。png; this.mloadcount = 2; this.mtickcount = 0; 这G = 0.53; this.g1 = 0.45; this.mprojmat = null; this.mviewmat = null; this.mviewfrom =新vec3(); 这个mviewfrom y = 150; 这个mviewfrom Z = 1000; this.mviewfroma =(新vec3()),CopyFrom(这个。mviewfrom); this.mviewangle = 0; this.mnlen = 0; this.mnodes = { }; this.mrendertris = null; this.mltnode = null; this.mrtnode = null; this.mltnodev =新vec3(); this.mrtnodev =新vec3(); this.mwforce =新vec3(); this.frate = 15; 无功_this =这; } clothapp.zsortcmp =功能(T1,T2){ 返回t2.sortkey - t1.sortkey; } clothapp.prototype = { { 开始:函数(){ 如果(--this.mloadcount!= 0)返回; this.vup =新vec3(0, 1, 0); this.vat =新vec3(0, 80, 0); this.mviewport = { }; 这个mviewport W = 480; 这个mviewport H = 300; this.mviewport.ow = 240; this.mviewport.oh = 150; this.setuptransforms(); (180)this.generatecloth; This.generateRenderTriangles(); 无功_this =这; This.canvas.addEventListener(MouseMove This.canvas.addEventListener(mouseDown Window.setTimeout(function(){ _this.oninterval();},这个修士); }, OnInterval:函数(){ 这mtickcount + +; / /本。mltnodev。Z = Math.cos(这。mtickcount×0.1)×2; This.tick(); this.updateposition(); This.draw(); 无功_this =这; Window.setTimeout (function () {_this.onInterval ();}, this.frate); }, OnMouseMove:功能(e){ 如果(e.clientx | | e.clientx = = 0) this.mviewangle =(e.clientx - 240)* 0.004; 如果(e.clienty | | e.clienty = = 0) 这个mviewfroma。Y = 90 -(e.clienty - 0)* 0.8; }, OnClick:功能(e){ 如果(e.clientx | | e.clientx = = 0) { 这个mwforce Z = 4; 这个mwforce。x =(e.clientx - 240)* -0.03; } }, 滴答:函数(){ this.updateviewtrans(这个。mviewangle); VaR nlen = this.mnodes.length; 变量I和ND; 为(i = 0;i < nlen;i++) { ND =这模型{我}; 钕f.x = 0; 钕f.z = 0; 如果(nd.flags 4) 钕-this.g1 fission yield裂变产额=; 其他的 二。fission yield裂变产额=本。G; Nd.F.add(这个。mwforce); } This.mWForce.zero(); this.applytension(); 为(i = 0;i < nlen;i++) { ND =这模型{我}; 如果((Nd,标记1)!= 0){ Nd.F.sub(Nd,F); } Nd.velo.add(Nd,F); } This.mLTNode.velo.copyFrom(这个。mltnodev); This.mRTNode.velo.copyFrom(这个。mrtnodev); }, updateposition:函数(){ VaR nlen = this.mnodes.length; 变量I和ND; 为(i = 0;i < nlen;i++) { ND =这模型{我}; 如果((Nd,标记1)!= 0){ 0; 0; 0; } Nd.pos.add(Nd,速度); Nd.velo.sub(Nd,CV); 0; 0; 0; (0.95)nd.velo.smul; } }, 绘图:函数(){ P3D.clear (#000 This.transformPolyns(); This.mRenderTris.sort(clothapp。zsortcmp); VaR len = this.mrendertris.length; 无功功率; 对于(var i = 0;i < i;i + +){ T =这mrendertris {我}; 如果(p3d.texture!= t.texture) p3d.texture = t.texture; 未定义的; 如果(t.lighting t.shade > 0.01) SH =RGBA(0,0,0,+ t.shade + ); p3d.drawtriangle(t.tposs,t.uvs,SH); } }, applytension:函数(){ 变量I,k,ND; var v =新vec3(); VaR nlen = this.mnodes.length; 无功naturallen = this.mnlen; 为(k = 0;K<nlen;K + +) { ND =这模型{ K }; var; 对于(i = 0;i < 4;i +) { 链接= { }; 如果(!丁腈橡胶)继续; VaR len = v.copyfrom(NBR,POS)。Sub(Nd,POS)的诺姆(); 无功dlen =莱恩- naturallen; 如果(dlen > 0){ V.smul(dlen * 0.5 /长度); f.x = v.x; fission yield裂变产额= y; f.z = z; Nd.cv.add(v.smul(0.8)); } } } }, setuptransforms:函数(){ this.mprojmat =新的M44(); this.mprojmat.perspectivelh(24, 15, 10,9000); this.mviewmat =新的M44(); (0)this.updateviewtrans; }, updateviewtrans:功能(RY){ 这个mviewfroma。Z = math.cos(RY)* 380; 这个mviewfroma。x = Math.sin(RY)* 380; (0.7)this.mviewfrom.smul; 这个mviewfrom。x =这。mviewfroma。××0.3; 这个mviewfrom。Y =这。mviewfroma Y×0.3; 这个mviewfrom。Z =这。mviewfroma Z×0.3; This.mViewMat.lookAtLH(this.vup,this.mviewfrom,这个增值税); }, generatecloth:功能(base_y){ var列= 9; var行= 8; var步骤= 22; this.mnlen =步* 0.9; 无功W =(cols-1)*步; 变量I; 对于(k = 0;k行;k + +) { 为(i = 0;i <列;i++) { VaR ND =新ClothNode(); ND。pos.x = -(W / 2)+我一步; ND。pos.y = base_y K *步 / 2; ND。pos.z = K * 16; 二。紫外线。U =我/(cols-1); 二。紫外线。V = K /(rows-1); 如果(i = 0){ 无功prv_nd =这个模型{这个模型。length-1 }; prv_nd链接。{ 1 } =钕; 二。链接{ 0 } = prv_nd; } 如果(k > 0){ 无功up_nd =这个模型{一}长度。模型; up_nd链接。{ 4 } =钕; 二。链接{ 3 } = up_nd; } 如果(i)!= 0我!= 4我!=(cols-1)) nd.flags | = 4; This.mNodes.push(ND); } } 左上角和右上角 这个模型{ 0 }。标志1 | =; 这个模型{ 4 }。标志1 | =; 这个模型cols-1 } {旗帜| = 1; this.mltnode =这个模型{ 0 }; This.mRTNode = this.mNodes{cols-1}; }, generaterendertriangles:功能() { 如果(this.mrendertris this.mrendertris = { }!); var i; VaR钕; VaR nlen = this.mnodes.length; 为(i = 0;i < nlen;i++) { ND =这模型{我}; 如果(连接{ { 1 } },链接{ 1 } }。链接{ 4 }){ var t =新RenderTriangle(); t.texture = this.texture1; t.poss { 0 } = nd.pos; t.poss { 1 } = ND。链接{ 1 }。POS; t.poss { 2 } = { 1 }和链接。链接。{ 4 }。POS; t.uvs { 0 } = nd.uv; t.uvs { 1 } = ND。链接{ 1 }。紫外; t.uvs { 2 } = ND。链接{ 1 },{ 4 }外链接; This.mRenderTris.push(T); T =新RenderTriangle(); t.texture = this.texture1; t.poss { 0 } = nd.pos; t.poss { 1 } = { 1 }和链接。链接。{ 4 }。POS; t.poss { 2 } = ND。链接{ 4 }。POS; t.uvs { 0 } = nd.uv; t.uvs { 1 } = ND。链接{ 1 },{ 4 }外链接; t.uvs { 2 } = ND。链接{ 4 }。紫外; This.mRenderTris.push(T); } } this.addbgtriangles(这个模型{ 0 }。pos.y); }, addbgtriangles:功能(通过){ var列= 4; var,x,y,SZ = 110; VaR牛= -(列* SZ) / 2; VaR盎司=-(列* SZ) / 2; 为(y = 0;Y<列;Y + +){ 为(x = 0;x<列;x++){ var =((x + y)1)* 0.5; T =新RenderTriangle(); t.texture = this.texture2; t.poss { 0 } =新vec3(牛X *尺码,,盎司+ Y *尺码); t.poss { 1 } =新vec3(牛X *尺码+尺码,,盎司+ Y *尺码); t.poss { 2 } =新vec3(牛X *尺码,,盎司+ Y *尺码+深圳); t.uvs { 0 } = {你:0、五:BV }; t.uvs { 1 } = {你:0.5、五:BV }; t.uvs { 2 } = {你:0、五:BV + 0.5 }; (如果(X = = 1 | |(Y = = 1 = = 2 x = = 2)| |)) This.modifyRoofUV(t,x = 2,BV); t.lighting = false; t.zbias = 0.5; This.mRenderTris.push(T); T =新RenderTriangle(); t.texture = this.texture2; t.poss { 0 } =新vec3(牛X *尺码,,盎司+ Y *尺码+深圳); t.poss { 1 } =新vec3(牛X *尺码+尺码,,盎司+ Y *尺码); t.poss { 2 } =新vec3(牛X *尺码+尺码,,盎司+ Y *尺码+深圳); t.uvs { 0 } = {你:0、五:BV + 0.5 }; t.uvs { 1 } = {你:0.5、五:BV }; t.uvs { 2 } = {你:0.5、五:BV + 0.5 }; (如果(X = = 1 | |(Y = = 1 = = 2 x = = 2)| |)) This.modifyRoofUV(t,x = 2,BV); t.lighting = false; t.zbias = 0.5; This.mRenderTris.push(T); } } }, ModifyRoofUV:功能(t,RV,BV){ 如果(RV){ t.uvs { 0 }。U = 0.5 t.uvs { 0 }。U; t.uvs { 1 }。U = 0.5 t.uvs { 1 }。U; t.uvs { 2 }。U = 0.5 t.uvs { 2 }。U; } t.uvs { 0 }。U = 0.5; t.uvs { 1 }。U = 0.5; t.uvs { 2 }。U = 0.5; 如果(RV){ t.uvs { 0 }。V = 0.5 t.uvs { 0 }。V +公司+ BV; t.uvs { 1 }。V = 0.5 t.uvs { 1 }。V +公司+ BV; t.uvs { 2 }。V = 0.5 t.uvs { 2 }。V +公司+ BV; } }, transformpolyns:函数(){ 无功反=新的M44(); trans.mul(this.mviewmat,这个mprojmat); VaR HW = this.mviewport.ow; VaR HH = this.mviewport.oh; VaR len = this.mrendertris.length; var t; VaR组合= { 0, 0, 0,0 }; 对于(var i = 0;i < i;i + +){ T =这mrendertris {我}; 对于(var = 0;k<3;k + +){ trans.transvec3(SPOS,t.poss {K }。X,t.poss { } Y,K,K t.poss { }。Z); 无功W =内{ 3 }; 原理:{ 0 } / = W; 原理:{ 1 } / = W; 原理:{ 2 } / = W; 原理:{ 0 } =这。mviewport。W; 原理:{ 1 } = -这。mviewport。H; 原理:{ 0 } =硬件; 原理:{ 1 } = HH; t.tposs {克}。x =内{ 0 }; t.tposs {克}。Y =内{ 1 }; t.tposs {克}。Z =内{ 2 }; } VaR V1 =(新vec3()),CopyFrom(t.poss { 1 })。Sub(t.poss { 0 })规范(); VaR V2 =(新vec3()),CopyFrom(t.poss { 2 })。Sub(t.poss { 1 })规范(); var n =(新vec3())Cp(V1,V2); trans.transvec3rot(SPOS,n.x,N.y,N.z); 如果(t.lighting){ 如果(SPOS { 2 } > 0) t.shade = 0.8 {其他 t.shade = 0.1 * 0.6纽约; 如果(t.shade<0)t.shade = 0; } } t.sortkey = math.floor((t.tposs { 0 }。Z + t.tposs { 1 }。Z + t.tposs { 2 }。Z + t.zbias)* 1000); } } } ClothNode()函数 { this.flags = 0; this.pos =新vec3(); this.velo =新vec3(); this.cv =新vec3(); 这个新的vec3 f(); this.links = {零,零,零,零}; this.uv = {你:0、五:0 }; } RenderTriangle()函数 { this.texture = null; this.poss =新阵(3); this.tposs = {新vec3(),新的vec3(),新的vec3()}; this.uvs = { {你:0、五:0 },{你:0、五:0 },{你:0、五:0 } }; this.shade = 0; this.lighting =真; this.zbias = 0; this.sortkey = 0; } 以上是HTML5 3D服装摆动动画特效源代码介绍,需要进行更深入的研究,下载源码学习。tag:动画特效 摇摆 电脑软件 HTML53D
相关内容