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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 02.12.2007, 00:16
LinuxVideo вне форума Посмотреть профиль Найти все сообщения от LinuxVideo
  № 21  
Ответить с цитированием
LinuxVideo
Banned
[+4 11.12.07]
[+4 18.03.08]

Регистрация: Oct 2007
Сообщений: 269
Цитата:
Создается битмапдата 2x2 с параметром smooth, точки красятся цветами вершин, далее считаются нужные трансформации для битмапа и рисуется на экране через beginBitmapFill. В твоем случае, т.к. полигон четырехугольный, надо разбить его на 2 треугольника и для каждого посчитать свой matrix.
Я наверное тупой, поподробнее если можно. Особенно с момента трансформаций.

Цитата:
Делаешь 3д движок, да?
Нет, это будет как карта, потом с нее будут попиксельно читаться данные. Результат будет в 2д, хотя кто знает, с выходом 10 может и 3д прикручу, благо нативное будет

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

Регистрация: Oct 2006
Сообщений: 2,283
Цитата:
Я наверное тупой, поподробнее если можно. Особенно с момента трансформаций
Вообщем идея такая:
1) создаешь битмапдата 3x3 (почему не 2x2 обьясню ниже)
2) расчет деформации
Код:
// предусловие:
// {x1,y1},{x2,y2},{x3,y3} - координаты вершин рисуемого треугольниика
// {n1x,n1y},{n2x,n2y},{n3x,n3y} - координаты вершин в битмапдате 3x3
// m - матрица искомого преобразования
m = new Matrix();
var tmp=1/((n2x-n1x)*(n3x*n2y-n2x*n3y)-(n3x-n2x)*(n2x*n1y-n1x*n2y));
		m.tx=((x1*n2x-x2*n1x)*(n3x*n2y-n2x*n3y)-(x2*n3x-x3*n2x)*(n2x*n1y-n1x*n2y))*tmp;
		m.ty=((y1*n2x-y2*n1x)*(n3x*n2y-n2x*n3y)-(y2*n3x-y3*n2x)*(n2x*n1y-n1x*n2y))*tmp;
		tmp=1/(n2x*n1y-n1x*n2y);
		m.c=(n2x*x1-x2*n1x-m.tx*(n2x-n1x))*tmp;
		m.d=(n2x*y1-y2*n1x-m.ty*(n2x-n1x))*tmp;
		tmp=1/n1x;
		m.a=(x1-m.c*n1y-m.tx)*tmp;
		m.b=(y1-m.d*n1y-m.ty)*tmp;
Ну и собственно отрисовка треугольника с градиентной заливкой
Код:
// предусловие:
// m - матрица посчитаная выше
// map - битмапдата 3x3
// surface - MovieClip для рисования
		surface.beginBitmapFill(map, m, true);
		surface.moveTo(x1, y1);
		surface.lineTo(x2, y2);
		surface.lineTo(x3, y3);
		surface.endFill();
Дальше т.к. рисовать надо четырехугольник, код приведенный выше надо вызывать 2 раза.
Теперь по поводу размера битмапки 3x3. В формулах битмаповые координаты s1x,s1y,... стоят в знаменателе и чтобы избежать деления на ноль, лучше сместить все координаты на 1. Т.е. битмапка для заливки должна быть примерно такая:

Знаю написано довольно скомкано, если будут вопросы - спрашивай

да, чуть не забыл. Формулы которые я привел выглядят довольно пугающе, но есть еще вариант по проще (содрал его не помню у кого). Работает он чуть медленее но зато выглядит красивше
Код:
                      m = new Matrix();
                      tm = new Matrix();
		var _w=1/3;
		var _h=1/3;
		m.tx = n1x;
		m.ty = n1y;
		m.a = (n2x-n1x)*_w;
		m.b = (n2y-n1y)*_w;
		m.c = (n3x-n1x)*_h;
		m.d = (n3y-n1y)*_h;
		tm.a = (x2-x1)*_w;
		tm.b = (y2-y1)*_w;
		tm.c = (x3-x1)*_h;
		tm.d = (y3-y1)*_h;
		tm.tx = x1;
		tm.ty = y1;
		m.invert();
		m.concat(tm);


Последний раз редактировалось undefined; 03.12.2007 в 13:39.
Старый 03.12.2007, 13:43
aQuestion вне форума Посмотреть профиль Найти все сообщения от aQuestion
  № 23  
Ответить с цитированием
aQuestion
Banned
[+5 08.09.07]
[+4 17.01.08]
 
Аватар для aQuestion

Регистрация: Dec 2005
Сообщений: 556
Цитата:
Сообщение от undefined
Теперь по поводу размера битмапки 3x3. В формулах битмаповые координаты s1x,s1y,... стоят в знаменателе и чтобы избежать деления на ноль, лучше сместить все координаты на 1.
может попробовать координаты "центров" пикселей, нечто вроде типа 0.5, 1.5...

Старый 03.12.2007, 13:49
undefined вне форума Посмотреть профиль Отправить личное сообщение для undefined Найти все сообщения от undefined
  № 24  
Ответить с цитированием
undefined

Регистрация: Oct 2006
Сообщений: 2,283
согласен, в принципе должно работать. Кстати т.к. координаты вершин в битмапдате не меняются, формулы можно еще подсократить.

Старый 07.12.2007, 13:38
aQuestion вне форума Посмотреть профиль Найти все сообщения от aQuestion
  № 25  
Ответить с цитированием
aQuestion
Banned
[+5 08.09.07]
[+4 17.01.08]
 
Аватар для aQuestion

Регистрация: Dec 2005
Сообщений: 556
ещё по теме

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

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

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


 


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


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