The fla source (AS2):
www.leandroamano.com.br/files/3d.fla
// Perspective
ppc = perspective.value;
center = {x:0, y:0, z:0};
// Cube: Face 1
v1 = {x:-50, y:-50, z:-50};
v2 = {x:50, y:-50, z:-50};
v3 = {x:50, y:50, z:-50};
v4 = {x:-50, y:50, z:-50};
// Cube: Face 2
v5 = {x:-50, y:-50, z:50};
v6 = {x:50, y:-50, z:50};
v7 = {x:50, y:50, z:50};
v8 = {x:-50, y:50, z:50};
// plan
p1 = {x:-300, y:-225, z:-100};
p2 = {x:-275, y:-225, z:-100};
p3 = {x:-300, y:-200, z:-100};
p4 = {x:-300, y:-225, z:-125};
//---
render(p1, plan1);
pp1 = point(plan1);
var temp:MovieClip = this.createEmptyMovieClip("temp__", 500)
screen.onPress = function(Void):Void {
this._parent.temp.onEnterFrame = function(Void):Void {
alpha = -(this._parent._ymouse-Stage.height/2)/Stage.height/2;
beta = (this._parent._xmouse-Stage.width/2)/Stage.width/2;
//---
v1 = rotate(v1, center, 0, alpha, beta);
v2 = rotate(v2, center, 0, alpha, beta);
v3 = rotate(v3, center, 0, alpha, beta);
v4 = rotate(v4, center, 0, alpha, beta);
//---
v5 = rotate(v5, center, 0, alpha, beta);
v6 = rotate(v6, center, 0, alpha, beta);
v7 = rotate(v7, center, 0, alpha, beta);
v8 = rotate(v8, center, 0, alpha, beta);
//---
p2 = rotate(p2, p1, 0, alpha, beta);
p3 = rotate(p3, p1, 0, alpha, beta);
p4 = rotate(p4, p1, 0, alpha, beta);
//---
render(v1, vert1);
render(v2, vert2);
render(v3, vert3);
render(v4, vert4);
//---
render(v5, vert5);
render(v6, vert6);
render(v7, vert7);
render(v8, vert8);
//---
render(p2, plan2, 300);
render(p3, plan3, 300);
render(p4, plan4, 300);
//---
v1p = point(vert1);
v2p = point(vert2);
v3p = point(vert3);
v4p = point(vert4);
//---
v5p = point(vert5);
v6p = point(vert6);
v7p = point(vert7);
v8p = point(vert8);
//---
pp2 = point(plan2);
pp3 = point(plan3);
pp4 = point(plan4);
//---
z_index1 = 0;
z_index2 = 0;
//---
if (v1.z>v5.z) {
z_index1 = 1;
} else {
z_index2 = 1;
}
//---
quad1 = this._parent.createEmptyMovieClip("quad1", z_index1);
quad1.beginFill(0xff0000, 75);
quad1.moveTo(v1p.x, v1p.y);
quad1.lineTo(v2p.x, v2p.y);
quad1.lineTo(v3p.x, v3p.y);
quad1.lineTo(v4p.x, v4p.y);
quad1.lineTo(v1p.x, v1p.y);
//---
quad2 = this._parent.createEmptyMovieClip("quad2", z_index2);
quad2.beginFill(0x00ff00, 75);
quad2.moveTo(v5p.x, v5p.y);
quad2.lineTo(v6p.x, v6p.y);
quad2.lineTo(v7p.x, v7p.y);
quad2.lineTo(v8p.x, v8p.y);
quad2.lineTo(v5p.x, v5p.y);
//---
this._parent.createEmptyMovieClip("line1", 100).drawLine(v1p, v5p);
this._parent.createEmptyMovieClip("line2", 101).drawLine(v2p, v6p);
this._parent.createEmptyMovieClip("line3", 102).drawLine(v3p, v7p);
this._parent.createEmptyMovieClip("line4", 103).drawLine(v4p, v8p);
//---
estilo1 = {thick:2, rgb:0xff0000, alpha:100};
estilo2 = {thick:2, rgb:0x0000ff, alpha:100};
estilo3 = {thick:2, rgb:0x00cc00, alpha:100};
this._parent.createEmptyMovieClip("versor_i", 201).drawLine(pp1, pp2,
estilo1);
this._parent.createEmptyMovieClip("versor_j", 202).drawLine(pp1, pp3,
estilo2);
this._parent.createEmptyMovieClip("versor_k", 203).drawLine(pp1, pp4,
estilo3);
};
};
screen.onRelease = function(Void):Void {
delete this._parent.temp.onEnterFrame;
};
function rotate(vert, ref, a, b, c) {
v = {x:vert.x-ref.x, y:vert.y-ref.y, z:vert.z-ref.z};
// plan XY => girar em Z
matrix1 = [];
matrix1[0] = [Math.cos(a), Math.sin(a), 0];
matrix1[1] = [-Math.sin(a), Math.cos(a), 0];
matrix1[2] = [0, 0, 1];
//plan YZ => girar em X
matrix2 = [];
matrix2[0] = [1, 0, 0];
matrix2[1] = [0, Math.cos(b), Math.sin(b)];
matrix2[2] = [0, -Math.sin(b), Math.cos(b)];
//plan ZX => girar em Y
matrix3 = [];
matrix3[0] = [Math.cos(c), 0, Math.sin(c)];
matrix3[1] = [0, 1, 0];
matrix3[2] = [-Math.sin(c), 0, Math.cos(c)];
//---
matrix = prodMatricial(matrix1, matrix2);
matrix = prodMatricial(matrix, matrix3);
//---
nx = matrix[0][0]*v.x+matrix[0][1]*v.y+matrix[0][2]*v.z+ref.x;
ny = matrix[1][0]*v.x+matrix[1][1]*v.y+matrix[1][2]*v.z+ref.y;
nz = matrix[2][0]*v.x+matrix[2][1]*v.y+matrix[2][2]*v.z+ref.z;
//---
return {x:nx, y:ny, z:nz};
}
function render(v, mc, pers) {
p = ppc;
if (pers != undefined) {
p = pers;
}
mc._x = v.x*p/(p-v.z)+Stage.width/2;
mc._y = -v.y*p/(p-v.z)+Stage.height/2;
}
function prodMatricial(m1, m2) {
prod = [[0, 0, 0], [0, 0, 0], [0, 0, 0]];
for (i=0; i<3; i++) {
for (j=0; j<3; j++) {
for (k=0; k<3; k++) {
prod[i][j] += m1[i][k]*m2[k][j];
}
}
}
return prod;
}
MovieClip.prototype.drawLine = function(p1, p2, props) {
if (props == undefined) {
this.lineStyle(0);
} else {
this.lineStyle(props.thick, props.rgb, props.alpha);
}
this.moveTo(p1.x, p1.y);
this.lineTo(p2.x, p2.y);
};
function point(mc) {
return {x:mc._x, y:mc._y};
}
regards
Leandro Amano
On 5/1/07, Tom Gooding <[EMAIL PROTECTED]> wrote:
I've seen some really good stuff done recently in Papervision3d
http://www.papervision3d.org/ , also WireEngine3D I've used before
pretty successfully http://osflash.org/we3d . As with any 3D engine,
you'll need reasonable maths to get on with either of these.
-----Original Message-----
From: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED] On Behalf Of Ron
Wheeler
Sent: 01 May 2007 15:36
To: [email protected]
Subject: Re: [Flashcoders] rotate a cube
Why not Sandy3D ???
Waseem Shahzad wrote:
> Hello Flashcoders
>
> I am trying to rotate a cube which i made in the flash authoring
> environment. However it is not a real cube but I don't want to use API
to
> make a cube first and then rotate it. I want that a cube which have a
> specific design then it is rotate in the 3d environment using flash
> Actionscript.
>
> Please help me I don't find any solution and now i think that might be
> it is
> not possible to rotate such type of cube.
>
> Thanx in advance.
> _______________________________________________
> [email protected]
> To change your subscription options or search the archive:
> http://chattyfig.figleaf.com/mailman/listinfo/flashcoders
>
> Brought to you by Fig Leaf Software
> Premier Authorized Adobe Consulting and Training
> http://www.figleaf.com
> http://training.figleaf.com
>
>
_______________________________________________
[email protected]
To change your subscription options or search the archive:
http://chattyfig.figleaf.com/mailman/listinfo/flashcoders
Brought to you by Fig Leaf Software
Premier Authorized Adobe Consulting and Training
http://www.figleaf.com
http://training.figleaf.com
_______________________________________________
[email protected]
To change your subscription options or search the archive:
http://chattyfig.figleaf.com/mailman/listinfo/flashcoders
Brought to you by Fig Leaf Software
Premier Authorized Adobe Consulting and Training
http://www.figleaf.com
http://training.figleaf.com
--
--
Leandro Amano
Digital Bug
Chief Creative Officer
Adobe Certified Expert
Adobe Certified Instructor
Adobe User Group Leader
_______________________________________________
[email protected]
To change your subscription options or search the archive:
http://chattyfig.figleaf.com/mailman/listinfo/flashcoders
Brought to you by Fig Leaf Software
Premier Authorized Adobe Consulting and Training
http://www.figleaf.com
http://training.figleaf.com