Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript (http://www.flasher.ru/forum/forumdisplay.php?f=5)
-   -   skew через матрицы? (http://www.flasher.ru/forum/showthread.php?t=59530)

MixailV 18.06.2004 12:53

skew через матрицы?
 
Можно ли исправить допустим через Flasm байт код функции таким образом, чтобы трансформацию клипа делать через матрицы (тем более что все трасформации в движке плеера через них и делаются...)

Dindin 19.06.2004 15:59

Прости, не совсем понятно - чего ты хочешь таким образом добиться?

MixailV 21.06.2004 11:31

Пытаюсь совместно с Deaf'ом (он свои 3D исходники кидал, наверное видели) сделать быстрый и шустрый 3D движок с "динамическим" текстурированием (когда положение текстуры можно задать с помошью координат для каждой вершины полигона). Так вот все наши исходники достаточно громоздки (хотя добились уже хороших результатов), а вся проблема связано в том, что приходится делать кучу трансформаций. К примеру чтобы реализовать программно Skew приходиться делать _rotation + _xscale + _yscale и кучу всего... Хотя движок флэш плеера все равно все преобразования над клипом делает с помощью всего лишь одной матрицы трансформаций (как в программном градиенте...). Как бы изменить p-код SWFа, чтобы нужные параметры передавать непосредственно в матрицу для трансформации клипа??? Может это все таки реально??? Это сократит кучу вычислений и кучу отдельных трансформаций!!! Пожалуйста подскажите!!!

Dindin 21.06.2004 13:01

http://www.andre-michelle.com/

DistortImage class

silin 21.06.2004 21:11

Цитата:

Хотя движок флэш плеера все равно все преобразования над клипом делает с помощью всего лишь одной матрицы трансформаций
можно поподробнее : откуда информация

Елё 22.06.2004 00:30

Цитата:

Оригинал написал(а) silin

можно поподробнее : откуда информация

Ну иначе было бы странно... Врядли можно себе представить плэйер который каждую точку отдельно сначала поворачивает, потом "скюит", а потом смещает

Наверняка они внутрях матрицами пользуются
И жаль что ничего о внешнем интерфейсе к этим матрицам не известно

Nox Noctis 22.06.2004 03:02

всё в общем кажется логично, только
Цитата:

Оригинал написал(а) Елё
Ну иначе было бы странно
вот здесь вы, сударь, совершенно напрасно применяете сослагательное наклонение :) кто-то обещал что будет не странно?

в любом случае интересно чем вызвано такое категорическое высказывание

Dindin 22.06.2004 10:09

Господа, а Вы в курсе, что плеер просто демонстрирует последовательность имэджей, а трансформирует в эту последовательность компилятор?

MixailV 22.06.2004 11:54

Посмотрел ссылку http://www.andre-michelle.com/
(которую дали выше), посмотрел внутренности - почти один в один как ув наших исходниках, тока через классы.... И тока не так шустро как у нас! :) :) :)
В общем этот Андре ниче нового и не придумал, и матрицы он не юзает :( А я надеялся что он сделал реальный прорыв во флэш :)
Для Dindin'a по поводу фразы "Господа, а Вы в курсе, что плеер просто демонстрирует последовательность имэджей, а трансформирует в эту последовательность компилятор?" - ага, особенно если этой последовательности вообще нет при использовании читого экшена!!! (и даже если у тебя обычная анимация, не через экшн, то нифига это не последовательность имэджей, а просто компилятор всю анимацию (все твины и т.п.) разбивает на фрэймы, и для каждого клипа в каждом фрейме запоминаются его трансформации (scale, rotation и т.п.)!

Dindin 22.06.2004 12:23

Цитата:

Оригинал написал(а) MixailV
Посмотрел ссылку http://www.andre-michelle.com/
(которую дали выше), посмотрел внутренности - почти один в один как ув наших исходниках, тока через классы.... И тока не так шустро как у нас! :) :) :)

У нас - это у кого? И что Вы понимаете под словом "шустро", глубокоуважаемый изобретатель велосипеда?
Цитата:

В общем этот Андре ниче нового и не придумал, и матрицы он не юзает :( А я надеялся что он сделал реальный прорыв во флэш :)
Чувствуется, что для человека прорыв в любой области навсегда связан с матрицами. А может Вы просто поклонник Нео? Или напротив Агента Смита?
Цитата:

Для Dindin'a по поводу фразы "Господа, а Вы в курсе, что плеер просто демонстрирует последовательность имэджей, а трансформирует в эту последовательность компилятор?" - ага, особенно если этой последовательности вообще нет при использовании читого экшена!!! (и даже если у тебя обычная анимация, не через экшн, то нифига это не последовательность имэджей, а просто компилятор всю анимацию (все твины и т.п.) разбивает на фрэймы, и для каждого клипа в каждом фрейме запоминаются его трансформации (scale, rotation и т.п.)!
Польщён, что мне оказывается подобное внимание, и могу только порекомендовать сцылочку. Итак, спецификация формата swf от Macromedia, PDF

ЗЫ И не морочьте нам голову.

MixailV 22.06.2004 15:05

Не хочу спорить, не к чему это, жаль что по теме ниче не посоветовали...
А понятие "шустрее" - значит меньше ресурсов компа съедает, все таки при большом кол-ве полигонов это играет огромную роль!
А матрицы - это хорошо ;) , особенно когда Нео их конкретно подгибает под себя :) :) :)
Спецификацию я читал, но все таки фраза "что плеер просто демонстрирует последовательность имэджей" вызывает такую добрую и прияную улыбку, особенно когда "трансформирует в эту последовательность компилятор" :)
Ну лана, нет помощи - ну и не больно то хотелось...

Dindin 22.06.2004 16:09

Цитата:

Оригинал написал(а) MixailV
Не хочу спорить, не к чему это, жаль что по теме ниче не посоветовали...
А понятие "шустрее" - значит меньше ресурсов компа съедает, все таки при большом кол-ве полигонов это играет огромную роль!
А матрицы - это хорошо ;) , особенно когда Нео их конкретно подгибает под себя :) :) :)
Спецификацию я читал, но все таки фраза "что плеер просто демонстрирует последовательность имэджей" вызывает такую добрую и прияную улыбку, особенно когда "трансформирует в эту последовательность компилятор" :)
Ну лана, нет помощи - ну и не больно то хотелось...

1) по теме посоветовали. Просто ты этого не понял.
2) какими критериями меряется загрузка системы? (с учётом того, что грузит систему не скрипт, а виртуальная машина). Кроме того, хотелось бы посмотреть на Ваш расчудесный код :)
3)Что именно вызывает у Вас добрую улыбку? С чем именно Вы не согласны? С тем, что при компиляции мувиклипа все графические изображения (в том числе и анимация) преобразовываются в последовательность кадров? В таком случае - перечитайте спецификацию еще раз.

И кроме того, по поводу "не очень-то и хотелось" - складывается отчётливое ощущение, что вопрос был задан с одной конкретной целью - повыпендриваться.

Whatsername 22.06.2004 20:25

Цитата:

Оригинал написал(а) Dindin

Кроме того, хотелось бы посмотреть на Ваш расчудесный код :)

вот исходник MixailV. Мне, кстати, дружбан скнул этот линк, как качественной тридешки во флеше... и я с ним согласен.

silin 22.06.2004 21:05

наш ответ Чемберлену ;)

Dindin 23.06.2004 08:55

:D:D За что так животинку-то?

Dindin 23.06.2004 09:04

Дело в том, г-н MixailV не осознаёт, как мне кажется, чёткой разницы между объектно-ориентированным и процедурным программированием - это раз. И не понимает,разницы между конечным продуктом и кодом вообще :)

MixailV 23.06.2004 09:41

to Dindin: не навижу спорить, но так же немогу равнодушно все это читать - "как мне кажется, чёткой разницы между объектно-ориентированным и процедурным программированием" - может быть, но исходник, который вы видели (уже давно не похож на то, что есть счас..., хотя о чем речь, я же просто попонтиться решил, может у меня за душой и нет ничего ;) )
"И не понимает,разницы между конечным продуктом и кодом вообще" - может я и не прав, но конечный продукт, в особенности его качество, ОЧЕНЬ сильно зависит от его изначальных составляющих (частности даже простой 3D движок сильно зависит от реализации текстурированного полигона)

to Silin: ответ хорош конечно, но когда уже есть образец, в котором представлена реально работающая идея - http://flasher.ru/src/getfile_3226/ (от моего коллего DEAF'а) - то почему бы её не попользовать, не правдали принцип (см. исходники) ну очень похож :) , хотя бывает так, что одинаковые задачи приводят к похожим решениям...

Всем спасибо за здоровую критику, очень ценю, это всегда полезно! Будем с DEAF'ом как говориться "вариться в собственном соку" :) :)

Dindin 23.06.2004 12:49

Цитата:

может быть, но исходник, который вы видели (уже давно не похож на то, что есть счас...
Исходник - в студию...
Цитата:

конечный продукт, в особенности его качество, ОЧЕНЬ сильно зависит от его изначальных составляющих
Кто бы спорил, но покажите нам, пожалуйста, КОНЕЧНЫЙ ПРОДУКТ, а не его составляющие.
И, собственно говоря, принципиально нового я в вашем исходнике не увидел ничего:
1) матричная трансформация объекта - стандарт
2) алгоритм определения видимости граней не реализован - всё вручную
3) новых решений в текстурировании здесь тоже нет.
Цитата:

Будем с DEAF'ом как говориться "вариться в собственном соку"
Если уж есть такое настойчивое желание "повариться в собственном соку" зачем же было постить на форум?

nuran 24.06.2004 08:54

Цитата:

Оригинал написал(а) Dindin
http://www.andre-michelle.com/

DistortImage class

Ха Ха

nuran 24.06.2004 08:57

Цитата:

Оригинал написал(а) silin
наш ответ Чемберлену ;)
ХиХиХи, бедный вася :D

Мой ответ :D
http://nuran.org/lab/flash/0010.htm
http://nuran.org/lab/flash/0011.htm
http://nuran.org/lab/flash/0012.htm
http://nuran.org/lab/flash/0013.htm
http://nuran.org/lab/flash/0020.htm
http://nuran.org/lab/flash/0031.htm
http://nuran.org/lab/flash/0032.htm

http://nuran.org/lab/flash/0007.htm

далекоооо не полный список ...

nuran 24.06.2004 09:06

Кстати, я сейчас занимаюсь построением очень приличного для flash 3d движка. Занимаюсь этим уже примерно 6 месяцев, и думаю он будет самым навороченным из всех мной виденных (а видел я много, я вас уверяю).

Что там будет реализовано (примерно):
Камеры (Free & Target), движение камер по кривым, NURBS, системы частиц, различные примитивы (штук 30), несколько разных источников освещения, приличный класс для работы с цветом, возможность проецирования в несколько (на сколько хватит мощности PC) ViewPort'ов ... много всего, в том числе все возможные текстурирования, градиентные заливки, сортировки и пр., online интерфейс с возможностью сохранять свои сцены на сервере и потом загружать их, плагин для 3d max'a, собственный формат файлов.

Так что вам товарищи до меня, как до Африки пешком.

nuran 24.06.2004 09:12

Многое, из того, что я перечислил - уже разработано ~ 40 классов.

Dindin 24.06.2004 09:22

Цитата:

Так что вам товарищи до меня, как до Африки пешком.
Ещё бы, ведь ты там, судя по всему, велосипед изобредаешь =)

ЗЫ насчёт "изобредаешь" - я опечатался, но потом понял, что очень в тему :D:D

Nox Noctis 24.06.2004 12:02

Цитата:

Оригинал написал(а) nuran
Так что вам товарищи до меня, как до Африки пешком.
малиновые штаны! четыре раза ку!

DEAFFF 24.06.2004 16:35

Вот и я
 
Сижу тут читаю. Че то мы этошли от темы. :) :) :)
А нам всего лишь нужна была ваша помощь. Сделать skew более быстрее. Хочу сказать такую вещь. Сделать skew с помощью матрицы преобразований - реально. И это будет самый быстрый способ. Я во всем поддерживаю моего коллегу MihailV.
Простой вопрос - анимация skew почему то возможна спомощью простого инструмента во Flash (т.е. когда делаешь tween анимацию) , а программно как это делается, неужели там проходят все операции - _rotation+_xscale+_yscale?
Простой ответ - матрица преобразований. И не надо нам парить!!!!

По поводу nurana хочу сказать:
Ну зашел я на твои ссылочки - и неувидел ничего нового или навороченного. Это все очень просто делается. А вот натянуть растровую текстуру ты как то не подумал. А это и есть основа 3D во Flash т.к. без этого далеко не уедешь.

Dindin 24.06.2004 17:32

Если вы хотели сделать Skew быстрее - вам указали ссылку на готовый класс. Но вы же, господа, начали низа что ни про что лажать совершенно незнакомых вам людей. Кроме того, лажать совершенно безосновательно. Меня лично больше всего задело именно это.

D12 24.06.2004 22:32

Вложений: 1
может я несовсем вклинился в тему (
тут у меня есть несколько примерчиков глумления над фотками ну или текстурами как вам будет удобно )

styx 24.06.2004 23:46

Sorry что не совсем в тему... Но мне тоже надо :) Есть много вставленных друг в друга клипов. У каждого свои __scale. Плеер ведь не обрабатывает их как цепочку растров - значит, он знает scale каждого относительно stage. И я хочу знать! Ещё раз сорри за вторжение - но, как мне кажется, это действительно ОДНА тема.

Елё 24.06.2004 23:56

Вообще scale разный бываетю Бывает _xscale, а бывает и _yscale ;)
Но что то средние можно получить при переводе
localToGlobal(p1) двух точек + отношение растояний между исходнями и результатом...

styx 25.06.2004 01:18

Цитата:

Вообще scale разный бываетю Бывает _xscale, а бывает и _yscale
Угу. Это я имел в виду под вторым _. А с остальным проблемы.

Основная: localToGlobal не выдаёт ничего разумного (отличного от 0) до тех пор, пока не нарисует экран... увы. Я на неё, собственно, и рассчитывал.
Может быть, я зря воду мучу - информация по шестёрке; семёрку пока не пробовал. Но - в момент создания клипа localToGlobal не работает... О, мысль возникла - к тому моменту _parent ведь создан - так можно использовать его координаты... Надо подумать :).

Вообще мне хотелось бы знать размер клипа - потому как идея в том, что строится фрактальная структура (в каждый ролик вложено несколько экземпляров его же со своими массштабами/поворотами) - чтобы не продолжать вложение до бесконечности. То есть - хочется знать - где я - что со мной (каков реальный размер каждого клипа на stage). При этом, разумеется, в каждом ролике минимум ДВА инстанса (о, ужас, что я делаю с русским языком!) - и в результате появляются ТЫСЯЧИ объектов - расчёт математики для которых... сами понимаете как сказывается на производительности.

Но это всё пол-беды.

Дальше это всё анимируется. Соответственно размер каждого клипа меняется за счёт изменения масштаба родительского клипа - и если размер его становится выше предела детализации, то приходится прорисовывать его дочерние элементы...И считать это для всех 2^15 объектов... Невозможно.

Глупый вопрос, наверно. Но, блин, сам-то флэш всю эту тучу объектов просчитывает без тормозов!!! А мне нужна 1 копейка из этих расчётов, чтобы убрать 95% своей математики.

Any ideas?

P.S.:
Прошу прощения за отсутствие исходников и прочих примеров. Очень не хочу их доработки :). Хочу оригинальную идею. Благо время, данное на разработку проекта, позволяет.

Nucer 25.06.2004 05:15

Я конечно вообще не в тему, но хочу спросить nuran'а, как ты реализовал определение видимости граней? В смысле видимости юзером? Просто пытаюсь сделать простенький движок...

MixailV 25.06.2004 10:32

to Dindin: лана, пободаемся еще раз :) В ссылке на готовый класс (image distortion) у чела все сделано вот так (основа, нет смысла весь код приводить):
v2.update = function () {
var v5 = Math.atan2;
var v7 = Math.sqrt;
var v12;
var v11;
var v9;
var v3;
var v6;
var v2;
var v4;
var v10;
var v13;
var v8;
this._x = this.p0.sx;
v11 = this._x;
v3 = this.p1.sx - v11;
this._y = this.p0.sy;
v9 = this._y;
v6 = this.p1.sy - v9;
v10 = v5(v6, v3);
v2 = this.p2.sx - v11;
v4 = this.p2.sy - v9;
v13 = v5(v4, v2);
v8 = (v10 - v13) / 2;
this._rotation = 57.29577951308232 * (-v8 + v10);
this._yscale = 100 * Math.tan(v8);
v12 = 70.71067811865474 / Math.cos(v8);
this.innerClip._xscale = (v7(v2 * v2 + v4 * v4) / v12) * this.t_width;
this.innerClip._yscale = (v7(v3 * v3 + v6 * v6) / v12) * this.t_height;
};

А теперь найди десять отличий (старый исходник DEAF'а):
x01 = x0-x1;
y01 = y0-y1;
x21 = x2-x1;
y21 = y2-y1;
alfa = Math.atan2(y01, x01)*180/Math.PI;
beta = Math.atan2(y21, x21)*180/Math.PI;
gama2 = (alfa-beta)/2;
delta = 45-gama2;
cosdelta = Math.cos(Math.PI/180*delta);
sindelta = Math.sin(Math.PI/180*delta);
this._rotation = alfa-90-gama2;
this._x = x1;
this._y = y1;
this._xscale = (cosdelta-sindelta)*100;
this._yscale = (sindelta+cosdelta)*100;
this.v._rotation = 45;
this.v._xscale = Math.SQRT(x21*x21+y21*y21);
this.v._yscale = Math.SQRT(x01*x01+y01*y01);
(здесь ниче не оптимизировано специально для наглядности..., если чуток подогнать, то будет фактически одно и тоже, что в верхнем исходнике)

Так вот с какого фига модный класс, на который ты указал, будет работать быстрее, и лучше?????? Нифига подобного!!!!


tpNucer: видимость полигона
vid = (x2-x0)*(y1-y0)-(y2-y0)*(x1-x0);
if (vid>0) {полигон видно} else {невидно}

MixailV 25.06.2004 11:00

Да и вообще мне не интересно кто что сделал и как сделал, меня интересовал только конкретный ответ на мой вопрос (см. название топика), на который так никто и не ответил.......

nuran 25.06.2004 11:57

Цитата:

Оригинал написал(а) Dindin
Если вы хотели сделать Skew быстрее - вам указали ссылку на готовый класс. Но вы же, господа, начали низа что ни про что лажать совершенно незнакомых вам людей. Кроме того, лажать совершенно безосновательно. Меня лично больше всего задело именно это.
К твоему сведению, это совсем не skew класс, а planar distortion. Если не знаешь о чём здесь люди толкуют - лучше помолчи.

Бред? Ну ну. Кто бы говорил.

Вы вообще тут кто собрались? Кто-нибудь что-нибудь понимает? Я про 3d и про всё остальное - геометрическое?

nuran 25.06.2004 12:00

Цитата:

Оригинал написал(а) MixailV
[b]Так вот с какого фига модный класс, на который ты указал, будет работать быстрее, и лучше?????? Нифига подобного!!!!/B]
Да не слушай ты людей, которые в этом ничего не понимают.

Они ведь только и могут - ссылаться на других. Это там про dindin, iLoveYou etc...

silin 25.06.2004 12:02

2MixailV
Цитата:

skew через матрицы?
Можно ли исправить допустим через Flasm байт код функции таким образом, чтобы трансформацию клипа делать через матрицы (тем более что все трасформации в движке плеера через них и делаются...)
трудно получить конкретный ответ на неконкретный вопрос,
тем более что вопрос-то по существу риторический:
байт код можно модифицировать солько угодно , но только до тех пор это остается понятным плееру,
т.е. для реализации этой идеи надо модифицирвать еще и плеер, что убивает саму идею на корню
и еще: введение подобных функций управления растрами дает несомненное удобство в кодировании,
но прирост производительности отнюдь не очевиден,поскольку 'движок флэш плеера все равно все преобразования над клипом делает с помощью всего лишь одной матрицы трансформаций '
(кстати откуда информация мы так и не услышали)

nuran 25.06.2004 12:03

Цитата:

Оригинал написал(а) Nucer
Я конечно вообще не в тему, но хочу спросить nuran'а, как ты реализовал определение видимости граней? В смысле видимости юзером? Просто пытаюсь сделать простенький движок...
Видимость в два проходя делается.
Первым проходом ты убираешь все грани, вершины которых расположены не по часовой стрелке, вторым проходом ты сортируешь все оставшиеся по z глубине.
Если используешь камеру, то z вычисляешь по направляющему вектору камеры.
У меня здесь, на flasher.ru лежит движёк, который реализует убирание граней и сортировку их, но без камеры.

Смотри здесь:

http://flasher.ru/src/getswf_2731_1/

Или качай его прямо отсюда:

http://flasher.ru/src/getfile_2731/

nuran 25.06.2004 12:05

Про часовую стрелку есть тоже тут, на flasher.ru в моём уроке:

http://www.flasher.ru/tutorial/viewtut.php?id=156

nuran 25.06.2004 12:08

Цитата:

Оригинал написал(а) MixailV
tpNucer: видимость полигона
vid = (x2-x0)*(y1-y0)-(y2-y0)*(x1-x0);
if (vid>0) {полигон видно} else {невидно}

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

nuran 25.06.2004 12:16

Для MixailV.

У меня ещё круче код. Там не нужно вкладывать картинку в несколько MovieClip'ов, не нужно её размещать как то определённо (ну там повернуть на 45 градусов, или отцетрировать или ещё как нибедь над ней извращаться).

У меня лежит один MovieClip в библиотеке.
Далее, где нужно воспользоваться этой текстурой мы пишем:

Код:

BuildOrthogonalTexture(имя символа в библиотеке, имя новой создаваемой текстуры).
Далее, где нужно натянуть её, пишем
Код:

DrawOrthogonalTexture(координаты трёх точек);
Самое прикольное, что он сам определяет все размеры исходного клипа, можно даже его растянуть по ширине или по высоте, результат не изменится, и не важно - отцентрирован он или нет. Я не говорю, что это что-то новое, но это очень удобно, для игр там и прочего - любые размеры текстуры.

Вот он есть здесь, но исходник я пока что не выкладываю, но можете взломать декомпилерром и посмотреть.

http://nuran.org/lab/flash/0007.htm

Если интересно конечно ...


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

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