четверг, 23 декабря 2010 г.

GOD DAMN YOU, MAX SCRIPT!!!! SHIT!!!

Сцуко, нахрен разработчиков 3DS MAX в биореакторы, блеать!!!111одинодин

Весь день угрохал на скелетную анимацию. НЕ РАБОТАЛА И ВСЁ! И не понятно в чём дело! Ведь я прекрасно знаю как делать скелетку! О_О <-- это какраз больше всего и бесит!

И, хвала великому Ктулху, я СДЕЛАЛ ЭТО : D В чём фишка была - ? Неет, вот нихрена, не я на этот раз накосячил!

Экспортёр у меня написан на MAXscript-е.

Вначале была такая логика работы: прохожусь по всем объектам сцены, если класс объекта == "кость" то в массив костей добавляем, если объект - проверяем, есть ли у него скиннинг. Если есть скиннинг, то этот объект экспортим (ну там ещё куча проверок и т.п.)

всё это в таком цикле:

for obj in objects do
{
БЛА БЛА БЛА
}

всё работало отлично на шарпе.

А вот когда начал портировать на С++, я какбы всё оптимизирую, в том числе и экспортёры. Переписал с нуля и собсно привнёс новую логику работы:

for obj in selection do
{
БЛА БЛА БЛА
}

тоесть экспортить так можно будет ВЫДЕЛЕННЫЙ объект и ВЫДЕЛЕННЫЕ кости, это удобно ведь!

Вот и всё, в ЭТОМ и проблема! for obj in selection do - в таком цикле ПОЧЕМУТО совершенно другие индекы у костей! В следствие чего и иерархия костей экспортится КРИВАЯ, из за чего и в движке жепЪ.

Почему так? - х.з. Я специально в цикле for obj in objects do вывел все объекты сцены и не был удивлён - вывелись все и только те, которые я выбирал при экспорте. Тоесть в количестве объектов внутри objects и selection разницы нет ни какой. Тогда ПОЧЕМУ индексы у костей в selection не верные? Для меня лично загадка.

Ффф, вынос мозга.

1 комментарий:

  1. Как индексы определяешь? Если по индексу элемента в массиве, то спешу обрадовать - $selection хранит элементы в порядке их выделения.
    Вообще если меш, скелет и анимация не будут хранить имён костей - Аллах покарает тебя! :E

    ОтветитьУдалить