Главная | Форум | Реклама | Shop Flash-JePo | Картинки | Регистрация | Вход
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
3D сфера из точек, Урок. ActionScript 3. CS3
JeepersДата: Понедельник, 29.08.2011, 11:43 | Сообщение # 1




Администратор портала







Главный Админ
Сталин
Группа: Администраторы
Сообщений: 937
Награды: 0
Репутация: 13



1. Создаем документ размером 500х500. Цвет фона - черный.
2. В первый кадр вставляем код:

Code
var xcoord:Number = 0;// инициализация координат точки
var ycoord:Number = 0;
var zcoord:Number = 0;
var r:Number = stage.stageWidth/2.5;// радиус сферы
var time:Number=0;// параметр вращения
var angle:Number=0;// еще один параметр вращения

var container:MovieClip = new MovieClip();// "ящик", в который поместим сферу
container.x=stage.stageWidth/2;
container.y=stage.stageHeight/2;
addChild(container);

var points:Array = new Array();// создаем точки
for (var theta:uint=0; theta<=180; theta+=5) {//полярный угол сферической системы координат
points[theta] = new Array();
for (var phi:uint=0; phi<360; phi+=5) {//азимутальный угол
  points[theta][phi] = new Sprite();// масив точек
  points[theta][phi].graphics.lineStyle();
  points[theta][phi].graphics.beginFill(0x0000FF);
  points[theta][phi].transform.colorTransform = changeColor(255*Math.cos(phi*Math.PI/180),255*Math.cos((180-phi)*Math.PI/180),255*Math.cos(phi*Math.PI/180));
  points[theta][phi].graphics.drawCircle(0, 0, 1);
  points[theta][phi].graphics.endFill();
  container.addChild(points[theta][phi]);
}
}

var starter:Timer=new Timer(20);
starter.addEventListener(TimerEvent.TIMER, moveSphere);

starter.start();

function moveSphere(e:Event):void {// вращаем сферу

for (var theta=0; theta<=180; theta+=5) {
  for (var phi=0; phi<360; phi+=5) {
   xcoord=r*Math.sin(theta*Math.PI/180)*Math.cos((phi+time)*Math.PI/180);// переход к декартовым координатам
   ycoord=r*Math.sin(theta*Math.PI/180)*Math.sin((phi+time)*Math.PI/180);
   zcoord=r*Math.cos(theta*Math.PI/180);
   angle=5*time*Math.PI/180;
   var x1=xcoord*Math.cos(angle*Math.PI/180)+zcoord*Math.sin(angle*Math.PI/180);
   var z1=-xcoord*Math.sin(angle*Math.PI/180)+zcoord*Math.cos(angle*Math.PI/180);

   var newx=ycoord;
   var newy=z1;
   points[theta][phi].x=newx*Math.cos(.3*angle*Math.PI/180)+newy*Math.sin(.3*angle*Math.PI/180);
   points[theta][phi].y=-newx*Math.sin(.3*angle*Math.PI/180)+newy*Math.cos(.3*angle*Math.PI/180);
   //прозрачность делаем зависимой от углов для правдоподобия
   points[theta][phi].alpha=(0.6+0.4*Math.cos((180+phi+time)*Math.PI/180))*theta/100;
  }
}
//r=150+20*(Math.cos(2*time*Math.PI/180));//это если захочеся ввести пульсацию сферы
time++;
//container.rotation=time/5;//можно добавить еще один поворот
}

function changeColor(redshift, greenshift, blueshift):ColorTransform {
return new ColorTransform(1,1,1,1,redshift,greenshift,blueshift,0);
}


3. Запускаем.

Скачать


Требуются: Модераторы, Журналист новостей, Дизайнер!
Shop Flash-JePo
 
Реклама
  • Страница 1 из 1
  • 1
Поиск: