
Код:
MovieClip.prototype.drawLineTo = function(x1, y1, x2, y2, x3, y3, x4, y4, x) {
this.createEmptyMovieClip("link", 0);
this.link.beginFill(0x002200, 100);
this.link.moveTo(x1, y1);
this.link.lineTo(x2, y2);
this.link.lineTo(x3, y3);
this.link.lineTo(x4, y4);
this.link.lineTo(x1, y1);
this.link.onPress = function() {
trace(x);
};
};
// координаты первой вершины
v1x = 75;
v1y = -75;
v1z = 75;
// координаты второй вершины
v2x = 75;
v2y = 75;
v2z = 75;
// координаты третьей вершины
v3x = 75;
v3y = 75;
v3z = -75;
// координаты четвёртой вершины
v4x = 75;
v4y = -75;
v4z = -75;
// координаты пятой вершины
v5x = -75;
v5y = -75;
v5z = -75;
// координаты шестой вершины
v6x = -75;
v6y = 75;
v6z = -75;
// координаты седьмой вершины
v7x = -75;
v7y = 75;
v7z = 75;
// координаты восьмой вершины
v8x = -75;
v8y = -75;
v8z = 75;
function rotate3d(xa, ya) {
// вращаем вершины с 1 по 8 на угол xa по оси X
// и на угол ya по оси Y
// Задаём коэффициент для перевода градусов в радианы и обратно
rad = Math.PI/180;
// Вычисляем косинусы и синусы углов
// Это нужно обязательно сделать перед циклом
// дабы избежать многочисленных и ненужных вычислений
// одних и тех же значений в цикле
cosXangle = Math.cos(xa*rad);
sinXangle = Math.sin(xa*rad);
cosYangle = Math.cos(ya*rad);
sinYangle = Math.sin(ya*rad);
for (var i = 1; i<=8; i++) {
//- вращение вокруг оси X
ry = this["v"+i+"y"]*cosXangle-this["v"+i+"z"]*sinXangle;
rz = this["v"+i+"y"]*sinXangle+this["v"+i+"z"]*cosXangle;
//- вращение вокруг оси Y
rx = this["v"+i+"x"]*cosYangle+rz*sinYangle;
rz = -this["v"+i+"x"]*sinYangle+rz*cosYangle;
// делаем нормальные координаты повёрнутыми
this["v"+i+"x"] = rx;
this["v"+i+"y"] = ry;
this["v"+i+"z"] = rz;
}
}
// #################################################
// ЭТО ПРИЛОЖЕНИЕ К УРОКУ С САЙТА flash.plux.ru
// "3d талмуд для начинающих".
// АВТОР: Григорий А. Рябов (Nuran)
// e-mail: nuramedia@mail.ru
// #################################################
_root.onEnterFrame = function() {
// задаём координаты ценра клипа
cnx = 250;
cny = 250;
// задаём расстояние от центра мировых координат (0,0,0)
// до точки просмотра
dist = 200;
// удаляем старые линии
_root.clear();
// вычисляем углы курсора
xa = -(cnx-_ymouse)/25;
ya = (cny-_xmouse)/25;
// вращаем все вершины на углы курсора
rotate3d(xa, ya);
// вывод куба с перспективой
_root.lineStyle(0, 0x000000, 100);
_root.drawLineTo(cnx+v1x*(dist/(dist+v1z)), cny+v1y*(dist/(dist+v1z)), cnx+v2x*(dist/(dist+v2z)), cny+v2y*(dist/(dist+v2z)), cnx+v3x*(dist/(dist+v3z)), cny+v3y*(dist/(dist+v3z)), cnx+v4x*(dist/(dist+v4z)), cny+v4y*(dist/(dist+v4z)), "bla bla bla");
_root.moveTo(cnx+v1x*(dist/(dist+v1z)), cny+v1y*(dist/(dist+v1z)));
_root.lineTo(cnx+v2x*(dist/(dist+v2z)), cny+v2y*(dist/(dist+v2z)));
_root.lineTo(cnx+v3x*(dist/(dist+v3z)), cny+v3y*(dist/(dist+v3z)));
_root.lineTo(cnx+v4x*(dist/(dist+v4z)), cny+v4y*(dist/(dist+v4z)));
_root.lineTo(cnx+v1x*(dist/(dist+v1z)), cny+v1y*(dist/(dist+v1z)));
_root.lineTo(cnx+v8x*(dist/(dist+v8z)), cny+v8y*(dist/(dist+v8z)));
_root.lineTo(cnx+v7x*(dist/(dist+v7z)), cny+v7y*(dist/(dist+v7z)));
_root.lineTo(cnx+v2x*(dist/(dist+v2z)), cny+v2y*(dist/(dist+v2z)));
_root.moveTo(cnx+v8x*(dist/(dist+v8z)), cny+v8y*(dist/(dist+v8z)));
_root.lineTo(cnx+v5x*(dist/(dist+v5z)), cny+v5y*(dist/(dist+v5z)));
_root.lineTo(cnx+v6x*(dist/(dist+v6z)), cny+v6y*(dist/(dist+v6z)));
_root.lineTo(cnx+v7x*(dist/(dist+v7z)), cny+v7y*(dist/(dist+v7z)));
_root.moveTo(cnx+v4x*(dist/(dist+v4z)), cny+v4y*(dist/(dist+v4z)));
_root.lineTo(cnx+v5x*(dist/(dist+v5z)), cny+v5y*(dist/(dist+v5z)));
_root.moveTo(cnx+v3x*(dist/(dist+v3z)), cny+v3y*(dist/(dist+v3z)));
_root.lineTo(cnx+v6x*(dist/(dist+v6z)), cny+v6y*(dist/(dist+v6z)));
};
сделал на шару спешу в универ на основе исходников nuran'a
может быть и не подойдет не знаю
