![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Уже около месяца в свободное время от прошедшей сессии и поездки во Владикавказ к родне я пытаюсь запрогать воду. Сейчас передо мной стоит задача отображения воды на экране. Вода - 100-200 частиц, которые движутся, взаимодействую друг с другом.
Сейчас добился немного похожего на воду вида... но всё это происходит слишком медленно. Вот мои примеры: 100 частиц 150 частиц 200 частиц Тут есть примеры без прорисовки воды. Скорость заметно различается... Для рисования всего этого дела я поступаю так: var particleBitmap:BitmapData=canvas.bitmapData; var w:uint=canvas.width; var h:uint=canvas.height; var rect:Rectangle=new Rectangle(0, 0, w, h); var m:Matrix; var i:int; var p:BaseParticle; particleBitmap.lock(); particleBitmap.fillRect(new Rectangle(0, 0, w, h), 0); bubbles.clear(); for (i=0; i<ptCount; i++) { p=pt[i]; m=new Matrix(); m.createGradientBox(50, 50, 0, p.xx-25, p.yy-25); bubbles.beginGradientFill(GradientType.RADIAL, [0xFF,0xFF], [1,0], [60, 255],m); //рисую полупрозрачные кружки от центра к краям bubbles.drawCircle(p.xx, p.yy, 25); bubbles.endFill(); } particleBitmap.draw(bubblesShape); particleBitmap.threshold(particleBitmap,rect, new Point(0, 0), "<", 0xA0000000); //отсекаю всё слишком прозрачное particleBitmap.colorTransform(rect,new ColorTransform(1,1,1,1,0,0,0,255)); //убираю прозрачность particleBitmap.unlock(); кто-нибудь может придумать быстрее? |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
GlowFilter?
|
|
|||||
|
не, GlowFilter не тот результат даёт. Да и работает так же медленно..
|
|
|||||
|
[+6 23.11.09]
|
|
|
|||||
|
последнее совсем не на ту тему...
|
|
|||||
|
|
|
|||||
|
блогер
Регистрация: May 2008
Адрес: (0, 10, 185) в локальной системе
Сообщений: 721
Записей в блоге: 6
|
Во флеш отрисовка очень медленная, а тем более работа с битмапой. Можно сильно ускорить алгоритм, если удастся решить задачу только математикой, без отрисовки. Т.е. аналитически находить границу воды и рисовать только ее. Можно попытаться немного ускорить алгоритм, использовав PixelBender, но не факт что ускорение будет иметь место.
|
|
|||||
|
Цитата:
Мысли были на тему metabal+marching squares. но тут опять проблема: если делать размер сетки мелким-получаем медленную прорисовку(много вычислений), если делать крупную-то marching squares будет рисовать некрасивые фигурки.. |
|
|||||
|
уже сделал) то был набросок кода, но скорость заметно не изменилась. Ещё вместо рисования одного и того же кружка в разных местах
bubbles.beginGradientFill(GradientType.RADIAL, [0xFF,0xFF], [1,0], [60, 255],m); //рисую полупрозрачные кружки от центра к краям bubbles.drawCircle(p.xx, p.yy, 25); bubbles.endFill(); ещё добавлю) может я не совсем понимаю, как работает прорисовка во флэше, т.е. вообще сами Bitmap'ы и все display object'ы, но как я понял скорость работы treshold зависит от того, нарисовано ли что-нито на битмапе или нет) |
![]() |
![]() |
Часовой пояс GMT +4, время: 03:31. |
|
|
« Предыдущая тема | Следующая тема » |
| Теги |
| metaball , Вода |
|
|