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

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

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

Регистрация: Feb 2008
Сообщений: 890
По умолчанию Параметр stitch в perlinNoise

Цитата:
stitch (Boolean): при значении true этот метод будет стараться сгладить края перехода изображения для создания ровных текстур, которые можно использовать для мозаичной заливки растровым изображением.
Объясните, что происходит при сдвиге параметров offsets при stitch == true и как сделать плавное зацикливание шума Перлина (возможно ли вообще это рассчитать)?

Понимаю, что не очень понятно спросил - просто добавьте этот код в первый кадр, выполните его, чуть-чуть посмотрите, а затем уберите комментарии из слушателя и снова выполните и посмотрите...)))

Код AS3:
var rows:uint = 3;
var columns:uint = 4;
 
var channels:uint = BitmapDataChannel.GREEN | BitmapDataChannel.BLUE;
var p:Point = new Point( );
 
var bmd:BitmapData = new BitmapData(100, 100, false, 0x00000000);
 
var bmp:Bitmap;
var str:String = "bmp";
 
for (var i:int = 0; i <  rows * columns; i++)
{	
	bmp = this[str + i] = new Bitmap(bmd);
	addChild(bmp);
 
	bmp.y = bmd.height * int(i / columns);
	bmp.x = bmd.width * int(i % columns);
}
 
addEventListener(Event.ENTER_FRAME, enterFrameListener);
 
function enterFrameListener (e:Event):void
{	
	p.x++;
	p.y++;
 
	//уберите эти комментарии при втором просмотре:
	//if (p.x >= bmd.width) p.x = 0;
	//if (p.y >= bmd.height) p.y = 0;
	//здесь я наивно полагал, что размеры битмапдаты и смещение связаны напрямую...)))
 
	bmd.perlinNoise(30, 30, 1, 0, true, true, channels, false, [p]);
}
__________________
скриптограф

Старый 14.04.2010, 19:38
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 2  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Цитата:
//здесь я наивно полагал, что размеры битмапдаты и смещение связаны напрямую...)))
В том то и дело, что связаны. Исправь условие на if (p.x >= bmd.width - 30) p.x = 0; и увидишь. Будет дергаться конечно, но границы битмапины не попадут в изображение.
Можно еще вот так сделать (фрагмент)
Код AS1/AS2:
p.x+= step;
p.y+= step;
 
//уберите эти комментарии при втором просмотре:
if (p.x > bmd.width - 30 || p.y > bmd.height - 30) step = -1;
if (p.x < 0 || p.y < 0) step = 1;
Шум будет плавать туда-сюда, но нормально смешиваясь без границ.
__________________
Reality.getBounds(this);

Старый 14.04.2010, 19:56
orcpochta вне форума Посмотреть профиль Отправить личное сообщение для orcpochta Найти все сообщения от orcpochta
  № 3  
Ответить с цитированием
orcpochta

Регистрация: Feb 2008
Сообщений: 890
Цитата:
Сообщение от Wolsh Посмотреть сообщение
В том то и дело, что связаны. Исправь условие на if (p.x >= bmd.width - 30) p.x = 0; и увидишь. Будет дергаться конечно, но границы битмапины не попадут в изображение.
Можно еще вот так сделать (фрагмент)
Код AS1/AS2:
p.x+= step;
p.y+= step;
 
//уберите эти комментарии при втором просмотре:
if (p.x > bmd.width - 30 || p.y > bmd.height - 30) step = -1;
if (p.x < 0 || p.y < 0) step = 1;
Шум будет плавать туда-сюда, но нормально смешиваясь без границ.
Я пробовал оба этих варианта и оба не подошли т.к. в первом случае происходит ощутимый скачок шума, т.е. он как-будто дергается с периодичностью, а во втором случае тоже не айс, когда туда-сюда мотыляется - хотелось бы, чтобы именно плавный шум без скачков и без артефактов несостыковки получить в зацикливании.

Можно конечно применить приемы зацикливания мувиклипов, созданных в среде разработки, но этот вариант отпадает сразу как только имеем шум с двумя октавами, смещающимися в разных направлениях.
__________________
скриптограф

Старый 14.04.2010, 20:56
Tahion вне форума Посмотреть профиль Отправить личное сообщение для Tahion Найти все сообщения от Tahion
  № 4  
Ответить с цитированием
Tahion

Регистрация: Apr 2010
Сообщений: 57
И вы правы мистер Wolsh . А я долго не мог понять что там не 1 битмап :/

Код AS3:
var rows:uint = 3;
var columns:uint = 4;
 
var channels:uint = BitmapDataChannel.GREEN | BitmapDataChannel.BLUE;
var p:Point = new Point( );
 
var bmd:BitmapData = new BitmapData(100, 100, false, 0x00000000);
 
var bmp:Bitmap;
var str:String = "bmp";
var bitmaps:Array = [];
 
for (var i:int = 0; i <  rows * columns; i++)
{	
	bmp = this[str + i] = new Bitmap(bmd.clone());
	bitmaps.push(bmp);
	addChild(bmp);
 
	bmp.y = bmd.height * int(i / columns);
	bmp.x = bmd.width * int(i % columns);
}
 
addEventListener(Event.ENTER_FRAME, enterFrameListener);
 
function enterFrameListener(e:Event = null):void
{	
	p.x++;
	p.y++;
 
	for (var i:int = 0; i <  rows * columns; i++)
	{	
		var _bmp:Bitmap = bitmaps[i];
 
		var bmp:BitmapData = _bmp.bitmapData;
		var p2:Point = p.clone();
		p2.x += _bmp.x;
		p2.y += _bmp.y;
		bmp.perlinNoise(30, 30, 1, 0, true, true, channels, false, [p2]);
	}
 
}
Вообще эта операция perlinNoise очевидно слишком трудоемка для флеша чтобы в ентерфрейме генерировать его. Однократно сгенерировать перлин для придиния определенных эфектов текстуры это еще куда не шло. Но это ... Хотя красиво

Кстати странно что если сделать 1 большой битмап и применять кнему шум то это будет гораздо менее производительно если к нескольким маленьким, даже не сомтря на то что там много лишних действей в цикле


Последний раз редактировалось Tahion; 14.04.2010 в 21:04.
Старый 14.04.2010, 21:04
orcpochta вне форума Посмотреть профиль Отправить личное сообщение для orcpochta Найти все сообщения от orcpochta
  № 5  
Ответить с цитированием
orcpochta

Регистрация: Feb 2008
Сообщений: 890
Tahion, извините, вы специально придуриваетесь или это вышло ненароком?

в смысле зачем вы перлите rows * columns раз, когда весь смысл поста был перлить один раз и результат использовать везде, т.к. он должен был быть безшовным.
__________________
скриптограф


Последний раз редактировалось orcpochta; 14.04.2010 в 21:14.
Старый 14.04.2010, 22:02
Tahion вне форума Посмотреть профиль Отправить личное сообщение для Tahion Найти все сообщения от Tahion
  № 6  
Ответить с цитированием
Tahion

Регистрация: Apr 2010
Сообщений: 57
Тут был пост волша который все объяснял но он почемуто пропал. Ваш вариант ошибочный т.к не учитывается смещение x и y у каждого битмапа, каждый битмап отрисовывает копию даты и естественно что например нижний край верхнего битмапа не будет соответсвовать верхнему краю битмапа ниже его, он будте соответствовать верхнему краю битмапа ниже. Пост волша был более красноречив но так как он пропал это не существенно

Старый 14.04.2010, 22:22
orcpochta вне форума Посмотреть профиль Отправить личное сообщение для orcpochta Найти все сообщения от orcpochta
  № 7  
Ответить с цитированием
orcpochta

Регистрация: Feb 2008
Сообщений: 890
Цитата:
Ваш вариант ошибочный т.к не учитывается смещение x и y у каждого битмапа, каждый битмап отрисовывает копию даты
битмэп - это всего лишь контейнер для битмэпдаты, какое уж тут смещение надо учитывать не понятно совершенно, т.к. во всех битмапах используется одна битмэпдата, которая загружается в контейнер без каких-либо смещений

Цитата:
Сообщение от Tahion Посмотреть сообщение
не будет соответсвовать верхнему краю битмапа ниже его, он будте соответствовать верхнему краю битмапа ниже.
ничего не понял - какая-то путаница с краями, про один и тот же край вы говорите, что ему не будет соответствовать, а потом говорите, что будет.

в своем первом посте в этой темы я исходил из того, что

Цитата:
stitch (Boolean): при значении true этот метод будет стараться сгладить края перехода изображения для создания ровных текстур, которые можно использовать для мозаичной заливки растровым изображением.
т.е. на основании этого изречения из справки предполагалось, что верхний край одного и того же среза шума Перлина будет безшовно стыковаться с нижним краем этого среза
в сущности так оно и происходит, пока сдвиг не приближается к краям битмэпдаты

Wolsh, верните свой пост, который все объяснял!)))
__________________
скриптограф


Последний раз редактировалось orcpochta; 14.04.2010 в 22:35.
Старый 14.04.2010, 22:32
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 8  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Он был упадочный и я его убил))))
Короче вот что.
Прямоугольник 30х30 опускается вниз и вправо. Когда он доходит до крайней точки СВОЕЙ точкой 0:0, то в самом прямоугольнике уже ничего нет, это и видится как резкие края. Поэтому я возвращаю его, когда он доходит своей нижней точкой до нижней точки битмапа. Но прикольный адобовский нойз генерится с шагом, равным размеру битмапины, и чтобы шаг рисунка шума совпал, надо доехать до конца))))) Вот такой бред. Я не вижу выхода, потому и удалил, что сказать толком нечего.
__________________
Reality.getBounds(this);

Старый 14.04.2010, 22:42
orcpochta вне форума Посмотреть профиль Отправить личное сообщение для orcpochta Найти все сообщения от orcpochta
  № 9  
Ответить с цитированием
orcpochta

Регистрация: Feb 2008
Сообщений: 890
Цитата:
Сообщение от Wolsh Посмотреть сообщение
Он был упадочный и я его убил))))
Короче вот что.
Прямоугольник 30х30 опускается вниз и вправо. Когда он доходит до крайней точки СВОЕЙ точкой 0:0, то в самом прямоугольнике уже ничего нет, это и видится как резкие края. Поэтому я возвращаю его, когда он доходит своей нижней точкой до нижней точки битмапа. Но прикольный адобовский нойз генерится с шагом, равным размеру битмапины, и чтобы шаг рисунка шума совпал, надо доехать до конца))))) Вот такой бред. Я не вижу выхода, потому и удалил, что сказать толком нечего.
ну да, это все мне еще вчера стало понятно, но даже когда в прямоугольнике уже ничего нет и он едет дальше, все равно что-то продолжает генерироваться, но уже нет бесшовной спайки - короче, реально бред какой-то)))

UPD: а еще не совсем понятна мысль из справки: http://help.adobe.com/ru_RU/AS3LCR/F...ay/Bitmap.html

Цитата:
Объект BitmapData можно вызвать на экран объектом Bitmap одним из двух способов: с помощью векторного средства визуализации, такого как фигура, заполненная растровым изображением, или с использованием более быстрой подпрограммы копирования пикселов. Подпрограмма копирования пикселов работает намного быстрее, чем векторное средство визуализации, но объект Bitmap должен соответствовать определенным условиям для его использования.
что это значит? не совсем понял, что это за способы.

а далее в описании свойства pixelSnapping идет:
Цитата:
На внутреннем уровне это значение позволяет показывать изображение с максимальной быстротой с помощью векторного средства визуализации.
что противоречит предыдущей цитате

мозг уже вскипел с этими битмапами и справками(((

Добавлено через 3 часа 51 минуту
Всем дарю!)))

Код AS3:
var rows:uint = 3;
var columns:uint = 4;
 
var channels:uint = 12;
var p:Point = new Point( );
var p2:Point = new Point( );
 
var bmd:BitmapData = new BitmapData(100, 100, true, 0xFFFFFFFF);
 
var bmp:Bitmap;
var str:String = "bmp";
 
for (var i:int = 0; i <  rows * columns; i++)
{	
	bmp = this[str + i] = new Bitmap(bmd);
	addChild(bmp);
 
	bmp.y = bmd.height * int(i / columns);
	bmp.x = bmd.width * int(i % columns);
}
 
var r:int = (100 - 40) / 2;
var p0:Point = new Point(r, r);
var angle:Number = 0;
 
addEventListener(Event.ENTER_FRAME, enterFrameListener);
function enterFrameListener (e:Event):void
{	
	angle += .01;
 
	p.x = p0.x + r * Math.cos(angle);
	p.y = p0.y + r * Math.sin(angle);
 
	p2.x = p0.x - r * Math.cos(angle);
	p2.y = p0.y - r * Math.sin(angle);
 
	bmd.perlinNoise(40, 40, 2, 0, true, false, channels, false, [p, p2]);
}
красиво без магических цифр не оформлял, но идея в том, чтобы прямоугольник из последнего перед этим поста Wolsh-a ходил не по прямой или туда-сюда, а по кругу или эллипсу (если линейные размеры битмапдаты разные по горизонтали и вертикали), или любой гладкой кривой, но так чтобы не выезжал за пределы битмапдаты - т.е. это может быть даже случайный алгоритм, лишь бы гладкий путь был, ограниченный так, чтобы прямоугольник всегда был в рамке битмапдаты...)))
__________________
скриптограф


Последний раз редактировалось orcpochta; 15.04.2010 в 02:42.
Старый 21.04.2010, 17:39
orcpochta вне форума Посмотреть профиль Отправить личное сообщение для orcpochta Найти все сообщения от orcpochta
  № 10  
Ответить с цитированием
orcpochta

Регистрация: Feb 2008
Сообщений: 890
практическое применение, если кому интересно:
http://www.polkanov.com/labyrinth/
__________________
скриптограф

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

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

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


 


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


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