Welcome Guest ( Log In | Register)



 
Reply to this topicStart new topic
> How To Make 3d Wireframes, A Flash Actionscript tutorial
Tsunami
post Aug 2 2006, 05:09 PM
Post #1


Premium Member
********

Group: Members
Posts: 172
Joined: 2-August 06
From: North Carolina
Member No.: 27,662



Ok to start off this tutorial, i would like to ask you to make a blank flash movie and set the stage to have a width of 600 and a height of 400.

Now when the movie loads, we need to set some variables so lets start off by setting the origin

QUOTE
origin = new Object();
origin.x = 300;
origin.y = 200;




What this does, is it defines the origin to be an object with physical properties such as X and Y coordinates and it then sets those coodinates to 300 and 200, which is the center of the movie. Now we want to set what is called the 'focalLength'.

QUOTE
focalLength = 500;


What the focal length does, is it helps to define how much z will offset the object. The higher the number, the smaller the offset. We dont want it to be too big, but not too small so we will set it at 500 for the time being.

Every figure whether it be 2 or 3 demensions has to have some coordinates, so lets go ahead and define the coordinates for our box shall we:


QUOTE
boxpoints = [
Make3D(50, -50, -50),
Make3D(150, -50, -50),
Make3D(150, -50, 50),
Make3D(50, -50, 50),
Make3D(50, 50, -50),
Make3D(150, 50, -50),
Make3D(150, 50, 50),
Make3D(50, 50, 50)
];



Make3D is a function that we will define a little later on, but what matters now is what is inside it. inside each function call there are 3 numbers, representing x, y, and z. these coordinates will make a box 100 x 100 x 100 at a little less than center. Now i know your eager to make the function Make3d so lets get to it:

QUOTE

function Make3D(x,y,z) {
var point = new Object();
point.x = x;
point.y = y;
point.z = z;
return point;
}

I know its not quite what you expected BUT this is a very important part. What it does is takes those 3 coordinates and assigns them to an object. Just like with the origin this object has X and Y values, but this one also has a Z value. Then it returns the point object back to the array.


and then we should make an empty movie clip to store it in:

QUOTE
this.createEmptyMovieClip("box",1);



Ok were done with the easy part. Now comes the a lil harder but still pretty easy. I say this because it would be EXTREMELY difficult to draw a 3d object without it. In computer land, they dont have a Z plane like we do in the real world. All they have is X and Y. So what we have to do is make a function that will convert 2d coordinates to 3d by offsetting the X and Y values. I know its sounds like gibberish but bear with me... lets take a look at the function:

QUOTE
function convert3d(pointIn3D) {
var pointIn2D = new Object();
var scaleRatio = focalLength/(focalLength + pointIn3D.z);
pointIn2D.x = pointIn3D.x * scaleRatio;
pointIn2D.y = pointIn3D.y * scaleRatio;
return pointIn2D;
}




see that wasnt that hard, what this does is when passed in a 3d point (which was originally made by Make3d() wink.gif ) it takes the Z value and along with the focalLength, makes a Scale Ratio. it multiplies the X and Y Values by the scale ratio and returns the new point. beleve it or not... thats all the math involved ^.^.

now we have to draw it. But these coordinates are just the virtual coordinates because we still have to make each point relative to the origin... Lets look at the code:


QUOTE
function draw3d(item) {
//Make Real Points ^.^
var realpoints = new Array();
for (i=0; i < boxpoints.length; i++) {
var itemPoint = boxpoints[i];
realpoints[i] = convert3d(itemPoint);
realpoints[i].x += origin.x;
realpoints[i].y += origin.y;
}
// draw
item.clear();
item.lineStyle(2,0x000fff,25);
//bottom
item.moveTo(realpoints[0].x, realpoints[0].y);
item.lineTo(realpoints[1].x, realpoints[1].y);
item.lineTo(realpoints[2].x, realpoints[2].y);
item.lineTo(realpoints[3].x, realpoints[3].y);
item.lineTo(realpoints[0].x, realpoints[0].y);
//top
item.moveTo(realpoints[4].x, realpoints[4].y);
item.lineTo(realpoints[5].x, realpoints[5].y);
item.lineTo(realpoints[6].x, realpoints[6].y);
item.lineTo(realpoints[7].x, realpoints[7].y);
item.lineTo(realpoints[4].x, realpoints[4].y);
// connecting bottom and top
item.moveTo(realpoints[0].x, realpoints[0].y);
item.lineTo(realpoints[4].x, realpoints[4].y);
item.moveTo(realpoints[1].x, realpoints[1].y);
item.lineTo(realpoints[5].x, realpoints[5].y);
item.moveTo(realpoints[2].x, realpoints[2].y);
item.lineTo(realpoints[6].x, realpoints[6].y);
item.moveTo(realpoints[3].x, realpoints[3].y);
item.lineTo(realpoints[7].x, realpoints[7].y);
}



all we do to convert it to real coordinates is add the origin x and y to the point. Then we draw it by first clearing everything inside the movie clip, setting the line style then drawing the points. I wont get into the details about the moveTo and lineTo functions but what happens next is it draws the bottom. Then it draws the top.


now we need to make sure it does this on every frame, so in the onenterframe command you would put:

QUOTE
draw3d(box);




And your done! feel free to edit the coordinates and such to make new figures once you get the hang of it ^.^
Go to the top of the page
 
+Quote Post
iGuest
post Dec 10 2007, 08:24 PM
Post #2


Trap Double Mocha Member
***************

Group: Members
Posts: 2,360
Joined: 21-September 07
Member No.: 50,369



I made your code a little more bareable, and added the left and right keys for fun. just cut and past the following into actionscript.

var origin:Object = new Object();
origin.x = 300;
origin.y = 200;
var focalLength:Number =100;
Key.addListener(this);
var key = Key.getCode();
this.onKeyDown = function() {
var code:Number = Key.getCode();
switch(code) {
case Key.LEFT:

focalLength+=1;
draw3d(box);
break;
case Key.RIGHT:

focalLength-=1;
draw3d(box);
break;

}
}
var boxpoints:Array = [Make3D(50, -50, -50), Make3D(150, -50, -50), Make3D(150, -50, 50), Make3D(50, -50, 50), Make3D(50, 50, -50), Make3D(150, 50, -50), Make3D(150, 50, 50), Make3D(50, 50, 50)];
function Make3D(x1:Number, y1:Number, z1:Number) {
var point:Object = new Object();
point.x = x1;
point.y = y1;
point.z = z1;
return point;
}
this.createEmptyMovieClip("box", 1);
function convert3d(pointIn3D:Object) {
var pointIn2D:Object = new Object();
var scaleRatio:Number = focalLength/(focalLength+pointIn3D.z);
pointIn2D.x = pointIn3D.x*scaleRatio;
pointIn2D.y = pointIn3D.y*scaleRatio;
return pointIn2D;
}
function draw3d(item) {
//Make Real Points ^.^
var realpoints:Array = new Array();
for (I=0; I<boxpoints.length; I++) {
var itemPoint:Object = boxpoints[I];
realpoints[I] = convert3d(itemPoint);
realpoints[I].x += origin.x;
realpoints[I].y += origin.y;
}
// draw
item.clear();
item.lineStyle(to, 0x000fff, 25);
//bottom
item.moveTo(realpoints[0].x, realpoints[0].y);
item.lineTo(realpoints[1].x, realpoints[1].y);
item.lineTo(realpoints[to].x, realpoints[to].y);
item.lineTo(realpoints[3].x, realpoints[3].y);
item.lineTo(realpoints[0].x, realpoints[0].y);
//top
item.moveTo(realpoints[4].x, realpoints[4].y);
item.lineTo(realpoints[5].x, realpoints[5].y);
item.lineTo(realpoints[6].x, realpoints[6].y);
item.lineTo(realpoints[7].x, realpoints[7].y);
item.lineTo(realpoints[4].x, realpoints[4].y);
// connecting bottom and top
item.moveTo(realpoints[0].x, realpoints[0].y);
item.lineTo(realpoints[4].x, realpoints[4].y);
item.moveTo(realpoints[1].x, realpoints[1].y);
item.lineTo(realpoints[5].x, realpoints[5].y);
item.moveTo(realpoints[to].x, realpoints[to].y);
item.lineTo(realpoints[6].x, realpoints[6].y);
item.moveTo(realpoints[3].x, realpoints[3].y);
item.lineTo(realpoints[7].x, realpoints[7].y);
}
draw3d(box);

-Aaren
Go to the top of the page
 
+Quote Post
dukenemesis
post Dec 12 2007, 01:48 AM
Post #3


Newbie
*

Group: Members
Posts: 6
Joined: 18-May 07
From: Tassie
Member No.: 43,271



Thanks for that Tsunami/Trap FeedBacker. biggrin.gif
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic

Collapse

> Similar Topics

Topics Topics
  1. Flash Movie Loads...(4)
  2. Loadsound Flash Mx(0)
  3. How To Format Your Flash Disk/ Diskettes(6)
  4. Tweening In Flash Mx(10)
  5. Loading Movies Technique In Flash(4)
  6. Making Interactive Cds With Flash(2)
  7. Using An Actionscript In Flash For Loops(0)
  8. Flashing Your Motherboard's Bios(10)
  9. 3d Landscape In Swishmax (flash)(1)
  10. Digital Time(2)
  11. Load A Another Swf Movie Into Flash Player.(0)
  12. Adding Flash Music Player To Home/any Page(4)


 



- Lo-Fi Version Time is now: 25th July 2008 - 10:21 AM