Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   API приложений и сред (http://www.flasher.ru/forum/forumdisplay.php?f=61)
-   -   [Papervision] Изменение свойств материалов в PaperVision3d (http://www.flasher.ru/forum/showthread.php?t=175787)

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.

Может кто еще что подскажет?


Часовой пояс GMT +4, время: 00:17.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.