Work finished long ago, simple examples of Rober Penner's Vector3d.
SOURCE(as1 timeline code 3 in 1)
//============================// //timeline code actionscript1 // //============================// //Robert Penner's "vector3d_class.as" can be found //here: http://www.robertpenner.com/profmx/ //========================== //grass //========================== #include "vector3d_class.as" Vector3d.prototype.createOvalPoly=function(a,b,NumPts,rotation){ var Pts=[]; var angle=2*Math.PI/NumPts; for(i=0;i<=NumPts-1;i++){ Pts.push(new Vector3d(this.x+a*Math.cos(angle*i+rotation),this.y,this.z+b*Math.sin(angle*i+rotation))); } return Pts; }; Vector3d.prototype.rotateYnew = function (angle) { with (Math) { var ca = cos(angle*Math.PI/180); var sa = sin(angle*Math.PI/180); } with (this) { var tempX = x * ca + z * sa; var tempZ = x * -sa + z * ca; } return new Vector3d(tempX,this.y,tempZ); }; MovieClip.prototype.curveToPts=function(p1,p2){ this.curveTo(p1.x,p1.y,p2.x,p2.y); }; var a1=[]; var a2=[]; var a3=[]; var a4=[]; var a5=[]; var a6=[]; var a7=[]; var a8=[]; a1o=new Vector3d(300,300,100); a1=a1o.createOvalPoly(100,100,4,0); a3o=new Vector3d(a1o.x,a1o.y-150,a1o.z); a3=a3o.createOvalPoly(80,80,6,0); a2o=new Vector3d((a1o.x+a3o.x)/2,(a1o.y+a3o.y)/2,(a1o.z+a3o.z)/2); a2=a2o.createOvalPoly(50,50,4,0); a8o=new Vector3d(a1o.x,a1o.y-20,a1o.z); a4o=new Vector3d((a3o.x+a8o.x)/2,(a3o.y+a8o.y)/2,(a3o.z+a8o.z)/2); a4=a2o.createOvalPoly(50,50,6,0); for(i=0;i<=3;i++){ a1[i].y=a1[i].y-120; } for(i=0;i<=5;i++){ a5[i]=a4[i].rotateYnew(10); a6[i]=a4[i].rotateYnew(-10); } for(i=0;i<=3;i++){ a7[i]=a2[i].rotateYnew(5); a8[i]=a2[i].rotateYnew(-5); } //project all this.lineStyle(2,0x0000FF); this.onEnterFrame=function(){ if(a1o.x<=-60){ a1o=new Vector3d(_xmouse,_ymouse,100); a1=a1o.createOvalPoly(100,100,4,0); a3o=new Vector3d(a1o.x,a1o.y-150,a1o.z); a3=a3o.createOvalPoly(80,80,6,0); a2o=new Vector3d((a1o.x+a3o.x)/2,(a1o.y+a3o.y)/2,(a1o.z+a3o.z)/2); a2=a2o.createOvalPoly(50,50,4,0); a8o=new Vector3d(a1o.x,a1o.y-20,a1o.z); a4o=new Vector3d((a3o.x+a8o.x)/2,(a3o.y+a8o.y)/2,(a3o.z+a8o.z)/2); a4=a2o.createOvalPoly(50,50,6,0); for(i=0;i<=3;i++){ a1[i].y=a1[i].y-120; } for(i=0;i<=5;i++){ a5[i]=a4[i].rotateYnew(10); a6[i]=a4[i].rotateYnew(-10); } for(i=0;i<=3;i++){ a7[i]=a2[i].rotateYnew(5); a8[i]=a2[i].rotateYnew(-5); } } else{ a1o.rotateY(_xmouse/1000); a2o.rotateY(_xmouse/1000); a3o.rotateY(_xmouse/1000); a1o.rotateZ(_ymouse/1000); a2o.rotateZ(_ymouse/1000); a3o.rotateZ(_ymouse/1000); for(i=0;i<=3;i++){ a1[i].rotateY(_xmouse/1000); a7[i].rotateY(_xmouse/1000); a8[i].rotateY(_xmouse/1000); a1[i].rotateZ(_ymouse/1000); a7[i].rotateZ(_ymouse/1000); a8[i].rotateZ(_ymouse/1000); } for(i=0;i<=5;i++){ a3[i].rotateY(_xmouse/1000); a5[i].rotateY(_xmouse/1000); a6[i].rotateY(_xmouse/1000); a3[i].rotateZ(_ymouse/1000); a5[i].rotateZ(_ymouse/1000); a6[i].rotateZ(_ymouse/1000); } } a1o.perProject(); a2o.perProject(); a3o.perProject(); for(i=0;i<=3;i++){ a1[i].perProject(); a7[i].perProject(); a8[i].perProject(); } for(i=0;i<=5;i++){ a3[i].perProject(); a5[i].perProject(); a6[i].perProject(); } this.clear(); this.lineStyle(2,0x0000FF); this.moveTo(a1o.x,a1o.y); this.curveToPts(a2o,a3o); for(i=0;i<=3;i++){ this.moveTo(a1o.x,a1o.y); this.curveToPts(a7[i],a1[i]); this.moveTo(a1o.x,a1o.y); this.curveToPts(a8[i],a1[i]); } for(i=0;i<=5;i++){ this.moveTo(a3o.x,a3o.y); this.curveToPts(a5[i],a3[i]); this.moveTo(a3o.x,a3o.y); this.curveToPts(a6[i],a3[i]); } } //========================== //cube //========================== #include "vector3d_class.as" Vector3d.prototype.createOvalPoly=function(a,b,NumPts,rotation){ var Pts=[]; var angle=2*Math.PI/NumPts; for(i=0;i<=NumPts-1;i++){ Pts.push(new Vector3d(this.x+a*Math.cos(angle*i+rotation),this.y,this.z+b*Math.sin(angle*i+rotation))); } return Pts; }; MovieClip.prototype.curveToPts=function(p1,p2){ this.curveTo(p1.x,p1.y,p2.x,p2.y); }; var p=new Vector3d(100,200,0); var q=new Vector3d(100,100,0); var x=[]; var y=[]; var z=[]; var o=new Vector3d((p.x+q.x)/2,(p.y+q.y)/2,(p.z+q.z)/2); x=p.createOvalPoly(50,50,4,0); y=q.createOvalPoly(50,50,4,0); z=o.createOvalPoly(60,60,4,0); this.lineStyle(2,0x0000FF); this.onEnterFrame=function(){ this.clear(); this.beginFill(0x00CC22,40); for(i=0;i<=3;i++){ if(Key.isDown(Key.UP)){x[i].rotateY(1); y[i].rotateY(1); z[i].rotateY(1); } if(Key.isDown(Key.DOWN)){x[i].rotateZ(1); y[i].rotateZ(1); z[i].rotateZ(1); } x[i].rotateY(_xmouse/20); y[i].rotateY(_xmouse/20); z[i].rotateY(_xmouse/20); x[i].rotateZ(_ymouse/20); y[i].rotateZ(_ymouse/20); z[i].rotateZ(_ymouse/20); x[i].perProject(); y[i].perProject(); z[i].perProject(); this.lineStyle(2,0x0000FF); this.moveTo(y[i].x,y[i].y); this.curveToPts(z[i],x[i]); } for(i=0;i<=2;i++){ this.beginFill(0x00CC22,40); this.moveTo(y[i].x,y[i].y); this.lineTo(x[i].x,x[i].y); this.lineTo(x[i+1].x,x[i+1].y); this.lineTo(y[i+1].x,y[i+1].y); } this.beginFill(0x00CC22,40); this.moveTo(y[3].x,y[3].y); this.lineTo(x[3].x,x[3].y); this.lineTo(x[0].x,x[0].y); this.lineTo(y[0].x,y[0].y); this.endFill(); } //========================== //curve //========================== //frame1 #include "vector3d_class.as" Vector3d.prototype.createOvalPoly=function(a,b,NumPts,rotation){ var Pts=[]; var angle=2*Math.PI/NumPts; for(i=0;i<=NumPts-1;i++){ Pts.push(new Vector3d(this.x+a*Math.cos(angle*i+rotation),this.y,this.z+b*Math.sin(angle*i+rotation))); } return Pts; }; MovieClip.prototype.curveToPts=function(p1,p2){ this.curveTo(p1.x,p1.y,p2.x,p2.y); }; var p=new Vector3d(100,200,0); var q=new Vector3d(100,100,0); var x=[]; var y=[]; var z=[]; var o=new Vector3d((p.x+q.x)/2,(p.y+q.y)/2,(p.z+q.z)/2); x=p.createOvalPoly(50,50,4,0); y=q.createOvalPoly(50,50,4,0); z=o.createOvalPoly(60,60,4,0); this.lineStyle(2,0x0000FF); this.onEnterFrame=function(){ this.clear(); for(i=0;i<=3;i++){ if(Key.isDown(Key.UP)){x[i].rotateY(1); y[i].rotateY(1); z[i].rotateY(1); } if(Key.isDown(Key.DOWN)){x[i].rotateZ(1); y[i].rotateZ(1); z[i].rotateZ(1); } x[i].rotateY(_xmouse/20); y[i].rotateY(_xmouse/20); z[i].rotateY(_xmouse/20); x[i].perProject(); y[i].perProject(); z[i].perProject(); this.lineStyle(2,0x0000FF); this.moveTo(y[i].x,y[i].y); this.curveToPts(z[i],x[i]);} } //frame50 #include "vector3d_class.as" Vector3d.prototype.createOvalPoly=function(a,b,NumPts,rotation){ var Pts=[]; var angle=2*Math.PI/NumPts; for(i=0;i<=NumPts-1;i++){ Pts.push(new Vector3d(this.x+a*Math.cos(angle*i+rotation),this.y,this.z+b*Math.sin(angle*i+rotation))); } return Pts; }; MovieClip.prototype.curveToPts=function(p1,p2){ this.curveTo(p1.x,p1.y,p2.x,p2.y); }; var p=new Vector3d(300,200,0); var q=new Vector3d(300,250,0); var x=[]; var y=[]; var z=[]; var o=new Vector3d((p.x+q.x)/2,(p.y+q.y)/2,(p.z+q.z)/2); x=p.createOvalPoly(50,50,4,0); y=q.createOvalPoly(50,50,4,0); z=o.createOvalPoly(60,60,4,0); this.lineStyle(2,0x0000FF); this.onEnterFrame=function(){ for(i=0;i<=3;i++){ if(Key.isDown(Key.UP)){x[i].rotateY(1); y[i].rotateY(1); z[i].rotateY(1); } if(Key.isDown(Key.DOWN)){x[i].rotateZ(1); y[i].rotateZ(1); z[i].rotateZ(1); } x[i].rotateY(_xmouse/20); y[i].rotateY(_xmouse/20); z[i].rotateY(_xmouse/20); y[i].perProject(); z[i].perProject(); this.lineStyle(2,0x0000FF); this.moveTo(y[i].x,y[i].y); this.curveToPts(z[i],x[i]);} } //frame90 #include "vector3d_class.as" Vector3d.prototype.createOvalPoly=function(a,b,NumPts,rotation){ var Pts=[]; var angle=2*Math.PI/NumPts; for(i=0;i<=NumPts-1;i++){ Pts.push(new Vector3d(this.x+a*Math.cos(angle*i+rotation),this.y,this.z+b*Math.sin(angle*i+rotation))); } return Pts; }; MovieClip.prototype.curveToPts=function(p1,p2){ this.curveTo(p1.x,p1.y,p2.x,p2.y); }; var p=new Vector3d(500,200,0); var q=new Vector3d(500,250,0); var x=[]; var y=[]; var z=[]; var o=new Vector3d((p.x+q.x)/2,(p.y+q.y)/2,(p.z+q.z)/2); x=p.createOvalPoly(50,50,4,0); y=q.createOvalPoly(50,50,4,0); z=o.createOvalPoly(60,60,4,0); this.lineStyle(2,0x0000FF); this.onEnterFrame=function(){ for(i=0;i<=3;i++){ if(Key.isDown(Key.UP)){x[i].rotateY(1); y[i].rotateY(1); z[i].rotateY(1); } if(Key.isDown(Key.DOWN)){x[i].rotateZ(1); y[i].rotateZ(1); z[i].rotateZ(1); } x[i].rotateY(_xmouse/20); y[i].rotateY(_xmouse/20); z[i].rotateY(_xmouse/20); x[i].rotateZ(_ymouse/20); y[i].rotateZ(_ymouse/20); z[i].rotateZ(_ymouse/20); x[i].perProject(); y[i].perProject(); z[i].perProject(); this.lineStyle(2,0x0000FF); this.moveTo(y[i].x,y[i].y); this.curveToPts(z[i],x[i]);} }Book: Robert Penner's Programming Macromedia Flash MX