Это технический раздел на случай если что-то не запускается, не так работает или ещё какие-то проблемы. Если всё нормально, то лучше не тратить на него время и переходить сразу к следующему разделу Основы работы с программой
Самая новая версия программы всегда лежит по ссылке http://lodka3d.narod.ru/lodka3d-setup.exe в виде самораспаковывающегося rar-архива.
На главной странице сайта есть раздел "Новости". Туда пишется инофрмация обо всех новых версиях и новых возможностях которые появляются у программы.
Узнать какая версия программы у вас установлена, можно в пункте меню Menu->About.
Если программа не запускается, надо проверить, чтобы были установлены наиболее новые драйверы видеокарты. Так как если после запуска никакой информации не выводится, то скорее всего - это что-то с драйверами.
Если драйверы новые, то надо попробовать запустить программу с параметром '/savemode', это режим в котором она ведёт лог своих действий, каждый раз записывая в файл 'log.txt', что она сделала. Это текстовый файл, который помещается в папку с программой. Его можно посмотреть самому в блокноте, или послать автору программы, чтобы он попытался найти проблему.
Если на закладке Model видны не все кнопочки, то надо изменить размер панели с ними, до их появления.
Если на закладке Primitives невидна кнопка Create, то надо увеличить размер окна программы по вертикали.
На главной странице сайта в разделе новости есть ссылки почти на все выходившие ранее версии программы.
В настройках вызываемых клавишей F11 на закладке All есть пункт Max FPS который позволяет поставить максимально допустимое число кадров в секунду если видеокарта слишком греется можно понизить этот параметр. Однако если он будет слишком низким, то камера может начать двигаться не плавно, а скачками.
Допустим не открывается или не сохраняется какая-то модель, вместо этого выдаётся какое-либо сообщение об ошибке на экран. Либо модель открывается и сохраняется, но с ошибкой. Например, без текстур. Или просто после какого-то действия в программе возникает ошибка. Что в такой ситуации можно сделать?
Обязательно указывайте версию программы! Лучше всего, чтобы она была самой новой, так как возможно, там эта ошибка уже исправлена.
Посмотреть флеш-уроки, повторяя то, что там делается, - это наверное самый простой способ освоить азы работы с программой.
Уроки ориентированы на начинающих, но может и те, кто давно пользуется программой, найдут для себя что-то новое.
Уроки расположены по адресу: http://lodka3d.narod.ru/flashlessons/index.html.
Далее:
LMB - клик левой кнопкой мыши ( left mouse button ).
RMB - клик правой кнопкой мыши ( rigth mouse button ).
CMB - клик средней кнопкой мыши ( center mouse button ).
Mouse Wheel - приблизить/удалить камеру.
LMB - вращать камеру.
LMB+Shift - выделить точку или треугольник. Можно выделять
области.
RMB+Shift - снять выделение с точки или треугольника. Можно выделять
области.
CMB+Shift - выделить всё/снять выделение со всего.
CMB - установить фокус камеры.
LMB+Ctrl - двигать выделенные точки мышью.
СMB+Ctrl - масштабировать выделенные точки мышью.
RMB+Ctrl - вращать выделенные точки мышью.
F1 - переключать режим точек и режим треугольников.
F2 - работаем только с видимыми точками и треугольниками, или со
всеми насквозь.
F3 включён - Shift+LMB - режим установки точек.
F3 включён - Shift+RMB - разделить треугольник в точке клика.
F3 включён - Shift+Ctrl+LMB - разделить треугольник по ближайшей
к точке клика грани.
F4 - включить/выключить редактор текстуры.
F5 - показать/спрятать сетку текущего меша.
F5+Shift - показать/спрятать сетку всей модели.
F6 - спрятать/показать точки.
F8 - поставить точку возврата ( Undo ) в ручную.
Escape+Shift - спрятать/показать основную панель.
Ctrl+Z - возврат на одно действие ( Undo ).
Ctrl+Alt+Z - повтор ( Redo ).
Ctrl+N - новая модель.
Ctrl+O - открыть файл.
Ctrl+Alt+O - добавить из файла.
Ctrl+S - сохранить в файл.
Ctrl+1, Ctrl+2, Ctrl+3 - блокировать перемещение точек по осям
X, Y, Z соотвeтcтвенно.
Shift+1, Shift+2, Shift+3 - выбрать одну из осей вращения
X, Y, Z вокруг которых можно вращать точки мышью.
В редакторе текстуры:
LMB, CMB - двигать текстуру.
LMB+Shift - выделить текстурную координату. Можно выделять
области.
RMB+Shift - снять выделение с текстурной координаты. Можно выделять
области.
CMB+Shift ( клик ) - выделить всё/снять выделение со всех текстурных
координат.
LMB+Ctrl - двигать выделенные текстурные координаты мышью.
СMB+Ctrl - масштабировать выделенные текстурные координаты мышью.
RMB+Ctrl - вращать выделенные текстурные координаты мышью.
LMB на рамке - двигать этот край рамки.
CMB на рамке - двигать всю рамку.
CMB+Shift ( двигать ) - выделить новую область рамки.
Mouse Wheel - приблизить/удалить камеру.
F3 включён - LMB - рисовать на текстуре цветом выбранным на
закладке материалов, кнопкокой Select color.
F3 включён - RMB - пипетка. Получить цвет текстуры в точке клика.
В списках элементов
F2 - переименования элемента, если он имеет имя.
CMB - установить фокус камеры на этот элемент.
В окошках редактирования вещественных чисел:
Mouse Wheel - увеличить уменьшить на 1 .
Mouse Wheel +Shift - увеличить уменьшить на 10 .
Mouse Wheel +Ctrl - увеличить уменьшить на 0.1 .
Mouse Wheel +Ctrl +Shift - увеличить уменьшить на 0.01 .
Mouse Wheel +Alt - увеличить уменьшить на 0.001 .
Mouse Wheel +Alt +Shift - увеличить уменьшить на 0.0001 .
Чтобы понять значения кнопки, нужно попробовать понять что на ней изображено, попытаться сориентироваться по всплывающим подсказкам, возникающим при наведении на них мышью, воспользоваться методом тыка и читая разделы этой справки начинающиеся на Описание кнопок ....
Mesh ( меш ) - модель. Отдельная полноценная модель. Мешей в файле может быть много. Например, один меш - нормальная машина, вторая - чуть чуть разбитая, третья - сильно разбитая, и т. д. Таким образом переключая в игре меши, можно быстро менять вид машины.
Points ( поинты ) - точки из которых состоит меш. Каждый меш содержит свой набор точек.
Texture Coords - текстурные координаты. Каждый меш содержит свой набор текстурных координат. Служат для отекстуривания модели.
Face или Face group ( фэйс или фэйсгруппа ) - Один элемент меша. Содержит набор треугольников Tirangles и имеет свою текстуру.
Tirangles - треугольники. Каждый треугольник состоит из ссылок на три точки в Points и на три текстурные координаты, которые таким образом и образуют отекстуренный треугольник. Таким образом каждая точка может участвовать в нескольких треугольниках, что гарантирует отсутствие дырок.
Создаём новый объект. File->New ( Clear all ). При этом всё что есть очищается.
Далее нужно создать один меш Model->Mesh->Add, и выбрать его кликом мыши.
А также создать в нём один фэйс. Model->Face->Add и также выбрать его.
Теперь можно добавлять точки, текстурные координаты и треугольники.
Чтобы каждый раз не делать всё вышеперечисленное можно воспользоваться опцией File->New model
Помимо создание меша и фэйса ещё также полезно создать хотя бы один материал. Material->New, и выбрать его в созданном фэйсе Model->Face->Select material. Тогда к этому фэйсу будет применяться именно этот материал.
Вообще хотя бы один материал должен быть всегда, но если его по каким-то причинам нет, то создаётся он именно так.
Подобным вышеописанному образом можно создавать и другие фейсы, меши, материалы.
Модель очищается пунктами меню New ( Clear all ) и New model.
New ( Clear all ) - очищает все структуры программы, удаляет все меши со всеми фэйс-группами, скелет и физику, из материалов оставляет один, а New model - очищает только модель, удаляя все меши, и создавая один Меш, с одной фэйс-группой и если нет ни одного материала, то создаёт и его, таким образом выполняя рутину перед началом работы. Скелет и физика при этом не удаляются. Чтобы быстро удалить физику и скелет нужно выбрать в них Root'ы и нажать на кнопку Delete. Чтобы быстро очистить материалы нужно нажать на кнопку Materials->Delete удерживая клавишу Ctrl, тогда все не используемые материалы будут удалены.
Undo и Redo - это возможность двигаться по истории создания модели на шаг назад или вперёд. Работает примерно как и в других программах. Выполняется нажатиями клавиш Ctrl+Z и Ctrl+Alt+Z соответственно. Либо через меню Menu->Edit->Undo и Menu->Edit->Redo.
Undo не работает с физикой и материалами, но для материалов есть небольшая замена Undo, со скелетами работает частично, а с моделями должен всегда.
Возможно иногда Undo может не работать при некоторых перемещениях точек мышью или через окошки. Это недоработка. Просто хорошее, не тормозящее Undo сделать сложно. На всякий случай принудительно сохранить Undo можно кнопкой в панели над редактором или клавишей F8.
Частично заменить Undo при работе с текстурами материалов можно путём копирования текстуры в буфер обмена. Для того, чтобы потом можно было вставить её обратно.
Примитивы - это некие элементарные объекты типа куб, шар, цилиндр, но есть и более сложные типа лестница или звёздочка. С них удобно начинать моделирование чего либо.
Примитивы находятся на закладке Primitives. Они генерируются программой на лету по заданным параметрам. Общие для всех параметры - это положение Primitives->Options->Position, масштаб Primitives->Options->Scale и ротация Primitives->Options->Rotation. Ротация задаётся углами Эйлера. То есть поворот вокруг оси X, потом поворот вокруг оси Y, потом поворот вокруг оси Z. Последовательность поворотов должна быть именно такой, потому, что иначе может получиться другое положение. У окошка задания положения есть всплывающее меню, через которое можно задать положение фокуса камеры, или вставить положение из буфера обмена.
Чтобы посмотреть в каком положении окажется сгенерированный объект нужно поставить галочку Primitives->Preview, и тогда появится трёхцветный куб. Красная его грань направлена вдоль оси X, синяя вдоль Y и зелёная вдоль Z. Меняя положение, ротацию и масштаб, мы меняем положение, ротацию и масштаб куба, и таким образом можем видеть в какой позиции будет сгенерирован примитив, после нажатия на кнопку Primitives->Create.
Если в списке типов примитивов Primitives->Type выбран какой-то объект, то он появится в центре куба, в случае, если это возможно.
Чтоб выделить точки/треугольники создаваемых примитивов нужно поставить галочки на опции Primitives->Options->Select Points и Primitives->Options->Select Triangles, соответственно.
Помимо основных параметров примитивов есть и дополнительные. Они показываются в зависимости от того какой примитив выбран в Primitives->Type.
Если вам не понравился созданный примитив, можно отменить его создание через Undo, нажав Ctrl+Z и сделать какой-нибудь другой.Если у вас есть интересные алгоритмы генерации примитивов можете мне их прислать, и я попробую их вставить. Язык программирования - Паскаль. Если вы считаете, что программе не хватает какого-то очень важного примитива - пишите, подумаем.
Для просмотра сетки модели можно нажать на нопку F5 или сделать это через меню Edit->View model as lines. В результате текущий меш будет показан в виде сетки. Если надо, чтобы не текущий, а все меши показались в виде сетки, нужно нажать F5+Shift.
Чтобы выйти из режима показа сетки, нужно ещё раз нажать F5 или F5+Shift.
Если надо спрятать выделенные точки, чтобы визуально оценить модель или по другим причинам, можно воспользоваться кнопкой F6.
Фокус камеры - это точка, на которую камера смотрит.
Фокус камеры нужен не только для удобства просмотра, но и на него можно поставить точку относительно которой можно вращать и масштабировать точки User point. А также его положение можно вставлять в Primitives->Position, через всплывающее меню.
Ставить фокус можно :
Вращение камеры осуществляется вокруг её фокуса путём нажатия левой кнопкой мыши на экран и движения в нужную сторону. Вверх/вниз можно сдвинуть камеру не больше чем на 180 градусов, так как иначе, камера окажется вверх ногами.
Приближение/отдаление камеры осуществляется вращением колеса мыши. При этом фокус должен быть на экране, а не на каком нибудь окошке. Фокус на экран устанавливается путём кликом по нему.
Добавление новых точек/треугольников можно осуществить
Если модели никакой нет, то проще всего начать с создания примитивной
плоскости размером 2 на 2 и использовать её как холст.
Primitives->Type->Plane.
Primitives->Type->Parts1 - 2
Primitives->Type->Parts2 - 2
Primitives->Type->Create
Включаем режим добавления точек/треугольников кнопкой F3. И удерживая кнопку Shift начинаем кликать мышью по созданной плоскости левой кнопкой мыши. В точках клика начинают появляться точки.
Если удерживая Shift мы будем кликать правой кнопкой мыши, то треугольники по которым мы кликаем будут разделяться в точке клика на три части. При этом текстурная координата новой точки будет рассчитана так, чтобы отекстуренность треугольника сохранилась неизменной.
Если же кликать левой кнопкой мыши удерживая Shift и Ctrl одновременно, то будет найдена ближайшая к точке клика грань, после чего она будет разделена в точке ближайшей к точке клика. Отекстуренность при этом также сохранится.
Таким образом если где-то в модели не хватает полигонов, то их можно довольно легко добавить, без необходимости переотекстуривать модель.
Кнопкой Clone можно клонировать сразу все выделенные точки. Новые точки после этого помечаются, а со старых пометка снимается. После рекомендуется сместить клонированные точки на новые позиции, чтобы они не сливались с их предками.
Кнопкой Model->Points->Insert тоже можно вставлять точки вводя их координаты от руки.
Кнопками деления треугольников Model->Triangles->Subdivide each of selected triangles to 3 parts и Model->Triangles->Subdivide each of selected triangles to 4 parts можно разделить один выбранный треугольник на 3 и 4 соответственно. Деление происходит ровно по центру треугольника или по центру его граней. Кнопкой Model->Triangles->Subdivide 2 selected triangles to 4 triangles можно разделить два выбранных СМЕЖНЫХ треугольника на 4 части по центру смежной грани. Иногда бывает так, что треугольники только кажутся смежными, а на деле их точки не совпадают. Тогда можно воспользоваться опцией Model->Points->Snap selected points together, которая позволяет объединить выбранные точки в одну. Либо опцией Model->Points->Combine nearest points, которая позволяет объединить близлежащие точки.
Все операции с треугольниками проводятся только через точки из которых они состоят. Снимаем выделение со всех точек. Model->Points-Deselect. Выделяем точки только выделенных треугольников Model->Triangles->Select points of selected tirangles. И двигаем/вращаем/масштабируем их как угодно, треугольники будут изменяться в соответствии с перемещениями точек.
Манипуляции над группами выделенных точек производятся в окошке Model->Points->All. Ставим на него мышь и вращаем её ролик ( либо нажимаем кнопки Up или Down ). При вращении точки будут соответственно двигаться/вращаться/масштабироваться. Совместно с вращением колеса мыши можно использовать клавиши :Выделяем нужные точки.
Чтобы сработал алгоритм преобразования все выделенные точки должны иметь возможность быть проецируемыми не перекрывая друг друга на одну из плоскостей X, Y, Z или плоскость камеры. Плоскость камеры - это наверное самый наглядный вариант. Так как её можно всегда повернуть так, чтобы точки правильно смотрелись.
Жмём на Model->Points->Delaunay . Программа спросит на какую плоскость проецировать. Если ошибочно будет выбрана не правильная плоскость, то можно будет нажать Undo, и выбрать другую. Если ошибки нет, то по выбранных точкам будет создана плоскость. Иногда, но редко, алгоритм работает не точно, и либо оставляет дыры, либо создаёт лишние треугольники. Поэтому для проверки рекомендуется нажать F5 и посмотреть на скелет созданных треугольников.
Выделяем несколько треугольников. Жмём на Model->Triangles->Join triangles. И треугольники соберутся в один.
НО эта опция позволяет точно объединить только несколько соприкасающихся треугольников. Например такие как разделённые через опции Model->Triangles->Subdivide each of selected triangles to 3 parts и Model->Triangles->Subdivide each of selected triangles to 4 parts. Либо два треугольника с общей гранью. Конечно, далеко не каждые два треугольника можно объединить так, чтобы при этом не образовались дыры в модели. Но это уже лежит на совести модельера.
Если обьединяемых треугольников много и/или они не соприкасаются или по каким то другим причинам их сложно объединить, то программа на их основании пытается создать плоскость из двух треугольников. Это может сильно помочь, когда надо уменьшить количество полигонов модели. Правда, не всегда получается именно такая плоскость какая хотелось бы, но тогда можно попробовать уменьшить количество объединяемых треугольников, и повторить попытку.
Основная ( левая ) панель, убирается или показывается нажатием клавиш Shift+Escape.
Прокси - это древовидный список элементов, каждый из которых имеет матрицу ( позицию, ротацию, масштаб ), некоторые параметры и меш-источник, данные которого этот прокси отрисовывает.
Смысл прокси в более простом отображении уже созданных мешей в новых позициях и с новыми параметрами. Удобен когда необходимо отображать много однотипных объектов. Например, фонарные столбы на улице, стулья в комнате, ящики, на каком-нибудь складе, колонны здания в стиле классицизм или ампир, окна, двери, и т. д. и т. п.
Всё это можно сделать и без прокси. Просто клонировать меш, и поставить его в новую позицию. Но что делать, если потом понадобиться этот меш изменить? Переделывать каждый фонарный столб индивидуально? Это долго.
Проще сделать один меш с фонарным столбом и отобразить его через прокси во всех нужных позициях. А если потом этот меш изменить, то он изменится и во всех прокси, которые его отображают.
Прокси создаются там же где и меши. Mesh->Insert. На вопрос что создавать нужно ответить Proxy. При выборе созданного элемента в списке мешей ( после создания, он выбирается автоматически ), появится древовидный список с элементом Root, к которому можно цеплять элементы прокси. Нажмём на кнопку Clone, чтобы создать один.
При выборе этого созданного элемента появятся его параметры. Source mesh - целевой меш, Visible - видимость. Postion позиция, Rotation - ротация, Scale - масштаб.
Нужно выбрать в качестве целевого меша, какой-нибудь из имеющихся в списке, при этом, этот элемент отобразиться в указанных тут позиции, ротации, и с указанным масштабом. Если менять позицию, то он будет перемещаться на новое место. Тоже самое происходит при изменении ротации и масштаба.
Кнопки для работы с элементами прокси делают что и всегда, клонируют, удаляют, переименовывают, двигают элементы. В добавок тут возможно перетаскивание элементов мышкой, по технологии Drag And Drop.
Преобразовать прокси в меш, можно нажатием на кнопку Mehs->Insert, удерживая клавишу Shift.
К преимуществам прокси можно отнести малый размер файлов, при сохранении в формат ЛОДки. При экспорте же моделей в другие форматы, прокси нужно сперва преобразовать в меш.
Чтобы не открыть, а добавить файл из истории Menu->File->History к существующей модели, надо при выборе файла в меню History, удерживать нажатой клавишу Shift.
Включается опцией : Save options ->LOD make backup. Когда она включена, то при сохранении модели в файл, если такой файл уже существует, то он не будет затёрт, а будет переименован с добавлением в конец номера. Например, файл temp.lod будет переименован в temp[001].lod. Если же такой файл уже есть, то в temp[002].lod и т. д. Таким образом ничего не стирается, и в случае ошибки, или глюка в программе можно легко вернуться к предыдущей модели.
Это удобно тем, что в меню сохранения Menu->Save as ..., не надо каждый раз от руки вводить новое имя файла, а можно сразу нажимать на кнопку Сохранить ( на запрос подтверждения - смело отвечать положительно ) , а переименовываться они будут самостоятельно.
Рекомендуется сохраняться почаще.
Программы можно указать папки, в которых она будет искать текстуры для загружаемых моделей, и подгружать их автоматически.
Пути к папкам с текстурами указываются через пункт меню Menu->File->Texture paths ....
В верху открывшегося окна указан список папок в которых будут искаться текстуры. В начале он пустой и его нужно заполнить. Ниже расположена строка для ввода адреса текстуры от руки, вместо этого можно нажать на расположеную слева от строки кнопку с тремя точками, и выбрать папку из имеющихся. Её путь появится в строке.
Далее нужно поместить путь в список. Это можно сделать кнопками Add ( добавить в конец списка ) или Replace ( заменить выбранный элемент списка на указанный путь ). В случае, если была допущена ошибка, то можно нажать на Delete, чтобы удалить ненужный элемент и повторить снова.
Если был введён несуществующий путь, или ранее существовавший путь пропал, например, отключили диск на который он вёл, то такой путь в списке будет подсвечен серым цветом. Чтобы удалить все такие пути можно нажать на кнопку Delete invalid paths, заодно эта кнопка удаляет и дублирующиеся пути.
После введения всех путей важно расположить их в правильном порядке. То есть сначала будет вестись поиск текстуры в папке в которой находилась загружаемая модель. Если там нет, то в папке с первом путём из списка, потом со вторым, потом с третьим и т. д. Чтобы расположить пути в нужном порядке можно воспользоваться стрелками в правой части окна. Одна двигает выделенную текстуру вверх, другая вниз.
После редактирования путей к текстурам нужно нажать на кнопку OK, чтобы сохранить результаты редактирования или Cancel, чтобы не сохранять.
В программе в файле lodka3d.ini пути хранятся в одной строке отделённые друг от друга символом ';'. Также как в GLScene.
Чтобы загрузить модель из командной строки, нужно указать её имя после названия программы. Например: lodka3d.exe C:\myfile.lod
После загрузки модели текст можно считать из переменной LODFileTextInfo типа string. Записать в редакторе текст можно в Menu->Save options->LOD edit info.
В нём можно хранить всякую дополнительную информацию по модели. Копирайты, или параметры модели. Скажем, если модель - это автомобиль, то здесь можно записать параметры коробки передач. Если модель - это персонаж игры - можно записать число жизней или здоровье, и т. д.
Для этого надо загрузить файл примера : icons01.bmp . Это файл с картинками программы. Перерисовать в нём картинки, сохранить под именем icons.bmp, и положить в папку программы. Тогда при следующем запуске программа найдёт и загрузит картинки из этого файла.
При рисовании надо учитывать, что размер каждой картинки должен быть строго 24х24. А размер общей картинки должен быть кратен 24 по горизонтали и вертикали. Также картинок не должно быть меньше, чем в исходном файле.
Цвет фона задаётся цветом самой нижней левой точки.
Для работы с нормалям треугольников есть две функции.
Чтобы видеть группы сглаживание освещение должно быть включено в меню Edit->Lighting, а опция Options->Flat shaded должна быть отключена.
Показать панель с группами сглаживания можно кликнув на кнопку Model->Trianlges->Smoothing groups panel ....
Вверху панели можно выбрать одно из четырёх действий которое можно осуществить над группами сглаживания. Это Select - помечать треугольники ассоциированные с группой сглаживания. Deselect - снять пометки с треугольников ассоциированных с группами сглаживания. Assign - ассоциировать выбранные треугольники с группой сглаживания. Unassign - отключить ассоциирование выбранных треугольников с группой сглаживания.
Чуть ниже находятся кнопки с цифрами - это группы сглаживания. Их 32, по числу битов в числе типа Integer. 32 бита - 32 группы сглаживания. По одной группе на бит. Нажав на одну из кнопок осуществляется выбранное выше действие с соответствующей группой.
Ещё ниже находится кнопка Empty - означает отключение группы сглаживания. Все биты устанавливаются в ноль.
Кнопка Select used позволяет пометить звёздочкой группы сглаживания задействованные в меше. А в их всплывающих подсказках выводится число треугольников которые в них участвуют. Это нужно только для информации,
Кнопка Autosmooth позволяет автоматически распределить треугольники по группам сглаживания, в зависимости от углов между их нормалями. Чем меньше этот угол - тем больше будет групп.
Группы сглаживания позволяют рассчитывать общие нормали для вершин всех входящих в данную группу треугольников. То есть для каждой вершины вычисляется суммарная нормаль треугольников, в которых она участвует. Суммирование происходит пропорционально величине угла.
Благодаря этому модель получается со сглаженными краями.
Чтобы проассоциировать выбранные треугольники с какой-либо группой сглаживания, нужно выбрать действие Assign, и нажать на кнопку соответствующую этой группе сглаживания. Чтобы отключить ассоциирование выбранных треугольников с группой надо выбрать действия Unassign, и нажать на кнопку соответствующую этой группе сглаживания.
Если проассоциировать Assign треугольники с группой Empty ( то есть отключить сглаживание ), то для каждого такого треугольника будет вычисляться индивидуальная нормаль. Это аналогично включению опции меню Options->Flat shaded.
Для примеру, создадим цилиндр Primitives->Cylinder->Create. Откроем панель работы с группами сглаживания Model->Trianlges->Smoothing groups panel. И нажмём на кнопку Select used. При этом кнопки с цифрами 1, 2 и 3 станут помеченными звёздочкой. Это означает, что у нас задействовано три группы сглаживания. По одной для верхней боковой и нижней поверхностей. Благодаря этому боковая поверхность выглядит сглаженной ( без углов ), а между ней, верхней и нижней поверхностью видна жёсткая грань.
А теперь попробуем отключить группы сглаживания. Для этого выделяем все треугольники. Выбираем в панели групп сглаживания действие Assign и нажимаем на кнопку Empty. Боковая поверхность из гладкой стала гранёной.
Далее можно попробовать проассоциировать все треугольники с какой-нибудь одной группой сглаживания. Для этого кликаем скажем на кнопку 1. В результате боковая поверхность опять стала гладкой, но теперь между ней и верхней и нижней поверхностями нет жёсткой грани. Так как верхняя и нижняя поверхности теперь сглаживаются не индивидуально, а сообща с боковой поверхностью.
Каждый треугольник может участвовать в нескольких группах сглаживания. Благодаря этому можно сглаживать грани между выбранными группами сглаживания.
Для примеру опять создадим цилиндр Primitives->Cylinder->Create. Выберем на его вершине один из треугольников. И проассоциируем его со второй ( то есть боковой ), группой сглаживания. Model->Trianlges->Smoothing groups panel, Assign, 2. При этом треугольник станет участвовать сразу в двух группах сглаживания, верхней ( первой ) и боковой ( второй ). А грань между боковой поверхностью и верхней в этом месте сотрётся.
Стоит избегать ассоциирования одного треугольника с большим количеством групп сглаживания, так как это замедляет расчёты.
При использовании опции Autosmooth иногда возникают вопросы, почему она не задействует первую группу сглаживания. Это потому, что первая группа зарезервирована на случай, если в последствии надо будет изменять группы сглаживания в ручную, чтобы было куда их определять. Все группы сглаживания находятся на равных, поэтому резервировать первую или какую-либо другую группу - не имеет значения.
Другой вопрос, почему иногда группы сглаживания не создаются совсем, например, при использовании опции Autosmooth для куба. Группы сглаживания не создаются, если все треугольники такой группы лежат в одной плоскости. Потому, что все нормали тогда будут идти перпендикулярно этой плоскости, а это тоже самое, что не определять группу сглаживания вообще. При желании, можно самому определить таким треугольникам какую-нибудь группу сглаживания, и лично убедиться, что разницы не будет никакой.
Для примера, куб состоит из 12 треугольников лежащих парами в 6 плоскостях. В принципе это можно считать как 6 групп сглаживания по два треугольника в каждой. Но поскольку каждая пара треугольников лежит в одной плоскости, то есть имеет одну общую нормаль, то им можно определить нулевую Empty группу сглаживания. И внешне это будет выглядеть точно также.
За отключение сглаживания отвечает пункт меню Options->Flat shaded. Если его включить, то группы сглаживания не будут учитываться, и для всех треугольников будут вычислены индивидуальные нормали.
При сохранении модели, при включённой опции File->Save options->LOD Save normals нормали сохраняются в том виде, в котором они в данный момент времени видны. Если нормали не сохранялись, то при загрузке в GLScene они будут сгенерированы без сглаживания ( так, что будут видны отдельные треугольники ).
Если нормали сохраняются, то размер файла получается больше , а если не сохраняются, а генерируются на лету, то это немного замедляет загрузку.
Иногда координаты некоторых точек практически совпадают, и тогда их можно объединить в одну. Это делается опцией : Model->Points->Combine nearest points. Программа спросит, на каком расстоянии друг от друга должны находиться точки, чтобы их считать совпадающими. С этой опцией надо быть осторожным, чтобы не слить случайно те точки, которые реально должны быть на небольшом расстоянии друг от друга.
После объединения точек, программа не удаляет лишние точки, для этого служит опция Model->Points->Delete unused points. Она удаляет все незадействованные точки.
Чистка текстурные координат осуществляется аналогичным образом, но с ними надо быть ещё осторожнее, так как расстояния между точками которые не должны считаться совпадающими могут быть ещё меньше.
Внизу на закладке Primitive, рядом с кнопкой Create есть ещё кнопка Cut, она предназначена не для создания примитива, а для использования выбранного примитива как резательного инструмента, который может отрезать от модели часть или просто разделить её треугольники своей поверхностью.
Режимов работы этой опции три. Окошко с ними находится под кнопкой Cut, они значат:
При работе опции отекстуренность модели сохраняется. Применяется резательный инструмент только к выбранной фэйс-группе.
К сожалению не всегда удаётся отрезать все треугольники оказавшиеся внутри или снаружи примитива полностью, потому, что модель примитива может быть не замкнутой, или требуются сложные вычисления, для определения где находится треугольник. Поэтому как правило удаляются только те треугольники, которые соприкасались с обрезающим примитивом.
Также некоторые треугольники иногда или не разрезаются или разрезаются с ошибками. Это недоработка.
В качестве примера использования опции можно создать куб с настройками по-умолчанию ( кнопочка Default, которая находится над Cut ). Нажимаем на Primitive->Create. Появляется куб. Далее ставим примитиву позицию в (0.5, 0.5, 0.5), выбираем режим обрезания cut in, и нажимаем на кнопку Cut. В результате из куба вырезается восьмушка, маленький уголок. Так эта опция и работает.
Полезна при прорезании в моделях окон, дверей, вырезании дыр и т. д и т. п. Особенно полезна, когда от обрезания требуется точность.
После работы опции часто образуется много треугольников, которые можно объединить воедино. Для этого, сначала объединяем совпадающие точки через опцию Model->Points->Combine nearest points ( в случае с кубом, объединяются 6 точек ), потом выделяем все треугольники и нажимаем на кнопку Model->Triangles->Joint triangles, удерживая клавишу Shift, объединяются 3 треугольника. Лишние точки можно удалить через опцию Model->Points->Delete unused points. В результате 13 точек удалено.
Внимание ! Эта очень полезная опция зависит от вашей видеокарты и драйверов, поэтому может функционировать не правильно. Работает конкретно через функцию glFeedbackBuffer OpenGL'я. Когда данных слишком много, то при её вызове программа может просто закрыться, то есть это так сказать вне моей юрисдикции, и я не знаю как это можно исправить. Также с этой же функцией связано возможное обрезание текста по краям. Если кто-нибудь знает, как это поправить - пишите.
Если показывается сообщение, что шрифт не может быть сгенерирован, то значит так оно и есть. По разным причинам.
Ответ на вопрос почему я не исключу эту не стабильно работающую функцию из программы прост. Потому, что она позволяет создавать целую кучу примитивов, используя разные таблицы символов. Например, выберите шрифт Primitives->Options-Text->Font->Wingdings, и нажмите Primitives->Create. Появятся, всякие знаки зодиака, стрелки, звёздочки, картёжные символы, религиозные символы, смайлики и т. д. и т. п.
Функция работает с русскими буквами, ( в отличии от MilkShape ) и вообще со всем тем, что только поддерживается OpenGL'ем.
Алгоритм сильно "сорит", поэтому после создания примитива этой опцией, точки меша нужно чистить, совмещая близлежащие точки Model->Points->Combine nearest points и удаляя лишние Model->Points-Delete unused points.
Интересных эффектов можно добиться опцией Smooth Primitives-Options->Smooth. Чем больше её значения, тем сильнее некоторые точки совмещаются, уменьшая количество полигонов в модели. Это эффект OpenGL, и повлиять на него я никак не могу. Учтите также, что эта опция количество "сора" не уменьшает.
Если Primitives-Options->Scale->Y равно нулю, то будет сформирована, не объёмная фигура, а плоская надпись.
Для того, чтобы можно было генерировать геосферы нужно загрузить файл LODdata1.dll ( ссылка на главной странице ), и поместить его в папку программы. Геосфера отличается от сферы тем, что её точки равномерно расположены по поверхности шара. ( а у сферы на полюсах концентрация точек выше, а на экваторе ниже ).
К сожалению формулы по которой можно было бы определить координаты точек равномерно расположенных на шаре для N-ного их количества найти не удалось. Поэтому создаваемые геосферы получены итерационными методами, которые недостаточно точны, но ведь для моделей с небольшим количеством полигонов этого и не требуется. Если же вы знаете формулу, или алгоритм простого генерирования геосфер - пишите. Можно вставить его в программу.
Позволяет быстро создать куб или три взаимно перпендикулярных плоскости со скриншотами модели на плоскостях.
Допустим в игре есть высоко полигонные модели домов. Если показывать их все одновременно то игра будет тормозить. Если прятать дальние дома, то возникнет пустота на горизонте. Поэтому чтобы пустот не образовывалось показывают не сами дома, а их низко полигонные модели. Эта функция и позволяет быстро создавать такие модели.
Грузим или создаём какую-нибудь модель. Создаём пустую Фэйс-Группу и выбираем её. Это нужно потому, что фэйс-группе будет присвоен новый материал, и если в ней будут какие либо ещё треугольники, то все они будут отображены с новой текстурой.
Далее идём на закладку Primitives и выбираем Type->LOD. Появляются окошки позволяющие задать качество текстуры, и что создавать, куб или взаимно перпендикулярные плоскости. Также можно задать цвет фона текстуры кликнув на кнопку Color. Нажимаем на Create.
Параметр качества текстуры определяет размер скриншотов снимаемых с модели. Увеличение параметра на единицу соответствует увеличению размера текстуры вдвое. Далее при упаковки скриншотов в одну текстуру, её размер может измениться.
Что именно делать, куб или взаимно перпендикулярные плоскости, зависит от формы модели. Для прямоугольных домов или машин лучше делать куб. Для шаров, листвы, моделей людей или каких-нибудь корявых объектов лучше подойдут плоскости.
Выбор цвет фона может пригодиться для придания модели прозрачности. Например, если на модели есть чёрные места, и фон будет чёрным, то потом, при придании прозрачности могут возникнуть дыры в чёрных местах модели.
Далее после нажатия кнопки Create программа выполняет следующие действия : Формирует куб или плоскости по размеру соответствующие видимой модели. Переключает камеру в ортогональную проекцию и поочерёдно ставя её по разные стороны от сформированного куба или плоскостей снимает скриншоты. Всего их получается шесть. Далее они запихиваются в одну текстуру. Создаётся новый материал в списке Materials в который и запихивается созданная текстура, а сам материал ассоциируется с видимой Фэйс-Группой. Весь этот процесс может занять немного времени особенно в первый раз, поэтому возможно придётся подождать.
Созданную текстуру надо сохранить Materials->Save to .... По-умолчанию созданный LOD непрозрачный, но это легко исправить выбрав ему Blending mode -> BmTransparentcy и TextureImageAlpha скажем tiaTopLeftPointColor.
Не рекомендуется пытаться создавать LOD с плоскостей. Из-за нулевого размера по одному из направлений может возникнуть ошибка или LOD просто не создастся. На этот случай нужно создать хотя бы одну точку не лежащую в этой плоскости, создать LOD и удалить ненужные плоскости/грани куба.
Из-за того, что Undo на материалы не распространяется, лишние материалы созданные в результате экспериментов с этой опцией предлагается удалять вручную. Быстро удалить все неиспользуемые материалы можно нажатием на кнопку Material->Delete, удерживая при этом нажатой клавишу Ctrl.
При изготовлении LOD'а возможно стоит обратить внимание на следующие моменты :
Создадим текст, и попытаемся уменьшить количество его полигонов.
Primitives->Type->Text. Выбираем шрифт Arial ( потому, что он должен быть установлен на всех компьютерах ). Установим ему размер, скажем в 20. Напишем текст LODka3D, и нажмём на Primitives->Create.
Появится трёхмерный текст. А внизу в строке состояния появится надпись Добавлено точек: 8760 и треугольников: 2920. Может быть цифры будут не точно такими, а похожими в зависимости от параметров шрифта.
Выделяем все точки мышкой, и кликаем на кнопку Model->Points->Combine nearest poitns. Здесь попросят ввести минимальное расстояние между точками, чтобы они считались подлежащими объединению.Укажем 0.05 и нажмём OK.
Внизу появилась надпись Joint 8234, это значит, что точки объединились и можно удалить лишние. Чтобы это сделать жмём на кнопку Model->Points->Delete unused points
Внизу появилась надпись, что 8234 точки были удалены. А в окне редактора становится видно, что точки сильно поредели.
Но это ещё не вся очистка. В результате объединения точек, вершины некоторых треугольников объединились, и треугольники визуально исчезли, но тем не менее они продолжают формально существовать в списке. Чтобы их удалить нужно воспользоваться кнопкой Model->Triangles->Clean. И в появившемся меню выбрать пункт Delete invisible triangles.
Внизу появится надпись 1874 невидимых треугольника было удалено.
Таким образом мы уменьшили число точек модели с 8760 до 526, а число треугольников с 2920 до 1046. Хотя, думаю варьируя параметры можно добиться и лучших результатов, но не следует перебарщивать, так как с водой можно выплеснуть и ребёнка.
Чтобы удалить все невидимые треугольники, можно выделить все видимые, крутя модель и обводя её рамкой выделения. Потом нажать на кнопку Model->Triangles->Inverse selection, чтобы инвертировать выделение ( сделать выделенные не выделенными и наоборот ). И нажать на Model->Triangles->Delete selected удалив выделенные треугольники.
Также можно воспользоваться опцией Model->Triangles->Clean. Выбрав пункт Delete invisible triangles ( удалить невидимые треугольники. Невидимыми считаются те, у которых площадь равна нулю.
Третий пункт позволяет не удалять, а выделить треугольники с площадью меньшей чем заданная. Таким образом их можно осмотреть, и ненужные удалить.
Для этого можно воспользоваться пунктами меню Menu->Edit->Model.
Вращение задаётся в градусах на которые надо повернуть модель относительно
осей X, Y и Z. Масштабирование - это во сколько раз
надо умножить размер модели. 2 - значит увеличить вдвое. 0.5 - значит
уменьшить вдвое и т. д.
Отцентрировать все меши одновременно можно нажав на кнопку
Model->Mesh->Centrate удерживая при этом клавишу Shift.
Для этого можно воспользоваться пунктами меню Menu->Edit->Model->All meshes to one. Эта опция собирает все меши модели в первый, при этом треугольники группирует по материалам.
Опция предназначена специально для всяких огромных моделей по пятьсот мешей и по куче фэйсов в каждой из них. Видимо такие получаются в результате экспорта из каких то программ.
Вторая текстура нужна прежде всего для карт освещённости, которые можно создать в генераторе карт освещённости. На эту тему есть урок на главной странице сайта программы, в разделе разное.
По-умолчанию вторая текстура не используется. Чтобы она начала использоваться надо выбрать для неё материал Model->Face->Change material .... Второй список.
Соответственно, чтобы вторая текстура перестала использоваться надо просто
отключить материал, то есть выбрать в списке
Чтобы переключиться на работу с текстурными координатами второй текстуры, нужно выбрать Model->Textrue coord->Textrue 2. Все действия, которые над ней производятся аналогичны действиям над первой текстурой.
Чтобы из использовать видеокарта должна поддерживать шейдеры.
CelShader'ы используются для придания моделям вида как в комиксах. То есть контур , и переходы света-тени делаются очень резкими, всего в несколько градаций.
CelShader'ы в программе сделаны на компоненте TGLCelShader из состава GLScene. Сделаны специально для GLScene, чтобы можно было посмотреть как модель будет там выглядеть. Но поскольку разные CelShader'ы обычно делают одно и тоже, то это может пригодиться и пользователям других движков.
Чтобы посмотреть как это работает, можно, например, создав геосферу на 100 точек Primitives->Geosphere->Points = 100->Create. Создать текстуру Materials->Textrue effects->Random texture. И включить шейдеры Materials->CelShader.
Появляются две галочки Outlines и Textured. Первая - это включить показ контура. Вторая - включить текстуру. Кроме них появляется окошко выбора ширины контура, и кнопка выбора цвета контура. Если текстура отключена, то можно изменяя цвет материала через Materials->Diffuse можно получать различные расцветки.
Играясь со всеми этими опциями можно понять как это выглядит.
Включить работу со скелетами можно галочкой Actor->Enabled. Под ней ниже находится древовидный список костей. Здесь можно выбирать, добавлять, удалять, переименовывать кости, а также ассоциировать с костями точки модели.
Чуть ниже находятся два списка: анимации Actor->Animations и фреймы анимации Actor->Frames, Когда вы выбираете какую-нибудь анимацию в списке анимаций, то в списке фреймов показываются её фреймы.
Под списком анимаций находится кнопка Actor->Animations->Play, при нажатии на которую созданная анимация будет проигрываться, и окошко Actor->Animations->Interval в котором можно указать интервал проигрывания. По-умолчанию интервал равен 100. Чем больше интервал, тем меньше скорость.
Ещё ниже находятся два окошка, в которых можно изменить положение и ротацию кости, выбранной в списке костей Actor->Position и Actor->Rotation. Ротация задаётся углами Эйлера. То есть последовательным поворотом относительно осей X, Y и Z.
Загружать модели со скелетами можно из файлов типа *.smd. Это формат файлов от HalfLife'а. Smd-файлы бывают двух типов, с моделями и с анимациями. Файлы с моделями содержат раздел "triangles", файлы с анимациями - нет. Загружать надо сначала файл с моделью, тогда в списке костей появится её скелет. А потом добавлять(!) File->Add from file файлы с анимациями, тогда в списке анимаций для каждого файла будет добавляться по анимации. Само собой нельзя добавлять анимации от одной модели к другой, потому, что скелеты в smd-файлах должны быть одинаковыми. Это легко узнать открыв файлы smd в текстовом редакторе.
При сохранении модели в smd-файл возникнет вопрос, сохранять в файл модель или сохранять текущую выбранную анимацию ( если она выбрана ). При сохранении в файлы типа *.lod такого вопроса не возникает, так как такие файлы хранят и то и то в одном флаконе. При сохранении не забывайте. что скелет должен быть включён, так как иначе он не сохранится, а вместо него будет создана одна единственная кость в позиции (0, 0, 0) и все точки модели будут привязаны к ней.
Возможно пользователей движка GLScene заинтересует то, что загрузка скелетной анимации из файлов типа *.lod происходит намного быстрее чем из файлов типа *.smd, так как в smd информация хранится в виде текста, и требует большого количества вызовов функции FloatToStr.
Для этого надо включить скелетную анимацию Actor->Enabled и выбрать пункт Actor->Create. При этом списки анимаций и фреймов станут недоступными.
Выбираем какую-нибудь кость в списке костей. При этом на модели в месте этой кости появятся три разноцветные оси. Красная - x синяя - y зелёна - z. Теперь мы можем внизу в Actor->Position и Actor->Rotation менять позицию и ротацию этой кости. При изменении позиции кость на модели будет смещаться, а при изменении ротации, будет изменяться только направление оси.
Добавлять, удалять и переименовывать кости можно кнопками Actor->Add, Actor->Rotation и Actor->Rename соответственно. Удалять кость можно только если к ней не привязаны другие кости. Удалить корневую кость Root - нельзя, вместо этого надо отключить скелет. Переименовать же корневую кость можно.
Осуществлять привязку точек модели к скелету можно с помощью кнопок с изображениями человечков. Кнопка Actor->Select assigned points позволяет выделить точки привязанные к выбранной кости. Кнопка Actor->Select unassigned (root) points позволяет выделить точки привязанные к корневой кости. К этой кости по умолчанию привязаны все точки, так как она является своеобразным началом координат скелета.
Чтобы привязать точки к какой либо кости нужно выделить эти точки, выбрать кость в списке костей, и нажать на кнопку Actor->Assign selected points to selected bone. Чтобы отвязать выбранные точки от выбранной кости нужно нажать на кнопку Actor->Assign selected points to a root bone. Таким образом выбранные точки будут проассоциированны с корневой костью.
При анимировании, точки модели привязанные к костям, движутся вместе с костями, но при создании скелета это отключено .
Для анимирования модели нужно включить скелетную анимацию Actor->Enabled и выбрать пункт Actor->Animate. При этом некоторые пункты связанные с редактированием костей скелета станут недоступными. Учтите, что создавать скелет надо перед его анимированием. А то, если после анимирования начать удалять/добавлять кости, анимации могут сбиться. В принципе этого быть не должно, но иногда возникают такие ошибки. Пишите о них, если обнаружите.
В списке анимации Actor->Animations всегда по-умолчанию есть одна анимация. Удалить её нельзя. В списке фреймов Actor->Frames всегда должен быть хотя бы один фрейм.
Хочу обратить внимание на то, что первый фрейм первой анимации - это базовое положение костей. То самое, которое записано в *.smd-файле модели. Поэтому первую анимацию и первый её фрейм лучше оставить на месте, не трогать её и не изменять, если вы конечно, не очень хорошо понимаете что именно произойдёт в противном случае. Сперва я хотел её блокировать, но потом подумал, что может кому то понадобиться её менять, и оставил на общих основаниях.
Анимации - это просто наборы фреймов. Один фрейм - это одно положение костей скелета. При анимировании фреймов, кости скелета плавно перемещаются из положения заданного в текущем фрейме к положению заданному в следующем фрейме. И так по списку в циклическом порядке.
Чтобы изменить положение скелета, в данном конкретном фрейме. Нужно выбрать анимацию, выбрать фрейм, выбрать кость которую мы хотим сдвинуть или повернуть, и в окошках Actor->Position и Actor->Rotation меняем её позицию и ротацию соответственно. В отличии от режима создания скелета, в данном случае точки модели привязанные к кости повернуться вместе с нею.
Если создать хотя бы два отличных друг от друга фрейма, и нажать на кнопку Actor->Animations->Play, то созданные вами фреймы будут анимироваться. Интервал между кадрами анимации ( скорость ) задаётся в Actor->Animations->Interval.
Фреймы можно удалять, клонировать, двигать по списку, копировать в другие анимации. Анимации можно клонировать, удалять, переименовывать, перемещать. Всё как обычно.
Из особенностей возможно заинтересует значение кнопки Actor->Animations->Make skeletal translation static. Эта кнопка нужна для некоторых smd-анимаций, которые при анимировании "скользят", сдвигаются в разные стороны. Причём, при, например, анимировании ходьбы модель скользит не вперёд, что было бы логично, а назад. Почему - не знаю. Вопрос к создателям первого Халф-лайфа. Но эта кнопка позволяет убрать скольжение. Если же при нажатии кнопки удерживать клавишу Shift, то скольжение не уберётся, а перевернётся. И, скажем, при ходьбе перемещение скелета будет происходить в правильном направлении.
Галочка Bones предназначена только чтобы показывать или скрывать проволочный скелет в модели. Чтобы можно было легче рассмотреть результат или чтобы снять скриншот без него.
Окошко дополнительных параметров анимации находится над окошком задания интервала Interval. В нём можно выбрать режим проигрывания анимации. Режимы соответствуют режимам движка GLScene.
Режимы:
С версии 1.42 в программе появилась возможность работы с весами костей, то есть сопостовлять каждой вершине более чем одной кости с приданием каждой кости своего веса. Чем вес больше, тем сильнее данная кость влияет на смещение вершины в процессе анимирования, таким образом можно добиться большей плавности.
Посмотреть сопоставленность костей вершинам можно через меню. Для этого надо выделить интересующие вершины и нажать на Menu->Options->Show bones weight. Появится список в нём будут столбцы с номерами выделенных вершин, числом костей ассоциированных с вершинами, и парами номеров костей и их весов. Если развесовки отсутствуют, то есть, каждой вершине ассоциирована только одна кость, то в списке будут только номера вершин и их кости. Веса при этом считаются равными единице.
Также можно подсветить веса вершин на модели. Для этого выбираем кость, и кликаем на кнопку Actor->Skeleton->Select assigned points удерживая клавишу Shift. В результате вершины не ассоциированные с данной костью будут окрашены чёрным цветом, вершины ассоциированные только с выбранной костью - белым. В остальных случаях степень окрашенности белым зависит от веса данной кости. чем он больше по сравнению с общим весом приходящимся на данную вершину, тем она будет белее. ( Пока опция немного глючит ).
Добавлять кости к вершинам и/или менять их веса можно нажатием на кнопку Actor->Skeleton->Assigned selected points to selected bones удерживая клавишу Shift. Если нажать без клавиши Shift, то выбранная кость будет просто поассоциированна с выбранными вершинами с затиранием всех других уже имеющихся ассоциаций. А Shift означает именно добавление и/или изменение веса.
Для добавления кости к вершинам нужно указать ей вес. Вес можно указать числом или формулой, для ввода которых появляется окошко. Если была выбрана одна единственная вершина, то в окошке будет написан её текущий вес ( если кость ранее ассоциирована с данной вершиной не была, то её вес равен нулю ). Вес можно изменить на любой другой и сохранить.
Если выбрана группа вершин, то появится последняя введённая формула по которой для вершин вычисляются и присваиваются им веса. То есть формула применяется поочерёдно ко всем выбранным вершинам, со своими значениями специальных функций ( см. ниже ) для каждой вершины.
В формуле можно использовать
Используя вышеприведённые функции можно составлять различные формулы для вычисления весов. Например:
Если у вас есть интересные формулы или идеи как это можно улучшить - присылайте.
Веса костей в процессе редактирования не нормализуются, а нормализация происходит только при анимировании. Принудительно нормализовать веса можно кликнув на кнопку Actor->Skeleton->Select assigned points удерживая клавишу Alt. При сохранении в файл веса также можно нормализовывать, для этого надо поставить галочку в меню Menu->File->Save options->LOD normalize bones weight
Отключить ассоциирование кости с вершинами можно выбрав кость, выделив нужные вершины и нажав на кнопку Actor->Skeleton->Assign selected points to a root bone only, удерживая клавишу Shift. Если Shift не удерживать, то откреплены будут все кости, а не только выбранная.
Начиная с версии программы 1.51.4 появилось возможность таскать мышью кости по скелету методом Drag And Drop. То есть подключать кости к другой кости-предку. При этом действии есть несколько интересных, но неочевидных возможностей.
Кости можно перетаскивать такими способами:
Без нажатия дополнительных клавиш. Тогда кости только переподключаются к другой родительской кости. Все их локальные позиции и матрицы остаются такими же как и были. То есть если мы подключаем таким образом кости ноги к какой нибудь другой кости, то нога будет также трепыхатся, но повёрнутой в какую-нибудь другую сторону, по матрице новой кости.
С нажатым Control. Этот способ переноса кости похож на перенос без нажатий клавиш, с тем лишь отличием, что кость сохранит тоже направление в котором была до переноса. То есть, если это, допустим, кость ноги смотрящая вниз, то как бы матрица целевой кости не была вывернута, кость после переноса всё равно будет смотреть вниз.
С нажатым Alt. В этом случае кость хоть и будет подключена к другой кости, но сохраняет свои позицию и направление такими же какими они были до перетаскивания, как бы оставаясь на месте. Например, можно кость колена подключить к корневой кости скелета, и если после этого запустить проигрывание анимаций модели, то они будут проигрываться также как если бы кость не подключали к другому предку.
Важный момент, что после такого перетаскивания уже может не быть одинаковой длины кости во всех кадрах.
Если при перемещении костей удерживать клавишу Shift, то кости будут не перемещены, а скопированы. Вместе с клавишей Shift также можно нажимать клавиши Control и Alt получая такие же, как описаные выше, эффекты.
Панель для работы с вешринными анимациями находится на закладке Actor->Vertex Animation. Здесь рассположены четыри списка. Верхний - это древовидный список коллекций вершинных анимаций. Его элементы можно крепить друг к другу и перетаскивать мышью. Под этим списком справа находится список анимаций. Для каждой коллекции он свой. Справа от списка анимаций находится список фреймов. Для каждой анимации он свой. Под этими двумя списками находится древовидный список мешей и костей. Для каждой коллекции он свой. Кости можно таскать мышью и крепить друг к другу. Меши - нельзя.
Ещё ниже находятся три закладки. Bones - кости. Q3Collider - коллайдеры соотвествующие коллайдерам в моделях от Quake 3 и Points - вершины. На закладке Bones можно задавать позиции костей, для этого надо сперва выбрать (или создать хотя бы одну) коллекцию, в ней выбрать анимацию, а в анимации фрейм. Также надо не забыть выбрать (или создать хоты бы одну) кость в списке мешей и костей. Тогда на экране отобразятся три оси указывающие положение матрицы кости и её направление. На закладке Bones параметры кости можно менять. Для каждого фрейма каждой анимации каждой коллекции они свои. Параметры - это положение, ротация и масштаб.
Если фреймов в анимации есть больше одного, то их положения отображаются на экране точками. Эти точки можно выделять мышью и двигать также как вершины в редакторе (LMB+Ctrl). Это удобно, когда кости задают пути движения актёра.
Закладка Q3Collider позволяет редактировать параметры коллайдера. Коллайдер есть всего один на каждую коллекцию. Но зато в каждом фрейме у него свои параметры. Параметров три. Это позиция, ориентированная по осям коробка (Bounding Box) и радиус сферы. При переходе на эту закладку коробка и сфера отображаются на экране. Предполагается, что когда объект далеко, то проверка столкновений осуществляется со сферой, а когда близко, с коробкой. В прочем всё это может быть использовано на усмотрение пользователя.
Закладка Points позволяет редактировать положения вершин анимаций. Чтобы вершины отобразились надо выбрать какой-нибудь меш в списке мешей и костей. Если меша нету, то его можно добавить через кнопку Insert этого списка. После выбора меша, на экране появляются его вершины. Их можно выделять мышкой как и вершины в основном редакторе. Сдвиг, вращение и масштабирование, тоже осуществляются как в основном редакторе. Действия производимые через окошки на закладке Points также аналогичны действия в основном редакторе.
Галочка Show passive meshes нужна чтобы показывать незадействованные в анимациях меши. Например, если загружены модели актёра и уровня, то актёр показываться небудет, так как он задействован в анимациях, а уровень будет. Это удобно для постановки путей хождения актёра и просто для сопоставления его размеров и вида с окружающим пространством.
Каждую коллекцию можно перетаскивать мышью и крепить к другой коллекции, при этом по-умолчанию она крепится к первой её кости, или к началу локальных координат дочерней модели. Кость, к которой прикреплена коллекция можно менять через кнопку находящуюся справа от списка. Когда коллекция предок анимируется и её кость движется, то доченяя коллекция движется вместе с костью. Эта конструкция почерпнута из моделей от Quake 3, в которых есть отдельно модель ног, торса, головы и оружия. Каждая из которых имеет свои кости, к которым можно крепить другие модели. Таким образом модели видоизменять частично. Например сделать новое оружие, или новую голову и поставить её на старые торс и ноги. Или сделать другой торс, надев его на эти ноги, или даже переделав сами ноги. В общем поле для фантазии.
В отличии от Quake 3, однако, где кости - это список, в ЛОДке кости - это дерево. То есть их можно крепить друг к другу, что даёт больше возможностей в частности при задании путей актёру или при построении различных хитрых механизмов.
Скрипты создания примитивов нужны чтобы автоматизировать создание большого количества примитивов. Скажем есть примитив лестницы ( steps ), но лестничный пролёт между этажами состоит из двух лестниц, и двух площадей между ними. Поэтому, чтобы пролёт создавался автоматически можно написать скрипт, который и будет создавать эти две лестницы и площадки между ними. См. скрипт "aHouse-steps1.pas". Кроме того в скрипте можно указать, на сколько этажей пролёты нужно создавать, из какого количества ступенек должна состоять лестница , нужен ли промежуток под лифт между лестницами и прочие параметры.
Пишутся скрипты в обычном текстовом редакторе, например, входящим в Windows notepad.exe . Но можно использовать, например, Far с подсветкой синтаксиса плагином Colorer, или что-нибудь ещё. Располагаются скрипты в папке "PrimitiveScripts". При запуске программы имена всех находящихся в ней файлов типа *.pas, записываются в список примитивов Primitive->Type. Там их можно выбирать и запускать нажатием кнопки Create.
Для написания скрипта нужно знать язык программирования Паскаль в реализации DelphiWebScripts. Возможно создание скриптов несколько сложно́, но зато создав один раз, их можно использовать многократно и сильно облегчить себе работу.
Подробнее об отличиях можно узнать из файла справки по DelphiWebScript, которую можно загрузить на главной странице сайта.
Эта функция позволяет указать какие CheckBox'ы ( галочки ) и окошке ввода чисел показывать, для этого скрипта, а какие нет. Это делается всего лишь заполнением следующей структуры :
type TParamsAInfo = record Description : string; CheckText : array [0..7] of string; IntText : array [0..7] of string; IntMin : array [0..7] of Integer; IntMax : array [0..7] of Integer; FloatText : array [0..7] of string; FloatMin : array [0..7] of Float; // Double FloatMax : array [0..7] of Float; // Double end;
, где Description - описание скрипта. Выводится в статусной строке.
CheckText - 8 надписей для CheckBox'ы ( галочек ). Если текст не задан, а по умолчанию он не задан, то галочка не показывается.
IntText и FloatText - тоже самое для окошек ввода целых и вещественных чисел.
IntMin, IntMax, FloatMin, FloatMax - минимальные и максимальные значения, которые может принимать целое или вещественное число, соответственно. Если Min больше Max, то соответствующее окошко не показывается.
Пример функции из скрипта "simple.pas" :
// Information function. function Info: TParamsAInfo; begin // Задаём описание скрипта. Result.Description := 'Simple demo. Adds a box, and a sphere.'; // Задаём текст первого чекбокса ( нумерация с нуля ! ) Result.CheckText[0] := 'Rotate cube 45'; // Задаём параметры для окошка ввода первого числа. Result.IntText[0] := 'sp stacks'; Result.IntMin[0] := 2; Result.IntMax[0] := 1000; // Задаём параметры для окошка ввода второго числа. Result.IntText[1] := 'sp slices'; Result.IntMin[1] := 3; Result.IntMax[1] := 1000; end;Функция показывает один чекбокс ( галочку ) с надписью 'Rotate cube 45'. И два окошка ввода целых чисел. Первое - 'sp stacks' и второе - 'sp slices'. Первое может изменяться в интервале от 2 до 1000, а второе от 3 до 1000.
Если функция Info отсутствует, или в ней ничего не задаётся, значит чекбоксы и окошки ввода чисел показываться не будут.
Основная функция скрипта. Она вызывается, когда пользователь программы нажимает на кнопку Create. Функция должна быть объявлена так :
procedure Main( anInt1, anInt2, anInt3, anInt4, anInt5, anInt6, anInt7, anInt8 : Integer; aCheck1, aCheck2, aCheck3, aCheck4, aCheck5, aCheck6, aCheck7, aCheck8 : Boolean aFloat1, aFloat2, aFloat3, aFloat4, aFloat5, aFloat6, aFloat7, aFloat8 : Float; // Double );
Параметры anInt1-anInt8 и aFloat1-aFloat8 - содержат целые и вещественные числа которые ввёл пользователь перед нажатием на кнопку Create. А параметры aCheck1-aCheck8 - содержат значения чекбоксов ( галочек ). Скрипту передаются все 24 параметра, но надо понимать, что могли быть изменены, только те из них, которые были сделаны доступными в функции Info, и поэтому только их значения в дальнейшем следует использовать.
Чтобы создать через скрипт примитив, нужно вызвать функцию Add(Param1 : TParamsA);, задав ей в качестве параметра структуру TParamsA в которой описано какой примитив и с какими параметрами нужно создавать :
type TParamsA = record Type1 : TPrimitiveType; Position, Rotation, Scale : TVector3D; Int1, Int2, Int3, Int4, Int5, Int6, Int7, Int8 : Integer; Check1, Check2, Check3, Check4, Check5, Check6, Check7, Check8 : Boolean; Float1, Float2, Float3, Float4, Float5, Float6, Float7, Float8 : Float // Double end;
где Type1 - определяет какой примитив нужно создавать.
type TPrimitiveType = ( ptNone, ptBox, ptTetraedr, ptPiramid, ptDisk, ptCylinder, ptAnnulus, ptArrow, ptArrow2, ptCone, ptBobbin, ptWasher, ptWasher2, ptSphere, ptPlane, ptIcosahedron, ptDodecahedron, ptOctaedr, ptCubeUnknown1, ptCapsule, ptRoundCube, ptBushing, ptTorus, ptSteps, ptStar, ptGearWheel, ptGeosphere, ptNone2, ptCorner );
Список возможно будет дополнен. По названиям интуитивно понятно, о каком примитиве идёт речь.
Параметры Position, Rotation и Scale - это три вектора, которые задают позицию, ротацию и масштабирование примитива. Ротация задаётся в градусах, в углах Эйлера.
type TVector3D = array [0..2] of Float; // Double;
Параметры Int1-Int8, Float1-Float8 и Check1-Check8 - указывают какие целые, вещественные числа и значения галочек должны передаваться функции создания примитива.
Пример заполнения структуры :
var Param1 : TParamsA; begin // Указываем, что нужно создать бокс. Param1.Type1 := ptBox; // Указываем позицию. В данном случае точка X=1, Y=2, Z=3 Param1.Position := Vector3DMake( 1, 2, 3); // Масштабируем бокс. По X в 3 раза, по Y в 5 и по Z - в 6. Param1.Scale := Vector3DMake( 4, 5, 6); // Задаём вращение куба. Вокруг оси X на 45 градусов, // вокруг остальных осей вращения нет. Param1.Rotation := Vector3DMake(45, 0, 0); // Создаём бокс вызывая функцию Add. Add(Param1);
Всё.
Галочки, целые и вещественные числа устанавливаются так :
Param1.Check1 := True; Param1.Int1 := 7; Param1.Float1 := 1.5;
При создании нескольких объектов подряд стоит помнить, что параметры структуры остаются установленными и после вызова функции. Особенно осторожно в этом плане нужно обращаться с Check'ами и Int'ами. Как выход, можно либо обнулять их после создания каждого примитива, либо просто помнить об этом и учитывать создавая последующие.
Примеры скриптов можно загрузить на главной странице сайта. Можете пытаться их дополнить, изменить, и смотреть что получится. В случае ошибки, программа сообщит в каком столбце и строке скрипта она произошла, и по возможности опишет в чём именно она заключается.
О том какие функции можно использовать в скриптах, можно узнать из файла справки по DelphiWebScript, которую можно загрузить на главной странице сайта.
Сама программа не включает в себя каких либо физических движков, а только позволяет расставить жёсткие тела, их геометрии ( коллизии ) и жоинты в определённые позиции, а также указать некоторые их параметры.
Параметры которые можно указывать соответствуют параметрам жёстких тел в движках ODE ( Open Dynamic Engine ) и Newton ( Newton Dynamics ), но так как параметры у разных физических движков сходны, то их можно использовать и в других движках, например в GLScene'овским движком DCE, или любом сходном.
Терминологическая ориентация редактора - на ODE. Поэтому то, что в Newton'e называется коллизиями или коллайдерами, в ODE и редакторе называется геометриями ( Geoms ).
То, что в Newtone называется сфероид, в ODE называется сфера. Отличие в том, что в Newton'e у сферы можно задавать масштаб по всем трём координатам, а в ODE только радиус. Таким образом в Newton'e из сферы можно сделать нечто подобное мячу для регби , и поставив его "на попа" применять для коллизий актёров. А в ODE для этого рекомендуется использовать капсулу.
Чтобы переключить способ отображения сферы в Newton'овский вид надо поставить галочку File->Save options->LOD Physics Newton.
Помимо влияния на тип отображения сферы, галочка также влияет на тип отображения цилиндров и капсул. Дело в том, что их оси в ODE и Newton'e направлены по-разному. И опция позволяет их направить в соответствии с используемым движком.
В движке ODE до версии 0.6 капсулы назвались CCylinders, в 0.6 были переименованы в капсулы. В программе они тоже названы как капсулы.
Количество геометрий в Newton'e больше чем в ODE, поэтому в случае если вы используете ODE, то лишние нужно просто игнорировать.
В загрузчике моделей для GLScene ни к какому физическому движку привязки нет. Загрузчик только предоставляет три записи в которых описаны тела, геометрии ( коллизии ) и жоинты. А как именно на их основе создавать физические объекты - решает программист.
Возможно может показаться странным, что можно задавать и массу и плотность и объём совершенно независимо друг от друга. Хотя они и связаны простой формулой p = m/v . Также может вызвать вопросы то, что массу можно задавать и для тел ( Body ) и для геометрий ( Geoms ), и много тому подобных вещей.
Это связано с тем, что программа никак не вынуждает вас использовать все параметры одновременно. Вы сами должны определиться что вы хотите использовать, а в чём себя ограничить. Можете использовать массу и объём, а плотность игнорировать, можете использовать плотность и объём, а массу игнорировать. Можете использовать массы отдельных геометрий составляющих трансформированную геометрию, и на их основании вычислить общую массу тела ( Body ), а можете просто использовать ту массу которая указана для Body. В общем это вам решать, что именно использовать, а что из предоставляемого программой не учитывать.
Редактор физики находится на закладке Physics. Чтобы его включить надо поставить галочку Physics->Enabled. Чуть ниже находятся две закладки Physics->Body & Geoms и Physics->Joints.
Body & Geoms - это тела и геометрии. Они представлены в виде древовидного списка. Геометрии привязываются к телам, поэтому сначала можно создавать только Body и лишь потом привязать к ним геометрии. Геометрий и тел может быть много.
Бывают случаи когда геометрию надо привязать не к телу, а к миру, то есть указать в качестве Body - nil. Никаких специальных обозначений в программе для этого не предусмотрено. Но никто не мешает вам, скажем, назвать одно из тел "World", и в своей программе вместо создания этого тела, присвоить ему значение nil, и таким образом считать, что это и есть мир. ( Пример см. в демке )
Кроме того пользователю предоставляется параметр Tag, который нужен только чтобы как-то помечать или группировать различные тела.
Body в редакторе отображаются в виде проволочных конструкций. Эти конструкции визуально отображают массы которые используются для тел в ODE. Массы могут задаваться как куб, сфера, цилиндр и капсула. В большинстве случаев можно пожалуй не обращать на это внимание, и везде использовать что-нибудь одно. В Newton'e вместо подобных способов задания массы используется матрица инерции. Её можно задавать через Scale тела.
Geoms'ы в редакторе задаются цельными ( не проволочными ) объектами. Это куб, сфера, цилиндр, капсула, конус, плоскость, луч, ChamferCylinder ( это что-то напоминающее тор накрытый с обоих концов крышками, или шар обрезанный с двух концов ). Ещё есть TriMesh, который предполагает, что объект - это набор треугольников определяемый прикреплённой к этой геометрии графической моделью из списка мешей. Возможно в будущем будут добавлены и другие объекты.
У каждой геометрии есть список мешей. Предполагается, что эти меши должны быть привязаны к соответствующим геометриям. О том, как именно их лучше привязать, показывать ли все меши сразу, или постепенно имитируя скажем разрушение, должен подумать программист.
Joint'ы содержатся на отдельной закладке в отдельном спиcке. Они бывают типа шарнир, слайдер ( передняя вилка мотоцикла ), петля ( типа дверная ), двойная петля ( переднее колесо автомобиля которое поворачивается и крутится ) и юнивёсал ( типа карданный вал ). Возможно в будущему будут добавлены и другие. Каждый жоинт должен быть связан с двумя телами, которые берутся из списка Body, а также имеет некоторые параметры соответствующие параметрам ODE, о котором лучше почитать на его страничке : http://opende.sourceforge.net/ode-latest-userguide.html. Моторов в программе нету, и всего, что с ними связано тоже.
Перед загрузкой в ЛОДку, модели, анимации и текстуры надо из игры распаковать. Это можно сделать любым распаковщиком знающим формат файлов The Longest Journey. Например, таким: tljextract.zip,
Модели - это *.cir-файлы, анимации - *.ani, текстуры - *.tm. В каждом *.tm-файле может быть по несколько текстур. Их все надо распаковать. MipMaps-уровни в данном случае не нужны.
Тестировался загрузчик в основном на модели Эйприл Райан. С более чем сотней анимаций. Но если какие-то другие модели не работают ( их всего более 70, как написано на диске ), можно посмотреть. Пишите.
Сначала загружается *.cir-модель. Первоначально она будет выглядеть как куча треугольников, это после можно будет поправить. Потом грузятся *.ani-анимации модели. Это можно сделать оптом File->Add many animations ... . Бывают некоторые глюки с анимациями из-за сложностей перевода фреймов из формата игры, и неопределённости с тем, должна такая то анимация проигрываться циклически, или она одноразовая.
Чтобы загруженная модель не выглядела как куча треугольников нужно выбрать понравившийся кадр анимации, в котором модель выглядит хорошо, и сделать его основным. Для этого нужно нажать в Actor->Animation на кнопку с изображением человека и оси координат, удерживая кнопку Ctrl. То есть Actor->Animation->Set selected frame as reference pos. Тогда модель примет вид выбранного фрейма.
Поменять оси координат для модели, чтобы голова была вверху, можно через меню. Edit->Model->Change axis.
Из игры Enter The Matrix поддерживается только загрузка моделей типа *.dcx. К сожалению без анимаций которые мне там очень нравились.
Есть модели Агента Смита, Тринити, Нео, Морфеуса, Ключника, Бейна, Ниоби, Призрака, Близнецов, Мировингина, и прочих в общем всей честной компании. Кроме этого модели разных людей из игры, матричной атрибутики типа телефонов или шнура втыкаемого в голову, машин, самолётов, оружия, пуль с матричным шлейфом, и много чего ещё на 206 мегабайт.
Большинство моделей в трёх качествах. Низкополигонные, среднеполигонные, и высокополигонные. В программу грузятся сразу все три. Модели очень качественные, видимо их делали для фильма, а потом вставили в игру. И возможно модели не моделировались, а как-то сканировались с актёров. Потому, что слишком похожи.
При открытии модели программой возникает окно, где спрашивается раскладка текстуры, и прямой порядок следования текстур или обратный. У моделей порядок вроде обратный, а у всего остального - прямой. Почему так и от чего зависит - не знаю. Поэтому и есть эта опция. С раскладкой текстуры - тоже самое. Надо угадать.
Файлы *.dcx из игры содержат сразу и текстуры и модели. Но, почему-то некоторых текстур иногда не хватает. То есть скажем текстур только 34, а модель ссылается на 37-ую текстуру. В этом случае вместо отсутствующей 37-ой текстуры грузится первая. А потом в программе надо ручками это подкорректировать. Иногда из-за этого ещё и сбиваются все остальные текстуры, что тоже требует ручной коррекции. И ещё есть некоторая неопределённость с прозрачностью. То есть её надо делать самому.
Грузиться должны все файлы кроме одного.
К сожалению, в формате *.dcx-файлов недоразгаданным остался скелет. Я в общем то и взялся за этот формат потому, что очень хотелось выдрать оттуда матричные анимации боёв, ударов всяких, прыжков и прочего. Но вот на этом месте всё застопорилось. Но если кому-то это удастся - пишите, можно будет сделать в программе загрузку и скелета.
Любопытный момент. Когда игра вышла, на неё обрушился шквал критики за квадратные колёса машин в гоночных эпизодах. И было неясно почему это. Теперь же, когда я более менее разобрал формат *.dcx, можно сделать предположение. Это видимо потому, что как уже было сказано, модели в игре обычно в трёх качествах. Низком, среднем и высоком. И там квадратные колёса - это обычно в низком разрешении. Видимо сначала хотели, чтобы низкое разрешение включалось только для объектов заднего плана, а потом в настройках сделали так, чтобы его можно было включать всегда. Ну и получились квадратные колёса, для тех, кто выбрал низкое разрешение.
Этот формат файлов отводит под имена текстур всего 8 байт, и 3 под расширение. Поэтому при сохранении в этот формат, надо сперва изменить названия файлов текстур на более короткие.
Другая особенность этого формата файла - это то, что под индексы вершин отводится всего 2 байта или 16 бит. А в 16 бит помещается максимум 65536 элементов. Если же какой-то программой в них используются знаковые числа, то число элементов вообще уменьшается до 32767. Поэтому рекомендуется большие меши разделять на более мелкие.
Это формат моделей из игры Quake 1. Файлы *.mdl (не путать с моделями от Халф-Лайфа). Программа может их только читать. Внутри файлов находятся текстуры, модель и её анимации. Упаковка вершин сделана также как у формата *.md2. См. его описание. Сжатия текстурных координат не производится.
Модели в этом формате в основном низкополигонные, так как игра старая, но смотрятся в общем то не плохо. В этом формате в игре записаны не только монстры, но и некоторые предметы, например горящие факелы.
Некоторые фреймы в формате записываются со своими временами показа, эту информацию ЛОДка не читает, так как не умеет показывать фреймы с индивидуальным временем.
Также не читаются ориентированные по осям коробки-коллайдеры и позиция камеры. Может быть позже будут добавлены.
Формат тестировался на малом колличестве файлов, так что если у вас какой-то файл не открывается - присылайте, посмотрим. Также интересуют сайты где можно скачать побольше моделей этого формата. Знаете - пишите.
Это формат моделей из игры Quake 2. Файлы *.md2. Программа может их читать и записывать. К сожалению формат позволяет хранить только один меш и одну фэйс-группу. Зато размер файла получается довольно небольшим из-за того, что на каждую вершину в нём отвтдится всего 3 байта, вместо обычных 12 ( 3 числа типа Single ). Это достигается за счёт того, что для каждого фрейма хранятся свои масштаб и позиция, а вершины его как бы рассполагаются на шкале от 0 до 255. Минимальная на нуле, максимальная на 255, а остальные округляются к ближайшим целым числам. Таким образом происходит потеря качества, но зато размер ужимается почти в 4 раза.
Подобное сжатие происходит и с текстурными координтами, только их ужимают менее крепко. До четыёрх байт, вместо обычных восьми ( 2 числа типа Single ).
Каждый файл может хранить до 32 скинов. После открытия файлов скины помещаются в описание файла Menu->File->LOD-file info. Там создаётся блок с тестком 'Additional data from md2 file=', после которого идёт имя файла. Строчкой ниже перечисляются скины строками типа : Skin=weapons/unit01/weapon.pcx. Таких строк может быть несколько. То, что после слов 'Skin=' и есть имя текстуры с относительным путём. Его можно исправить, удалить или вписать своё.
Помимо имени текстуры далее могут идти дополнительные данные OpenGL. Я не знаю что это, поэтому в ЛОДке они помещаются в виде блока шестнадцатеричных 32-битных чисел. Их тоже можно редактировать, или удалить.
При сохранении все эти данные блока считывается и помещаются обратно в файл.
В файл можно сохранять как анимированные модели, так и статичные, при этом в них просто создаётся один единственный фрейм с данными.
Из проблем с форматом файла могу отметить следующие:
Кто знает ответы - пишите.
Помимо мешей формат позволяет сохранять кости и коллайдеры. На каждый фрейм анимации приходится по одному положению для каждой кости и по одному коллайдеру.
Модели актёров в Quake 3 состоят из четырёх частей (ноги, торс, голова, оружие). Каждая часть имеет свои анимации, которые могут проигрываться независимо от остальных. Руки могут стрелять, а ноги в этом время бежать, прыгать, присядать, стоять, ходить. А руки в этом время могут подолжать стрелять независимо от действий ног.
Кости нужны для того, чтобы привязывать части тела друг к другу. Торс привязан к кости ног, оружие и голова к костям на руке торса и на шее торса. Таким образом когда ноги подпрыгивают, то и торс подпрыгивает вместе с ними. Когда торс двигает рукой, то и оружие, привязанное к кости руки, тоже двигается вместе с ней.
К сожалению в формате md3 нет стандартных средств для хранения анимаций, поэтому к каждой анимации требуется файл *.cfg. Это не очень удобно. И поэтому программа LODka делает небольшой трюк, чтобы этого избежать. В конец поля (StrFile) заголовка файла заносится сигнатура 'LODka3D', а в имена коллайдеров, которые в принципе зачем нужны - непонятно, заносятся имена анимаций текущего фрейма. Таким образом если открывать сохранённый ЛОДкой файл, то программа сначала проверяет наличие сигнатуры в заголовке, и если сигнатура присутствует, интерпретирует имена коллайдеров как анимации, к которым фреймы относятся.
Для сохранения вершин в формате md3 используется сжатие. Вместо 12 байт на вершину (3 числа типа Single), отводится 6 байт (3 числа типа SmallInt). Это накладывает определённые ограничения. Положения вершин должны быть в области от -512 до 511,984375 .
Каждый меш в этом формате может иметь несколько скинов. При загрузке список скинов извлекается из файла и помещается в виде текста в информацию о файле. File->LOD-file info. Там её можно отредактировать, и при сохранении информация запишется обратно в файл.
Поскольку программа может содержать много коллекций анимаций, а формат MD3 поддерживает только одну, то при сохранении, если коллекций много, будет задан вопрос, какую именно коллекцию сохранять.
Чтобы увидеть значение кнопки, нужно навести на неё мышь и прочитать всплывающую подсказку.
Чтобы увидеть значение кнопки, нужно навести на неё мышь и прочитать всплывающую подсказку.
Чтобы увидеть значение кнопки, нужно навести на неё мышь и прочитать всплывающую подсказку.
Чтобы увидеть значение кнопки, нужно навести на неё мышь и прочитать всплывающую подсказку.
Эта закладка доступна только в режиме редактора текстуры. Чтобы в него перейти надо нажать F4.
Чтобы увидеть значение кнопки, нужно навести на неё мышь и прочитать всплывающую подсказку.
Чтобы увидеть значение кнопки, нужно навести на неё мышь и прочитать всплывающую подсказку.
Чтобы увидеть значение кнопки, нужно навести на неё мышь и прочитать всплывающую подсказку.
Чтобы увидеть значение кнопки, нужно навести на неё мышь и прочитать всплывающую подсказку.
Не забывайте сохранять созданные и отредактированные текстуры !
Это тот древовидный список, который находится в самом верху закладки Actor.
Чтобы увидеть значение кнопки, нужно навести на неё мышь и прочитать всплывающую подсказку.
Чтобы увидеть значение кнопки, нужно навести на неё мышь и прочитать всплывающую подсказку.
Чтобы увидеть значение кнопки, нужно навести на неё мышь и прочитать всплывающую подсказку.
Чтобы увидеть значение кнопки, нужно навести на неё мышь и прочитать всплывающую подсказку.
Чтобы увидеть значение кнопки, нужно навести на неё мышь и прочитать всплывающую подсказку.
Включить окно редактора групп сглаживания Smooth groups можно нажав на кнопку Model->Triangles->Smoothing group panel ...
Чтобы увидеть значение кнопки, нужно навести на неё мышь и прочитать всплывающую подсказку.
Включить окно редактора световых схем light schemes можно через меню Menu->Edit->light schemes ..., или кнопкой над экраном редактора.
Чтобы увидеть значение кнопки, нужно навести на неё мышь и прочитать всплывающую подсказку.
Общая формула для вычисления ослабления света - это:
k = Const attenuation +Linear attenuation*Distance
+Quadratic attenuation*Distance*Distance
Параметры света влияют на модель, только когда у её материала включён соответствующий параметр. Например, если у материала модели зеркальный цвет ( specular color ) выставлен в ноль, то есть в чёрный, то как его у источника освещения не увеличивай, на этот материал он влиять не будет.
Включить окно генератора карты освещённости ( лайтмэпов ) можно через меню Menu->Edit->LightMap generator ..., или кнопкой над экраном редактора.
Чтобы увидеть значение кнопки, нужно навести на неё мышь и прочитать всплывающую подсказку.
Это значит, что не надо испытывать программу на прочность. Миллиард вершин или треугольников ни в какую программу не влезет. Слишком сложно понаставить проверок на все возможные подобные ситуации, поэтому просто надо соизмерять возможности и не пытаться запихнуть в ЛОДку весь Vice City, или что-нибудь подобное. Скорее всего программа либо зависнет, либо вылетит без предупреждений.
В Undo каждый раз сохраняются все текущие данные программы. То есть, если загрузить в ЛОДку тысячу анимаций, а потом начать их редактирвоать, то при каждом Undo, вся эта тысяча анимаций будут запоминаться. А если ещё при этом и размер Undo сделать огромным, то память в конце концов кончится. Если уж очень надо редактировать именно тысячу анимаций разом, то лучше уменьшить размер Undo до минимума.
В прокси, скелетных и вершинных анимациях нельзя делать слишком больших уровней вложенности. Это ограничение не ЛОДки, а OpenGL.
Слишком много огромных текстур тоже напихивать не рекомендуется.
Язык программы - английский. Связано с тем, что на нерусских Виндос могут возникать проблемы с отображением русского языка.
Многоязыковой поддержки нет. Так как она довольно сильно усложняет программирование. Вместо простой строчки ShowMessage('Hello world!');, надо вводить переменную, вставлять её вместо текста, саму строчку переносить куда-то в другое место, что в последствии осложняет чтение и редактирования кода, да и сама программа раздувается.
Если бы программа была простой, а текста мало, то можно было бы потратить на это время. Но программа довольно большая, и текста в ней очень много. Вместо того, чтобы этим заниматься, думаю, что лучше написать чего-нибудь более полезное.
Программа является бесплатной для коммерческого и некоммерческого использования. Формат файлов *.lod также является бесплатным для коммерческого и некоммерческого использования.
Единственная просьба упомянуть программу где-нибудь в титрах или в About.
Если вы не нашли тут ответа на свой вопрос, то рекомендуется :