[ Обновленные темы · Новые сообщения · Участники · Поиск · RSS ]
Результаты поиска
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
наконец-то разгадан формат ключа

Code
key[weight1,angle1,weight2,angle2,time,value]

имеются формулы:

Code
angle = atan(y/x)
    weight = x/(3*cos(angle))

Code
x = 3 * weight * cos(angle)
    y = 3 * weight * sin(angle)

Code
v = (t^3 * a) + (t^2 + b) + (t * c) + d

// рабочий код рисования сегмента между ключами [i] и [i+1] получились у меня (где data имеет key формат):

Code

                   P1.x := P[i].x + round((P[i+1].x-P[i].x)*cos(data[i][3])*data[i][2]/3);
                   P1.y := P[i].y + round((P[i+1].y-P[i].y)*sin(data[i][3])*data[i][2]/3);
                   P2.x := P[i+1].x - round((P[i+1].x-P[i].x)*cos(data[i+1][1])*data[i+1][0]/3);
                   P2.y := P[i+1].y - round((P[i+1].y-P[i].y)*sin(data[i+1][1])*data[i+1][0]/3);
            Canvas.PolyBezier([P[i],P1,P2,P[i+1]]);

Теперь попытаюсь сложить все в единую формулу...

Code
a = k1.time + (k2.time - k1.time) * cos(k1.angle2) * k1.weight2 / 3
b = k1.value + (k2.value - k1.value) * sin(k1.angle2) * k1.weight2 / 3
c = k2.time - (k2.time - k1.time) * cos(k2.angle1) * k2.weight1 / 3
d = k2.value - (k2.value - k1.value) * sin(k2.angle1) * k2.weight1 / 3

и подставлю значения t

Code
t = (time-k1.time)/(k2.time - k1.time)


 
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
Code
t:= (AnimTimer.Value - Key1[4]) / (Key2[4] - Key1[4]);

a := Key1[4] + (Key2[4] - Key1[4]) * cos(Key1[3]) * Key1[2] / 3;
b := Key1[5] + (Key2[5] - Key1[5]) * sin(Key1[3]) * Key1[2] / 3;
c := Key2[4] - (Key2[4] - Key1[4]) * cos(Key2[1]) * Key2[0] / 3;
d := Key2[5] - (Key2[5] - Key1[5]) * sin(Key2[1]) * Key2[0] / 3;
Result:=((t*t*t*a)+(t*t+b)+(t*c)+d);

не прокатило...

Code
      t:= (AnimTimer.Value - Key1[4]);

         a := Key1[5];
         b := sin(Key1[3]) * Key1[2] * 3;
         c := sin(Key2[1]) * Key2[0] * 3;
         d := Key2[5];

       Result:=((t*t*t*a)+(t*t+b)+(t*c)+d);

и это не прокатило...


 
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
Code
      t:= (AnimTimer.Value - Key1[4])/(Key2[4] - Key1[4]);

           a := Key1[5];
           b := Key1[5] + (Key2[5] - Key1[5]) * sin(Key1[3]) * Key1[2] / 3;
           c := Key2[5] - (Key2[5] - Key1[5]) * sin(Key2[1]) * Key2[0] / 3;
           d := Key2[5];

         Result:=(1-t)*(1-t)*(1-t)*a + 3*t*(1-t)*(1-t)*b + 3*t*t*(1-t)*c + t*t*t*d;

Прокатило!!!

Однако... глючит... так как t задан не верно


 
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
Для всех объектов без костей можно будет редактировать анимацию в 3DSMAX =) импорт работает!!!

Как вам?

cool

Прикрепления: 5500407.jpg (449.8 Kb)


 
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
Хм надо матрицу зеркалом изменить обратить.... А то в МАКСЕ все зеркально...

...

Перевернул, вроде верно теперь cool

Прикрепления: 3285527.png (225.4 Kb)


 
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
Список последних доработок, без которых релиза не будет:

1. Написание поиска координаты Y от функции Безье(X) (Охрененно сложная задача, т.к. нужно решать Кубическое уравнение и находить корень, который потом подставлять как параметр в Безье для Y)
2. Контроль редактирования элементов (чтобы Child и AnimTex нельзя было перемещать, т.к. матрицы у них нет)
3. Удаление Элемента из Анимации
4. Добавление свободного Элемента в Анимацию
5. Сохранение контейнера XAnimClipLibraty

Для Дополнения:
6. Экспорт Xom3D в 3DSMAX (есть только импорт)
7. Импорт Xom3D в XomView (есть только экспорт)


 
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
Вот функция которую мне надо написать... (получение Y от X Кривой Безье)

http://www.algorithmist.net/DegrafaCubicYatX/DegrafaCubicYatX.html


 
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
Quote (AlexBond)
1. Написание поиска координаты Y от функции Безье(X) (Охрененно сложная задача, т.к. нужно решать Кубическое уравнение и находить корень, который потом подставлять как параметр в Безье для Y)

Написал таки я эту функцию... Может кому поможет или пригодится кому нибудь, вот исходник:

Code

function findBezier(x,a1,b1,c1,d1,a2,b2,c2,d2:Single):Single;

    function BezierF(t,a,b,c,d:Single):Single;
    var
    t1:Single;
    begin
    t1:=(1-t);
    result:=t1*t1*t1*a + 3*t*t1*t1*b + 3*t*t*t1*c + t*t*t*d;
    end;

    function find(t1,t2,t3:single):single;
    var xdiv:single;
    begin
    xdiv:=BezierF(t2,a1,b1,c1,d1);
    if abs(xdiv-x)<0.001 then begin result:=t2; exit; end;
    if xdiv>x then
         result:=find(t1,(t1+t2)/2,t2)
         else
         result:=find(t2,(t2+t3)/2,t3);
    end;
begin
    result:=BezierF(find(0,0.5,1.0),a2,b2,c2,d2);
end;


 
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
Quote (Герыч)
а зачем рекурсией?)

Потому что это самый быстрый поиск, если сможешь быстрее (у меня в среднем 5-10 проходов), я только за!!!

Я не смог выделить из уравнения Безье каноническое Кубическое уравнение для применения поиска корней, а ты можешь?


 
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
Даёшь за XomView 2.6 Платиновый файл или Алмазный, иначе на даю XomView!!! cool

 
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
Список последних доработок, без которых релиза не будет:

1. Написание поиска координаты Y от функции Безье(X) (Охрененно сложная задача, т.к. нужно решать Кубическое уравнение и находить корень, который потом подставлять как параметр в Безье для Y)
2. Контроль редактирования элементов (чтобы Child и AnimTex нельзя было перемещать, т.к. матрицы у них нет)

3. Удаление Элемента из Анимации
4. Добавление свободного Элемента в Анимацию
5. Сохранение контейнера XAnimClipLibraty


 
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
3. Удаление Элемента из Анимации
4. Добавление свободного Элемента в Анимацию

5. Сохранение контейнера XAnimClipLibraty

Статистика:
7376 линий кода в XomLib файле wacko
2176 линий Xomview_2_6 surprised
Текущая Версия 2.6.5.2
Размер программы 840 кб.


 
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
Пока не увижу Алмазного Банера, Бету вылаживать не буду tongue

 
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
Нюююю sad , вы сначала сделайте баннер, чтобы я посмотрел чем оценится мой труд создания XomView'a wink

 
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
Список последних доработок, без которых релиза не будет:

1. Написание поиска координаты Y от функции Безье(X) (Охрененно сложная задача, т.к. нужно решать Кубическое уравнение и находить корень, который потом подставлять как параметр в Безье для Y)
2. Контроль редактирования элементов (чтобы Child и AnimTex нельзя было перемещать, т.к. матрицы у них нет)
3. Удаление Элемента из Анимации
4. Добавление свободного Элемента в Анимацию
5. Сохранение контейнера XAnimClipLibraty

cool

Бэта готова tongue


 
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
Quote (Duffman)
Ну дак чего же ты ждешь?) Выкладывай)



 
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
Нююю, sad
Тогда беты не ждите tongue


 
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
Я нигде не писал чтобы мне присуждали что либо, я просто писал чтобы сделали для файлов такого масштаба награду получше чем Золотой файл, просто сделали, но вам же сложно =)

Бету даю лишь Войтеку, а вы сидите и ждите Релиза, может я его сделаю в конце недели.
Он пока что будет пользоваться, тестировать и делать Туторы как пользоваться, на Английском. может в виде видео.
Я туторы делать не буду, нет времени на это.


 
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
План для релиза:

1. Импорт 3DS для XShape
2. Экспорт 3DS для XShape
3. Экспорт Xom3D в 3DSMAX (есть только импорт)
4. Импорт Xom3D в XomView (есть только экспорт)


 
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
Я в мечах делал следующее:
- эффект лазера
- текстуры лазера
- хромовую текстуру для ручки меча
- натягивание текстур на один меч

Войтек делал:
- анимацию мечей, через hex
- звуковые эффекты
- модели мечей
- компиляцию проекта.
- все остальное, что не относится к мечам


 
Поиск: