
Студент-халявщик
 
Профиль
Группа: Участник
Сообщений: 305
Регистрация: 1.11.2004
Где: ПЫтер
Репутация: нет Всего: 3
|
я делаю псевдо 3d текст с помощью скрипта | Код | vertex = function (x, y, z) { this.x = x; this.y = y; this.z = z; };
// Функция vertex будет запоминать координаты точки. Это - родитель остальных прототипов.
// прототип поворота вокруг оси X
vertex.prototype.rotateX = function(sinX, cosX) { var xp = this.x; var yp = this.y*cosX-this.z*sinX; var zp = this.y*sinX+this.z*cosX; this.x = xp; this.y = yp; this.z = zp; };
// прототип поворота вокруг оси Y
vertex.prototype.rotateY = function(sinY, cosY) { var xp = this.x*cosY+this.z*sinY; var yp = this.y; var zp = -this.x*sinY+this.z*cosY; this.x = xp; this.y = yp; this.z = zp; };
// прототип поворота вокруг оси Z
vertex.prototype.rotateZ = function(sinZ, cosZ) { var xp = this.x*cosZ-this.y*sinZ; var yp = this.x*sinZ+this.y*cosZ; var zp = this.z; this.x = xp; this.y = yp; this.z = zp; };
// прототип поворота вокруг точки a по оси X
vertex.prototype.rotateX_around_point = function(sinX, cosX, a) { var xp = this.x; var yp = a.y+(this.y-a.y)*cosX-(this.z-a.z)*sinX; var zp = a.z+(this.y-a.y)*sinX+(this.z-a.z)*cosX; this.x = xp; this.y = yp; this.z = zp; };
// прототип поворота вокруг точки a по оси Y
vertex.prototype.rotateY_around_point = function(sinY, cosY, a) { var xp = a.x+(this.x-a.x)*cosY+(this.z-a.z)*sinY; var yp = this.y; var zp = a.z-(this.x-a.x)*sinY+(this.z-a.z)*cosY; this.x = xp; this.y = yp; this.z = zp; };
// прототип поворота вокруг точки a по оси Z
vertex.prototype.rotateZ_around_point = function(sinZ, cosZ, a) { var xp = a.x+(this.x-a.x)*cosZ-(this.y-a.y)*sinZ; var yp = a.y+(this.x-a.x)*sinZ+(this.y-a.y)*cosZ; var zp = this.z; this.x = xp; this.y = yp; this.z = zp; };
// прототип поворота вокруг произвольной оси a относительно центра координат
vertex.prototype.rotate_axis = function(a, sin, cos) { var temp = 1.0-cos; var t1 = a.x*temp; var t2 = a.y*temp; var t3 = a.z*temp; var tsinx = sin*a.x; var tsiny = sin*a.y; var tsinz = sin*a.z; var xp = this.x*(t1*a.x+cos)+this.y*(t2*a.x-tsinz)+this.z*(t3*a.x+tsiny); var yp = this.x*(t1*a.y+tsinz)+this.y*(t2*a.y+cos)+this.z*(t3*a.y-tsinx); var zp = this.x*(t1*a.z-tsiny)+this.y*(t2*a.z+tsinx)+this.z*(t3*a.z+cos); this.x = xp; this.y = yp; this.z = zp; };
// прототип поворота вокруг произвольной оси a относительно точки b
vertex.prototype.rotate_axis_around_point = function(a, sin, cos, b) { var temp = 1.0-cos; var t1 = a.x*temp; var t2 = a.y*temp; var t3 = a.z*temp; var tsinx = sin*a.x; var tsiny = sin*a.y; var tsinz = sin*a.z; var tbx = this.x-b.x; var tby = this.y-b.y; var tbz = this.z-b.z; var xp = b.x+tbx*(t1*a.x+cos)+tby*(t2*a.x-tsinz)+tbz*(t3*a.x+tsiny); var yp = b.y+tbx*(t1*a.y+tsinz)+tby*(t2*a.y+cos)+tbz*(t3*a.y-tsinx); var zp = b.z+tbx*(t1*a.z-tsiny)+tby*(t2*a.z+tsinx)+tbz*(t3*a.z+cos); this.x = xp; this.y = yp; this.z = zp; };
// прототип масштабирования, относительно центра координат
vertex.prototype.scale = function(sx, sy, sz) { this.x *= sX; this.y *= sY; this.z *= sZ; };
// прототип масштабирования относительно точки a
vertex.prototype.scale_point = function(sx, sy, sz, a) { this.x = a.x+(this.x-a.x)*sX; this.y = a.y+(this.y-a.y)*sY; this.z = a.z+(this.z-a.z)*sZ; };
// прототип масштабирования по оси X относительно центра координат
vertex.prototype.scaleX = function(sx) { this.x *= sx; };
// прототип масштабирования по оси Y относительно центра координат
vertex.prototype.scaleY = function(sy) { this.y *= sy; };
// прототип масштабирования по оси Z относительно центра координат
vertex.prototype.scaleZ = function(sz) { this.z *= sz; };
// прототип преобразования сдвига
vertex.prototype.transpose = function(incX, incY, incZ) { this.x += incX; this.y += incY; this.z += incZ; };
// прототип преобразования сдвига по оси X
vertex.prototype.transposeX = function(incX) { this.x += incX; };
// прототип преобразования сдвига по оси Y
vertex.prototype.transposeY = function(incY) { this.y += incY; };
// прототип преобразования сдвига по оси Z
vertex.prototype.transposeZ = function(incZ) { this.z += incZ; };
// прототип получение нормали
vertex.prototype.normal = function() { return (Math.sqrt((this.x*this.x)+(this.y*this.y)+(this.z*this.z))); };
// прототип получение единичного вектора
vertex.prototype.get_axis = function() { var norm = this.normal(); return (new vertex(this.x/norm, this.y/norm, this.z/norm)); delete norm; };
// прототип вычитания векторов
vertex.prototype.subtract = function(v) { this.x -= v.x; this.y -= v.y; this.z -= v.z; };
// прототип сложения векторов
vertex.prototype.addition = function(v) { this.x += v.x; this.y += v.y; this.z += v.z; };
// прототип получения вычитания векторов
vertex.prototype.get_subtract = function(v) { return (new vertex(this.x-v.x, this.y-v.y, this.z-v.z)); };
// прототип получения сложения веторов
vertex.prototype.get_addition = function(v) { return (new vertex(this.x+v.x, this.y+v.y, this.z+v.z)); };
// прототип умножения на число
vertex.prototype.multiplication = function(s) { return (new vertex(this.x*s, this.y*s, this.z*s)); };
// прототип преобразования перспективы
vertex.prototype.perspective = function() { var perRatio = (this.z/dist+1); this.rx = cnx+this.x/perRatio; this.ry = cny-this.y/perRatio; };
// дополнительная функции для облегчения заливки грани куба
face = function (a) { // чётность грани this.c = c; // массив точек грани this.a = a; // размерность грани this.d = a.length-1; };
// прототип закраски грани
face.prototype.draw = function() { _root.lineStyle(0, 0x000000, 100); _root.beginFill(0x999999, 50); _root.moveTo(v[this.a[0]].rx, v[this.a[0]].ry); for (var i = 1; i<=(this.d); i++) { _root.lineTo(v[this.a[i]].rx, v[this.a[i]].ry, v[this.a[i+1]].rx, v[this.a[i+1]].ry); } _root.endFill(); };
// прототип заливки грани
face.prototype.fill = function() { this.draw(); };
// функция, выполняемая один раз, после загрузке клипа
_root.onLoad = function() { // задаём координаты центра клипа cnx = 200; cny = 200; var ngran=0; var npoint=0; var position:Number=0; var par:String;
rad = Math.PI/180; par='TEXT'; dist = 1000; f = new Array(); v = new Array();
for (var i:Number=0; i<par.length; i++) { if(par.charAt(i)=='t') { v[npoint] = new vertex(30+position, 0, 0); v[npoint+1] = new vertex(40+position, 0, 0); v[npoint+2] = new vertex(40+position, 50, 0); v[npoint+3] = new vertex(60+position, 50, 0); v[npoint+4] = new vertex(60+position, 60, 0); v[npoint+5] = new vertex(10+position, 60, 0); v[npoint+6] = new vertex(10+position, 50, 0); v[npoint+7] = new vertex(30+position, 50, 0);
v[npoint+8] = new vertex(30+position, 0, 10); v[npoint+9] = new vertex(40+position, 0, 10); v[npoint+10] = new vertex(40+position, 50, 10); v[npoint+11] = new vertex(60+position, 50, 10); v[npoint+12] = new vertex(60+position, 60, 10); v[npoint+13] = new vertex(10+position, 60, 10); v[npoint+14] = new vertex(10+position, 50, 10); v[npoint+15] = new vertex(30+position, 50, 10);
f[0] = new face([npoint+0, npoint+1, npoint+2, npoint+3 ,npoint+4 ,npoint+5 ,npoint+6 ,npoint+7]); f[1] = new face([npoint+8, npoint+9, npoint+10, npoint+11 ,npoint+12 ,npoint+13 ,npoint+14 ,npoint+15]); f[2] = new face([npoint+0,npoint+7,npoint+15,npoint+8]); f[3] = new face([npoint+6,npoint+5,npoint+13,npoint+14]); f[4] = new face([npoint+7,npoint+6,npoint+14,npoint+15]); f[5] = new face([npoint+5,npoint+4,npoint+12,npoint+13]); f[6] = new face([npoint+4,npoint+3,npoint+11,npoint+12]); f[7] = new face([npoint+1,npoint+2,npoint+10,npoint+9]); f[8] = new face([npoint+2,npoint+3,npoint+11,npoint+10]); f[9] = new face([npoint+0,npoint+1,npoint+9,npoint+8]); npoint=npoint+16; position=position+70; } }
// инициализируем вершину центра куба v[npoint] = new vertex(35, 40, 15); // инициализируем грани куба
// инициализируем произвольные оси вращения axisX = new vertex(1.0, 0.0, 0.0); axisY = new vertex(0.0, 1.0, 0.0); axisZ = new vertex(0.0, 0.0, 1.0); // задаём колличество вершин amount = v.length-1; faces = f.length-1; };
_root.onEnterFrame = function() {
// выполняем преобразование перспективы для всех вершин for (var i = 0; i<=amount; i++) { v[i].perspective(); } _root.clear(); // цикл пребора всех лиц и закрашивание их for (var i = 0; i<=faces; i++) { f[i].fill(); } } stop();
|
в приципи все работает но появляется только одна буква в переменной par хранится текст который нужно вывести  в чем ошибка в части реализации 3D все должно быть нормально Это сообщение отредактировал(а) Gigabyte - 16.5.2006, 15:03
|