📄 engine3d.as
字号:
} function removeCamera(cam) { delete cameras[camera._id]; } function setCamera(cam) { return camera=cam; } function reset() { var rT = render; render = null; for (var i in models) { models[i].onRemove(); } delete models; depths = new Object(); models = new Object(); camera = undefined; cameras = new Object(); idModels = 1; removeMovieClip(depositoGrafico); this.createEmptyMovieClip("depositoGrafico", 1); for (var j = 0; j<layers; j++) { var la = depositoGrafico.createEmptyMovieClip("layer"+j, (j+1)*2); la._depth = (j+1)*2; la.ids = 0; } render = rT; } function onEnterFrame() { render(); } function render() { depths = new Object(); var c = camera; if(c.doLink == true){ if(c.doLinkRota==true){ var lr = c.link.getRotation() var xr = lr.y + c.linkRotaOffsetAngle var offR = c.linkRotaOffsetZ var off = c.linkOffset off.z = Math.sin(xr)*offR off.x = Math.cos(xr)*offR } if (c.linkTipoEasyng == 1) { var cCoord = c.getCoordinates() //trace(cCoord.x +":"+cCoord.y+":") var lCoord = c.link.getCoordinates() var lpar = c.linkParamsEasyng[0] var off = c.linkOffset var dif = {x:(lCoord.x + off.x)-cCoord.x,y:(lCoord.y + off.y)-cCoord.y,z:(lCoord.z + off.z)-cCoord.z} //trace(dif.x+":"+dif.y+":" +dif.z) var step = {x:dif.x*lpar,y:dif.y*lpar,z:dif.z*lpar} //trace(step.x +":"+step.y+":"+step.z) c.setCoordinates(cCoord.x+step.x, cCoord.y+step.y, cCoord.z + step.z) } } if (c.doPivot == true) { var PIVOTold = c.pivotOldCoord; var PIVOTccoor = c.getCoordinates(); var PIVOTpcoor = c.pivot.getCoordinates(); if (PIVOTold.x != PIVOTpcoor.x || PIVOTold.y != PIVOTpcoor.y || PIVOTold.z != PIVOTpcoor.z || c.doLinkRota==true) { //le agrego que esto lo haga si c.doLinkRota==true porque quizas solo roto al pivot if (PIVOTpcoor.z>=PIVOTccoor.z) { //rx var r = Math.atan2(PIVOTpcoor.x-PIVOTccoor.x, PIVOTpcoor.z-PIVOTccoor.z); //ry var iz1 = PIVOTccoor.z var iz2 = PIVOTpcoor.z var ix1 = PIVOTccoor.x var ix2 = PIVOTpcoor.x var ipo = Math.sqrt((ix2-ix1)*(ix2-ix1)+(iz2-iz1)*(iz2-iz1)) //trace(ipo); var r2 = Math.atan2(PIVOTpcoor.y-PIVOTccoor.y,ipo); //var r2 = Math.atan2(PIVOTpcoor.y-PIVOTccoor.y, PIVOTpcoor.z-PIVOTccoor.z); } else { //rx var r = Math.atan2(PIVOTpcoor.x-PIVOTccoor.x, PIVOTpcoor.z-PIVOTccoor.z); var iz1 = PIVOTpcoor.z var iz2 = PIVOTccoor.z var ix1 = PIVOTccoor.x var ix2 = PIVOTpcoor.x var ipo = Math.sqrt((ix2-ix1)*(ix2-ix1)+(iz2-iz1)*(iz2-iz1)) //trace(ipo); var r2 = Math.atan2(PIVOTpcoor.y-PIVOTccoor.y,ipo); } /*if (r>1.5707963267949) { var rr = r%1.5707963267949; } else { var rr = r; }*/ c.setRotation(-r2, r); c.pivotOldCoord = new Object(); c.pivotOldCoord.x = PIVOTpcoor.x; c.pivotOldCoord.y = PIVOTpcoor.y; c.pivotOldCoord.z = PIVOTpcoor.z; } } var mr = models; //!!!!!!!!!!!ESTA PARTE DESPUES PODRIA HACERLA SOLO CUANDO SE MUEVE LA CAMARA var cx = c.x; var cy = c.y; var cz = c.z; var fov = c.fov; var xsin = Math.sin(c.xrot); var xcos = Math.cos(c.xrot); var ysin = Math.sin(c.yrot); var ycos = Math.cos(c.yrot); //!!!!!!!!!!! for (var i in mr) { var m = mr[i]; if (m.doOnTicker == true) { m.onTicker(); } //if (m.isFreezado != true) { var pl = m.coords; var inv = false; var cpol = -1; for (var j in pl) { cpol++; var p = pl[j]; var px = p.wx-cx; var py = p.wy-cy; var pz = p.wz-cz; var x = ycos*px-ysin*pz; var tz = ycos*pz+ysin*px; var z = xcos*tz-xsin*py; var y = xcos*py+xsin*tz; var k = fov/z; if (k<0) { inv = true; break; } p.k = k; //esta linea que sigue la pongo aca, porque es en verda el if de los fx, esto es para ahorrarme el else p.vx = x*k; if (FX1Mode == true && m.doFX1 == true) { if (m.coordsFX1[cpol] != undefined && m.coordsFX1[cpol] != null) { p.vx = x*k+(FX1Fac+m.modFacFX1); } } if (FX2Mode == true && m.doFX2 == true) { if (p.vx>0) { p.vx = (x*k)*((x*k)/(FX2Fac+m.modFacFX2)); } } p.vy = y*k; p.vz = z; } //} if (inv) { var pr = m.polygons; for (var j in pr) { var prjm = pr[j].mc; prjm.dr.clear(); for (var j2 in prjm.at) { prjm.at[j2].removeMovieClip(); removeMovieClip(prjm.at[j2]); } } m.isDisplayed = false; continue; } //esto es si no es invisible var pr = m.polygons; //var coo = m.coords //no, para eso ya esta pl, que son las coords for (var j in pr) { var p = pr[j]; if (freezeMode == true) { if (m.isFreezable == true && p.isFreezado == false) { if (random(porFrezar+m.modPorFrezar) == 0) { onFreezeModel(); p.isFreezado = true; //m.isFreezado = true } } } else { p.isFreezado = false; //m.isFreezado = false } if (p.isFreezado != true) { var mcdr = p.mc.dr; var mcat:MovieClip = p.mc.at; mcdr.clear(); if (m.isColorVar == true) { if (p.modColorF == null) { var vc = random(m.modColorA)+m.modColorB; p.modColorF = vc; } else { var vc = p.modColorF; } } else { var vc = 0; } mcdr.beginFill((m.red+vc) << 16 | (m.green+vc) << 8 | (m.blue+vc), m.alpha); var u = 0; var atts = 0; //para llevar el control de los attachs //var zz = 0; var cuentaPuntos = new Object(); for (var ii = 0; ii<p.listaDibujar.length; ii++) { var pi = p.listaDibujar[ii]; //pi = [coordIndice, tipo, [params]] var Tcoo = pl[pi[0]]; switch (pi[1]) { case "lineTo" : //zz += Tcoo.vz; cuentaPuntos[pi[0]] = Tcoo.vz; mcdr.lineTo(Tcoo.vx, Tcoo.vy); break; case "moveTo" : mcdr.moveTo(Tcoo.vx, Tcoo.vy); break; case "curveTo" : //zz += Tcoo.vz; cuentaPuntos[pi[0]] = Tcoo.vz; var Tcoo2 = pl[pi[2][0]]; mcdr.curveTo(Tcoo2.vx, Tcoo2.vy, Tcoo.vx, Tcoo.vy); break; case "beginFill" : //trace(pi[2][0]+":"+ pi[2][1]) mcdr.beginFill(pi[2][0], pi[2][1]); break; case "lineStyle" : mcdr.lineStyle(pi[2][0], pi[2][1], pi[2][2]); break; case "attach" : //zz += Tcoo.vz; cuentaPuntos[pi[0]] = Tcoo.vz; var atid = atts++; if (m.isDisplayed == false) { var atmc = mcat.attachMovie(pi[2][0], "a"+atid, atid+1); } else { var atmc = mcat["a"+atid]; } atmc._x = Tcoo.vx; atmc._y = Tcoo.vy; atmc._xscale = atmc._yscale=int(k*100); break; case "attachif" : //zz += Tcoo.vz; cuentaPuntos[pi[0]] = Tcoo.vz; var atid = atts++; if (random(pi[2][1]) == 0) { var atmc = mcat.attachMovie(pi[2][0], "a"+atid, atid+1); } atmc._x = Tcoo.vx; atmc._y = Tcoo.vy; atmc._xscale = atmc._yscale=int(k*100); break; case "attachFreeze" : var atid = atts++; break; case "attachFreezeAnim" : //no reatachea var atid = atts++; break; case "attachFreezeRandom" : //que sea una lista paa atachar var atid = atts++; break; } } mcdr.endFill(); var cdep = 0; var cdepT = 0; for (var dep in cuentaPuntos) { cdep++; cdepT += cuentaPuntos[dep]; } var cdepF = cdepT/cdep; var dd = m.modDepth-int(cdepF*10); while (depths["d"+dd] == true) { dd--; } depths["d"+dd] = true; p.mc.swapDepths(dd); } } if (m.isFreezado != true) { m.isDisplayed = true; } } } function setScene(s) { reset(); scenes[s](this); } function onFreezeModel() { } function addTexture(l, t) { var d = depositoGrafico["layer"+l]._depth; var m = depositoGrafico.attachMovie(t, "t"+l, d-1); m.setMask(depositoGrafico["layer"+l]); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -