Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Рендеринг воды и нечто вроде metaballs (http://www.flasher.ru/forum/showthread.php?t=127628)

alatar 20.07.2009 01:14

А как она может не зависеть? Если все пиксели не проходят проверку, код будет выполняться быстрее, так как не выполняются операции над пикселями.

Герыч 20.07.2009 11:43

а там Bitmap устроен так, что если ничего на нём не нарисовать, то в нём не будет пикселей вообще?

iflamberg 20.07.2009 16:26

Искал что-то свое, нашел случайно.
http://www.petrileskinen.fi/Actionscript/Metaballs.php

Может пригодится? =/ Тормозит, правда, еще больше чем у тебя, но может это из-за освещения.

Герыч 20.07.2009 17:17

Попробовал его способ(вместо treshold сделать ColorMatrixFilter), вышло раза в 3 медленней..

iflamberg 20.07.2009 17:23

ну, нужно для начал определеить узкое место. Является ли им threshold, или все таки
Код:

                        bubbles.beginGradientFill(GradientType.RADIAL, [0xFF,0xFF], [1,0], [60, 255],m);                    //рисую полупрозрачные кружки от центра к краям
                                bubbles.drawCircle(p.xx, p.yy, 25);
                                bubbles.endFill();

И я все таки, бы попробовал рисовать элементы мувиками, накладывать вместо градиентов glow на родительский мувик элементов и делать threshold на полученом мувике. Все таки glow ты один раз наложешь, а градиенты ты друг за другом рисуешь.

Герыч 20.07.2009 17:42

от градиентов в цикле я избавился. Теперь его я 1 раз рисую до начала симуляции:
Код AS3:

                        bubble=this.bubbleShape.graphics;
                        bubble.clear();
 
                        m=new Matrix();
                        m.createGradientBox(2*r, 2*r, 0, -r, -r);
                        bubble.beginGradientFill(GradientType.RADIAL, [0xFF,0xFF], [1,0], [30, 255],m);
                        bubble.drawCircle(0, 0, r);
                        bubble.endFill();


потом уже при рисовании:
Код AS3:

                        var i:int;
                        var p:BaseParticle;
                        var m:Matrix;
                        m=new Matrix();
 
                        for (i=0; i<ptCount; i++)
                        {
                                p=pt[i];
                                m.tx=p.xx;
                                m.ty=p.yy;
                                bmp.draw(bubbleShape,m);
                        }
 
                        var rect:Rectangle=new Rectangle(0, 0, w, h);
                        bmp.threshold(bmp,rect, new Point(0, 0), "<", 0xA0000000)
                        bmp.unlock();


iflamberg 20.07.2009 17:45

Тут, короче, оптимизировать нечего =) Ну кроме заменить for на while (i--) - говорят он быстрее. Или написать более быстрый программный аналог threshold =/

Герыч 20.07.2009 17:55

неее) щас посмотрел, что жрёт время.. цикл-50-60 мс, всё остальное 1-2 мс.
В чём тогда проблема? я не понимаю... вот это
Код AS3:

bmp.draw(bubbleShape,m);

занимает по времени 0.3 мс примерно.. есть ли какой-нибудь более быстрый способ рисования готовой картинки на bmp?

iflamberg 20.07.2009 18:01

Ну 50мс - это довольно много. Собственно - это падение до 20 fps.

Яски 20.07.2009 18:03

сopyPixels быстрее


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

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