Форум 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)

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, время: 03:15.

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