RFRONT - motion editor for DarkBasic(C) Дмитрий Корабельников 2004 Этот help недостаточно полный (как и сам редактор) но позволяет работать. Пытаясь разобраться в 3D, я подумал о том странном кошмаре, который творился в конце 80х с 2D графикой. (Он и сейчас такой) Вспомните Microsoft Basic (gwbasic, Quick Basic) с его "графическими режимами" SCREEN 1, SCREEN 2,... В Quick Basic был только 1 256цветный режим (320*200), остальные - CGA и EGA режимы, но кого сейчас обрадуют 16 цветов? Ни двойной буферизации, ни возможности сохранить или загрузить картинку, ни спрайтов, ничего. Те, кто владел 2D графикой, были в большом почете. Тогда и квесты были такими интересными ... Теперь существует множество стандартных форматов 2D картинок, множество библиотек для вывода их на экран (Осталось только их найти. Совет 1: См документацию Microsoft по 2D графике.) И тут я вдруг подумал: что если нынешняя "сверхсовременная" 3D графика - всего лишь наспех созданная система, далекая от настоящего 3D так же, как CGA был далек от современных true color дисплеев ? Может быть, формат .X - это тот же кривой, наспех созданный, занимающий много места (неупакованные байты) формат BMP, но только для 3D ? (Совет 2: См документацию по .BMP. См документацию по .X Что-то очень похожее, не правда ли? По уровню глупости) И тут я вдруг многое понял про 3D. Предупреждение: Предлагаемый исходный код DBA работает только в DarkBasic Classic 1.13 (с поддержкой memblock и DLL) DarkBasic Pro имеет другой внутренний формат mesh. Команда CHANGE MESH в DBPro возможно работает с ошибками (например, исчезает текстура на объекте после CHANGE MESH) Пожалуйста, проверьте работу последних версий компилятора DBPro. Тем не менее, X файлы, созданные в RFront, грузятся в DBPro. 1] Выберите модель для анимации при помощи мыши. Не выбирайте *_m1.x ... *_m4.x файлы. Эти файлы создаются редактором при работе и не могут редактироваться повторно. Нажмите Enter или F5 для загрузки модели. 2] Появляется примерно такая картинка. Можно вращать камеру вокруг модели при помощи Del, End. Три прозрачные голубые плоскости можно двигать стрелками и PgUp, PgDn. Плоскости используются для определения координат в 3D. Первые 3 числа слева вверху - координата точки пересечения плоскостей. 3] Нажмите F7 для входа в режим настройки. Теперь можно настроить скелет модели. Выберите мышкой зеленые кубики и установите их при помощи клавиш 1-6. Если Вы не уверены, что куб стоит в правильном положении, просто разверните камеру, используя Del, End. 4] Так примерно выглядит скелет модели. 5] Используя стрелки поднимите горизонтальную плоскость слегка под уровень рук и зафиксируйте координату, нажав F2. Теперь поднимите плоскость чуть выше рук и нажмите F3. Сохраните законченный скелет клавишей F1. Вернитесь обратно в режим анимации, нажав F7. 6] Теперь выберите мышью любую точку вращения модели. Например, плечо. Вращайте клавишами 1-6. 7] Выберите другую точку вращения. Таким образом, можно создать любую форму. Но не крутите слишком сильно. Если выбрать центральную точку (живот), то удерживая клавишу Shift, можно вращать модель целиком. Можно также двигать модель вверх и вниз клавишами Q,W. Если Вы ошиблись, перезагрузите модель, нажав F5. 8] Предположим, Вы получили желаемую позу.
Теперь можно созранить позу в 1 из 4 файлов по клавишам F1-F4.
Например, для модели jenny.x сохраняются файлы jenny_m1.x, jenny_m2.x, jenny_m3.x, jenny_m4.x 9] Смотрите пример twoants.dba чтобы понять, как можно из поз сделать
анимацию.
Сначала в код нужно включить некоторые функции:
Создать сглаженную анимацию из поз. Эта функция использует линейное приближение, поэтому не пытайтесь с помощью одного вызова разворачивать руку модели на 90 градусов. Используйте больше поз(не 2) для сложных анимаций. (См _flip.dba)
Теперь о том, как выглядит вызов этих функций в основной программе.
Теперь главная часть: основной цикл
Еще один исходный код. Очень важной частью программы RFront является функция xsave, которая сохраняет модель в двоичном (не текстовом) .X формате. (Есть команда SAVE MESH в DarkBasicPro, но эта функция работает даже лучше). Посмотрите текст в _xsave.dba Эта функция имеет возможность не сохранять нормали, что делает .X файлы в 2 раза меньше без потери ценной информации. Продолжение следует (Наверное). До свидания! |