Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 19.07.2009, 01:48
Герыч вне форума Посмотреть профиль Отправить личное сообщение для Герыч Найти все сообщения от Герыч
  № 1  
Ответить с цитированием
Герыч
 
Аватар для Герыч

блогер
Регистрация: Apr 2009
Адрес: НиНо
Сообщений: 185
Записей в блоге: 12
Cool Рендеринг воды и нечто вроде metaballs

Уже около месяца в свободное время от прошедшей сессии и поездки во Владикавказ к родне я пытаюсь запрогать воду. Сейчас передо мной стоит задача отображения воды на экране. Вода - 100-200 частиц, которые движутся, взаимодействую друг с другом.

Сейчас добился немного похожего на воду вида... но всё это происходит слишком медленно.
Вот мои примеры:
100 частиц
150 частиц
200 частиц

Тут есть примеры без прорисовки воды. Скорость заметно различается...

Для рисования всего этого дела я поступаю так:

Код AS3:
			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();
По идее код близок к metaballs, да и результат такой же. Теперь вопрос:
кто-нибудь может придумать быстрее?

Старый 19.07.2009, 10:35
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 2  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
GlowFilter?

Старый 19.07.2009, 13:36
Герыч вне форума Посмотреть профиль Отправить личное сообщение для Герыч Найти все сообщения от Герыч
  № 3  
Ответить с цитированием
Герыч
 
Аватар для Герыч

блогер
Регистрация: Apr 2009
Адрес: НиНо
Сообщений: 185
Записей в блоге: 12
не, GlowFilter не тот результат даёт. Да и работает так же медленно..

Старый 19.07.2009, 13:57
WRC_S вне форума Посмотреть профиль Отправить личное сообщение для WRC_S Посетить домашнюю страницу WRC_S Найти все сообщения от WRC_S
  № 4  
Ответить с цитированием
WRC_S
[+6 23.11.09]
 
Аватар для WRC_S

Регистрация: Jun 2009
Адрес: Россия
Сообщений: 318
Отправить сообщение для WRC_S с помощью ICQ
Глянь это http://www.silin.fatal.ru/#AS3/filters/ripple

Старый 19.07.2009, 15:40
Герыч вне форума Посмотреть профиль Отправить личное сообщение для Герыч Найти все сообщения от Герыч
  № 5  
Ответить с цитированием
Герыч
 
Аватар для Герыч

блогер
Регистрация: Apr 2009
Адрес: НиНо
Сообщений: 185
Записей в блоге: 12
последнее совсем не на ту тему...

Старый 19.07.2009, 17:51
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 6  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
http://asluv.com/2007/09/20/interact...s3-experiment/

Старый 19.07.2009, 21:09
Яски вне форума Посмотреть профиль Отправить личное сообщение для Яски Найти все сообщения от Яски
  № 7  
Ответить с цитированием
Яски

блогер
Регистрация: May 2008
Адрес: (0, 10, 185) в локальной системе
Сообщений: 721
Записей в блоге: 6
Во флеш отрисовка очень медленная, а тем более работа с битмапой. Можно сильно ускорить алгоритм, если удастся решить задачу только математикой, без отрисовки. Т.е. аналитически находить границу воды и рисовать только ее. Можно попытаться немного ускорить алгоритм, использовав PixelBender, но не факт что ускорение будет иметь место.
__________________
TankiOnline
Я разработчик Alternativa3D

Старый 20.07.2009, 00:46
Герыч вне форума Посмотреть профиль Отправить личное сообщение для Герыч Найти все сообщения от Герыч
  № 8  
Ответить с цитированием
Герыч
 
Аватар для Герыч

блогер
Регистрация: Apr 2009
Адрес: НиНо
Сообщений: 185
Записей в блоге: 12
Цитата:
математикой, без отрисовки
единственное, что я знаю-это metaballs. В принципе тут я делаю это же. Если это делать математикой, то выходит медленней.

Мысли были на тему metabal+marching squares. но тут опять проблема: если делать размер сетки мелким-получаем медленную прорисовку(много вычислений), если делать крупную-то marching squares будет рисовать некрасивые фигурки..

Старый 20.07.2009, 00:59
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 9  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Можно получить небольшой прирост оптимизацией кода. Например не создавать каждый раз новую матрицу а использовать одну во всем цикле, ну и т.п.

Старый 20.07.2009, 01:04
Герыч вне форума Посмотреть профиль Отправить личное сообщение для Герыч Найти все сообщения от Герыч
  № 10  
Ответить с цитированием
Герыч
 
Аватар для Герыч

блогер
Регистрация: Apr 2009
Адрес: НиНо
Сообщений: 185
Записей в блоге: 12
уже сделал) то был набросок кода, но скорость заметно не изменилась. Ещё вместо рисования одного и того же кружка в разных местах
Код AS3:
				bubbles.beginGradientFill(GradientType.RADIAL, [0xFF,0xFF], [1,0], [60, 255],m);                    //рисую полупрозрачные кружки от центра к краям
				bubbles.drawCircle(p.xx, p.yy, 25);
				bubbles.endFill();
я рисую только один и перерисовываю его в нужном месте с помощью draw, но это сильно не меняет..

ещё добавлю) может я не совсем понимаю, как работает прорисовка во флэше, т.е. вообще сами Bitmap'ы и все display object'ы, но как я понял скорость работы treshold зависит от того, нарисовано ли что-нито на битмапе или нет)

Создать новую тему Ответ Часовой пояс GMT +4, время: 03:31.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Теги
metaball , Вода

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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