Не знаю, я вот давно писал, но это явно не то, что тебе надо:
Код:
vertex = function (x, y, z)
{
this.x = x;
this.y = y;
this.z = z;
};
vertex.prototype.rotateXY = function (sinX, cosX, sinY, cosY)
{
//Rotates around of the X & Y axes
var yp = this.y * cosY - this.z * sinY;
var zp = this.y * sinY + this.z * cosY;
var xp = this.x * cosX + zp * sinX;
var zp = -this.x * sinX + zp * cosX;
this.x = xp;
this.y = yp;
this.z = zp;
};
vertex.prototype.perspective = function ()
{
//Transforms from 3d to 2d.
var perRatio = 1 / (this.z / distance + 1);
this.rx = center.x - this.x * perRatio;
this.ry = center.y + this.y * perRatio;
};
face = function (v1, v2, v3, v4)
{
this.v1 = v1;
this.v2 = v2;
this.v3 = v3;
this.v4 = v4;
};
face.prototype.draw = function ()
{
var shadow = 140 + ((v[this.v1].rx + v[this.v2].rx + v[this.v3].rx + v[this.v4].rx) - (v[this.v1].ry + v[this.v2].ry + v[this.v3].ry + v[this.v4].ry)) / 4;
_root.lineStyle (0, 0x000000, 100);
_root.beginFill (shadow << 16 | shadow << 8 | shadow, 100);
_root.moveTo (v[this.v1].rx, v[this.v1].ry);
_root.lineTo (v[this.v2].rx, v[this.v2].ry, v[this.v3].rx, v[this.v3].ry);
_root.lineTo (v[this.v3].rx, v[this.v3].ry, v[this.v4].rx, v[this.v4].ry);
_root.lineTo (v[this.v4].rx, v[this.v4].ry, v[this.v1].rx, v[this.v1].ry);
_root.endFill ();
};
face.prototype.fill = function ()
{
var clockwise = ((v[this.v2].rx - v[this.v1].rx) * (v[this.v3].ry - v[this.v1].ry) - (v[this.v2].ry - v[this.v1].ry) * (v[this.v3].rx - v[this.v1].rx));
if (clockwise >= 0) {
this.draw ();
}
};
_root.onLoad = function ()
{
sin = Math.sin;
cos = Math.cos;
// define center
center = new vertex (250, 250, 0);
distance = 200;
// Math.PI / 180;
rad = .0174532925;
var sx = 75;
var sy = 75;
var sz = 75;
// init of the vertex
v = new Array ();
v[0] = new vertex (sx, -sy, sz);
v[1] = new vertex (sx, sy, sz);
v[2] = new vertex (sx, sy, -sz);
v[3] = new vertex (sx, -sy, -sz);
v[4] = new vertex (-sx, -sy, -sz);
v[5] = new vertex (-sx, sy, -sz);
v[6] = new vertex (-sx, sy, sz);
v[7] = new vertex (-sx, -sy, sz);
// init of the faces
f = new Array ();
f[0] = new face (3, 2, 1, 0);
f[1] = new face (2, 3, 4, 5);
f[2] = new face (7, 6, 5, 4);
f[3] = new face (0, 1, 6, 7);
f[4] = new face (7, 4, 3, 0);
f[5] = new face (1, 2, 5, 6);
};
//
//############################################################
// ##
// ### ### ### ### ########## ########## ### #########
// #### ### ### ### ### ### ### ### #### ###
// ### # ### ### ### ######### ########## ### # ###
// ### #### ### ### ### ## ## ## ### ####
// ### ### ######## ### ## ### ### ### ### TM
//
// 3D CUBE
// © 2002 Grigory Ryabov.
// www.nuran.org
//
this.onEnterFrame = function ()
{
var xa = (_ymouse - center.x) * 0.0007;
var ya = (_xmouse - center.y) * 0.0007;
var sinY = sin (ya);
var cosY = cos (ya);
var sinX = sin (xa);
var cosX = cos (xa);
for (var i = 0; i < v.length; i++) {
v[i].rotateXY (sinY, cosY, sinX, cosX);
v[i].perspective ();
}
_root.clear ();
// fill the right side face
f[0].fill ();
// fill the front face
f[1].fill ();
// fill the left side face
f[2].fill ();
// fill the back face
f[3].fill ();
// fill the bottoms face
f[4].fill ();
// fill the top face
f[5].fill ();
};
stop ();