| marmotya |
24.02.2012 10:08 |
Изменение свойств материалов в PaperVision3d
Всем привет!
Нужна помощь. Создаю галерею на ppvd. При помощи BulkLoader-a загружаю фото; циклом создаю новые битмапы, оборачиваю их в мувиклипы; эти мувиклипы в том же цикле использую для создания MovieMaterial для плоскостей (plane), которые и размещаю на плоскостях цилиндра в некоторых координатах относительно его vertices. Все эти planes добавляю в DisplayObject3D и помещаю его на сцену.
Код ниже.
Код AS3:
var numOfVertieces:Number = cylinder.geometry.vertices.length;
for (var j:int = 1; j < numOfVertieces; j++)
{
var bm:Bitmap = bl.getBitmap(j + ".jpg");
mc_mat = new MovieClip();
mc_mat.addChild(bm);
plane_mat =new MovieMaterial(mc_mat);
plane_mat.interactive = true;
plane_mat.smooth = true;
plane_mat.doubleSided = true;
plane = new Plane(plane_mat,bm.width,bm.height,1,1);
plane.x
...
carusel_container.addChild(plane);
}
Допустим передо мной стоит задача: на событие поворот колеса мыши (т.е. я не могу обратиться к объекту как e.target) повернуть всю карусель и, чтобы создать иллюзию быстрого вращения, применить фильтр. Вопрос: к чему именно применить фильтр? К plane, к его мувиматериалу, или к мувиклип материала. Получилось реализовать через применения фильтра на весь viewport, но мне эта реализация не нравится.
Код AS3:
stage.addEventListener(MouseEvent.MOUSE_WHEEL,onMW);
private function onMW(e:MouseEvent):void{
var lr:Number = carusel_container.localRotationY;
TweenLite.to(carusel_container,1, {localRotationY:lr+15});
var timeline:TimelineLite = new TimelineLite();
timeline.append( new TweenMax(viewport, .5, {blurFilter:{blurY:200}}) );
timeline.append( new TweenMax(viewport, .5, {blurFilter:{blurY:0}}) );
И еще. Как правильно обращаться к plane-ам из других функций, если я в цикле еще добавлю код:
Код AS3:
plane_mat.id = j;
или
Код AS3:
plane_mat.name = "plane_mat_name" + j;
Добавлено через 7 часов 12 минут
Возможно, кому-нибудь пригодится. Нашла еще один способ реализации.
В основном цикле создания карусели для каждого plane прописываем
Код AS3:
plane.useOwnContainer = true;
и затем помещаем все элементы карусели в объявленный в глобальной области массив:
Код AS3:
list.push(carusel_container.addChild(plane));
.
Теперь если надо из какой-нибудь ф-ции обратиться к элементам массива, имеем:
Код AS3:
for (var i:int = 0; i < 10; i++)
{
var obj:DisplayObject3D = list[i] as DisplayObject3D;
obj.filters = [new BlurFilter(1, 20, 2)];
}
//здесь применяется фильтр ко всем элементам массива с индексом, меньшим 10.
Может кто еще что подскажет?
|