HTML53D服装摇摆动画特效
在线演示源代码下载
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服装摆动动画特效源代码介绍,需要进行更深入的研究,下载源码学习。