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

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

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

Регистрация: Nov 2006
Сообщений: 93
По умолчанию Создание отражения (сложение alpha каналов по умножению)

Хочу сделать эффект отражения картинки ( с альфа каналом)

Результат выглядит примерно вот так
[IMG]http://img502.**************/img502/2821/reflectionoq8.th.jpg[/IMG]
То есть отражением является перевёрнутая обрезанная картинка плавно исчезающая к низу.

У меня получилось реализовать только попиксельно, что довольно сильно тормозит при бальших отражениях.
Вопрос как сделать это более аппаратно ?

Вод код функции
Код:
// создать отражение
	function CreateReflection()
	{
		// создаём Bitmap для будущего отражения
		var myBitmapData:BitmapData = new BitmapData(m_picture._width, GLB_data.m_reflection_height);	
		myBitmapData.fillRect(new Rectangle(0, 0, m_picture._width, GLB_data.m_reflection_height),0x00000000);

		// переворачиваем отражение
		var matrix:Matrix = new Matrix();		
		matrix.scale(1,-1);
		matrix.translate(0,m_picture._height);
		
		// записываем в myBitmapData отражение
		myBitmapData.draw(m_picture,matrix);
		
		// теперь хотим сделать так, чтобы отражение исчезало по градиенту сверху вниз
		// то есть по сути хотим умножить альфа канал отражения на затухающий градиент
		
		//Alpha_Gradient_mc - это клип с градиентом от непрозрачного к прозрачному
		var grad_clip = attachMovie("Alpha_Gradient_mc","grad",getNextHighestDepth());		
		var grad_matrix = new Matrix();
		
		// подстраиваем градиент под правильный размер отражения
		grad_matrix.scale(m_picture._width/grad_clip._width,GLB_data.m_reflection_height/grad_clip._height);				
		var grad_bitmap:BitmapData = new BitmapData(m_picture._width, GLB_data.m_reflection_height);	
		grad_bitmap.fillRect(new Rectangle(0, 0, m_picture._width, GLB_data.m_reflection_height),0x00000000);		
		grad_bitmap.draw(grad_clip,grad_matrix);
		

		
		var color_transform:ColorTransform = new ColorTransform();		
		grad_matrix = new Matrix(); 	
		

		// эти закоментареные строки правильного результата не дали		
		//myBitmapData.draw(grad_bitmap,grad_matrix,color_transform,"multiply");				
		//myBitmapData.copyChannel(grad_bitmap, new Rectangle(0, 0, m_picture._width, GLB_data.m_reflection_height), new Point(0, 0), 1, 8)
		//myBitmapData.merge(grad_bitmap, new Rectangle(0, 0, m_picture._width, GLB_data.m_reflection_height),new Point(0, 0), 128, 0, 0, -255);
		
		// попиксельная обработка хоть и даёт правильный результат, то уж больно тормозит
		for(var i_x = 0;i_x<m_picture._width;i_x++)
		{
			for(var i_y = 0;i_y<GLB_data.m_reflection_height;i_y++)
			{				
				var pict_color = myBitmapData.getPixel32(i_x,i_y);
				var grad_color = grad_bitmap.getPixel32(i_x,i_y);
				
				var alpha  = (((pict_color>> 24 & 0xFF)) * ((grad_color>> 24) & 0xFF))/255;
				//var alpha  = ((grad_color>> 24) & 0xFF);
				pict_color = pict_color & 0x00FFFFFF;
				
				trace(alpha);				
				alpha = alpha << 24;
				pict_color += alpha;
				myBitmapData.setPixel32(i_x,i_y,pict_color);				
			}
		}
		
		grad_clip.removeMovieClip();		
		m_reflection.attachBitmap(myBitmapData, m_reflection.getNextHighestDepth(), "auto", true);		
	}

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

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

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


 


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


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