PDA

Просмотр полной версии : Изучение формата im файлов. Советы, примеры, достижения



jim_spb
11.10.2010, 15:53
Как это сделать
Открываем кабину для редактирования в эксплорере. Для стекол в кабине использован материал "material #174m.onetex". Это единственный материал, в котором степень непрозрачности отлична от 100%.

http://murmansk-trainz.ru/images/manuals/matl_opacity/Chs8opacity1.png

Данный материал используется в трех мешах - непосредственно в кабине и в двух боковых окнах. По-видимому, в игре для одного дополнения используется одна таблица материалов для всех мешей, поэтому свойства этих материалов с одним именем везде должны быть одинаковы. Иначе, меш, подгружающийся позже других, заместит значения параметров, и изменений вы не увидите. Нам понадобится отредактировать три им файла, использующие материал стекла - chs8cab.im, window_l.im и window_r.im
Степень непрозрачности материала задается числом с плавающей точкой, которое располагается в третьем двойном слове после имени материала, его значения от 0 (полностью прозрачный) до 1 (полностью непрозрачный).
Открываем меш в хекс-эдиторе и находим данный материал (можно вбить в поиск #174)

http://murmansk-trainz.ru/images/manuals/matl_opacity/Chs8opacity2m.png (http://murmansk-trainz.ru/images/manuals/matl_opacity/Chs8opacity2.png)

В данном месте файла адрес этого двойного слова не кратен 4, поэтому его не получится преобразовать в число с плавающей точкой прямо тут же. В таком случае можно просто открыть новый документ и скопировать туда эти 4 байта

http://murmansk-trainz.ru/images/manuals/matl_opacity/Chs8opacity3.png

Преобразовываем в число с плавающей точкой (в Hex-editor Neo - <Ctrl>+<4>)

http://murmansk-trainz.ru/images/manuals/matl_opacity/Chs8opacity4.png

Вот оно! Теперь можно задать новое значение этой величины, например 0.12

http://murmansk-trainz.ru/images/manuals/matl_opacity/Chs8opacity5.png

Преобразовываем число в шестнадцатиричный вид в байтовом представлении (в Hex-editor Neo - <Ctrl>+<ноль>, потом <Ctrl>+<6>)

http://murmansk-trainz.ru/images/manuals/matl_opacity/Chs8opacity6.png

Копируем эти байты и вставляем в файл меша вместо исходных

http://murmansk-trainz.ru/images/manuals/matl_opacity/Chs8opacity7.png

В меше кабины данный материал используется в двух местах. Продолжим поиск, найдем этот материал

http://murmansk-trainz.ru/images/manuals/matl_opacity/Chs8opacity8.png

и заменим в нем те же 4 байта

http://murmansk-trainz.ru/images/manuals/matl_opacity/Chs8opacity9.png

Меш кабины отредактирован. Нажимаем <Ctrl>+<S> и сохраняем файл. Ту же операцию надо произвести для мешей боковых окон - window_l.im и window_r.im
В заключение несколько скринов. Я поставил на двухпутном участке 2 секции электровоза ЧС8.
Слева - секция А с кабиной с прозрачными стеклами, справа - секция Б, в ней все в оригинале.

http://murmansk-trainz.ru/images/manuals/matl_opacity/Chs8opacity10am.jpg (http://murmansk-trainz.ru/images/manuals/matl_opacity/Chs8opacity10a.jpg)

Виды из кабины дневной и ночной до внесения изменений (непрозрачность - 35%)

http://murmansk-trainz.ru/images/manuals/matl_opacity/Chs8opacity10m.jpg (http://murmansk-trainz.ru/images/manuals/matl_opacity/Chs8opacity10.jpg) http://murmansk-trainz.ru/images/manuals/matl_opacity/Chs8opacity11m.jpg (http://murmansk-trainz.ru/images/manuals/matl_opacity/Chs8opacity11.jpg)

То же самое при значении параметра 0.12

http://murmansk-trainz.ru/images/manuals/matl_opacity/Chs8opacity12m.jpg (http://murmansk-trainz.ru/images/manuals/matl_opacity/Chs8opacity12.jpg) http://murmansk-trainz.ru/images/manuals/matl_opacity/Chs8opacity13m.jpg (http://murmansk-trainz.ru/images/manuals/matl_opacity/Chs8opacity13.jpg)

Удачной поездки!

Добавлю еще немного. Иногда приходится превращать односторонний материал в двухсторонний или наоборот. Это совсем несложно. Признак двухсторонности находится во втором двойном слове после имени материала. 1 - материал двухсторонний, 0 - материал односторонний.
Вот иллюстрация
http://murmansk-trainz.ru/images/manuals/matl_opacity/twosidedm.png (http://murmansk-trainz.ru/images/manuals/matl_opacity/twosided.png)

proton2
11.10.2010, 17:53
Класс!!! Дима, большое спасибо за такую подробную инструкцию. Еще никто так не влезал в формат im файла.

Наверное это сообщение стоит выделить в отдельную тему как хороший туториал. Вообще, так если подумать, если бы потом кто-нибудь описал спецификацию формата im файла, то какие бы возможности открылись.......

ZIMA
13.10.2010, 18:48
Ребята. Я в ГТА несколько лет вот так файлы в НЕХ редакторе шерстил. Могу сказать, что у im файла очень простая структура. Данным способом можно так же добавлять точки привязки к любой модели, без расконвертирования. Например точку для машиниста в локомотив, в который ее забыли поставить.

bizzonchik
13.10.2010, 19:06
Например точку для машиниста в локомотив, в который ее забыли поставить.
Или не захотели...
Всегда убивала пустая кабина в 1628...

ZIMA
13.10.2010, 19:32
В 1628 как.раз таки есть точка для машиниста. Но называется она a.driver а.нужно a.driver0. В этом и проблема. Я пробовал это поправить. Но там стоит защита на CRC и изменив модель даже на байт, электровоз перестает работать. Без скриптов все работает

VADO
13.10.2010, 20:47
Но там стоит защита на CRC и изменив модель даже на байт, электровоз перестает работать
Дим, странно, но ВЛ10у-882 работает без проблем, скорее всего косяк идет из-за переименования самой точки, возможно она как-то завязана со скриптом.

amd103
14.10.2010, 00:43
В 1628 как.раз таки есть точка для машиниста. Но называется она a.driver а.нужно a.driver0. В этом и проблема. Я пробовал это поправить. Но там стоит защита на CRC и изменив модель даже на байт, электровоз перестает работать. Без скриптов все работает
Это вряд ли. Там стоит защита только на смену куида. Так что переименование не работает по другой причине.

Don_Capone
26.10.2010, 14:53
Значит так. Выяснилось, что для эффекта качания кабины надо ковырять сам файл модели. Может кто подскажет, каком образом это можно сделать?

ZIMA
27.10.2010, 15:14
Don_Capone, Заанимировать всю кабину возможно только имея исходник на руках

Don_Capone
27.10.2010, 16:18
А расконвертировать не получится?

proton2
27.10.2010, 17:32
Значит так. Выяснилось, что для эффекта качания кабины надо ковырять сам файл модели. Может кто подскажет, каком образом это можно сделать?

Совсем не обязательно расконверчивать. На RailUnion в теме "Все модели вагонов метро" Combine выложен замечательный скрипт, который реализует это качание.
http://www.railunion.net/forum23/topic8216-45.html

А вообще сообщение немного не по теме.

Don_Capone
28.10.2010, 04:50
Спасибо, только вот всё равно не качает :( То ли он только для дефолтного ПС, то ли я не в то место скрипта этот код пихал, то ли не весь код надо, а только часть. Может есть ещё какие-то мысли по этому поводу? Если не охота оффтопить - можно в личку.
В любом случае, твоё сообщение по этому вопросу самое полезное и информативное, из полученных за несколько дней.

Don_Capone
29.10.2010, 11:17
Мне всё-таки удалось выделить из общей массы код, отвечающий за колебания. И самое главное - получилось вживить его в скрипт кабины! Я безмерно счастлив! Теперь осталось только настроить частоту и амплитуду колебаний, и получится отличная качовая кабина :i_am_so_happy:

proton2
29.10.2010, 12:53
Расскажи тогда как ты это сделал. Буду благодарен. Тоже себе хочу такую штуку сделать.

ZIMA
12.11.2010, 19:08
Урок для тех, кто хочет передвинуть или научиться добавлять точки привязки непосредственно в модель.


ВНИМАНИЕ!!!

Пользуясь методами описанными в этом уроке, вы можете нарушить чужие авторские права, измененные модели не могут быть опубликованы без согласия автора исходника
Для работы пригодятся следующие программы: Hex Workshop, Attachment Maker, Trainz Mesh Viewer, Mesh Text Viewer.
Для начала выберем модель, на которой мы будем тренироваться. Я возьму модель ВЛ10-1628 и поставлю ей точку привязки для машиниста. Открываем куид электровоза для редактирования и в папке vl10_body выбираем модель vl10.im и сделайте резервную копию файла.
Для начала откроем файл программами HexWorkshopи параллельно в MeshTextViewer и рассмотрим структуру *.IMфайла,
http://s43.radikal.ru/i100/1011/28/db58d046b257t.jpg (http://s43.radikal.ru/i100/1011/28/db58d046b257.jpg)

Первые четыре байта это ID файла. Следующие четыре байта очень важные – это размер файла после ID то есть реальный размер файла минус четыре первых байта. Все числовые параметры в файле переведены в 32х битовый формат. Далее идут байты, которые нам для изучения не понадобятся (там содержится информация о геометрии, материалах и текстурных координатах). Перейдем к секции который содержит информацию о точках привязки. В HexWorkshop жмем F3 и ищем следующее
http://s53.radikal.ru/i141/1011/5c/a0a795ce1267t.jpg (http://s53.radikal.ru/i141/1011/5c/a0a795ce1267.jpg)

ATCH это IDсекции содержащей точки привязки, следующие после него четыре байта – это размер данной секции у нас это 1468 байт. Далее пропускаем четыре байта. После них идут четыре байта, которые указывают на количество точек привязки, содержащиеся в секции у нас содержится 24 точки
http://s60.radikal.ru/i169/1011/2b/b51e19765057t.jpg (http://s60.radikal.ru/i169/1011/2b/b51e19765057.jpg)

Дальше идет инфа непосредственно о точках. Сама точка привязки начинается с тэга a.* Например a.radio Перед тэгом находятся четыре байта которые указывают размер контейнера, в котором содержится название точки, размер указывается в количестве символов и должен быть кратен четырем в большую сторону. В точке a.radio 7 символов, ближайшее число кратное четырем – 8, значит размер контейнера будет 8 символов. В точке a.limfront 10 символов, соответственно контейнер будет размером в 12 символов и т.д.
http://s013.radikal.ru/i325/1011/d9/edecb07fd620t.jpg (http://s013.radikal.ru/i325/1011/d9/edecb07fd620.jpg)

Следующие байты – сам контейнер с названием точки. Занимает ровно столько байт, сколько было указано перед ним. Неизрасходованные байты контейнера заполняются нулями.
http://s14.radikal.ru/i187/1011/60/399df0e0c29ct.jpg (http://s14.radikal.ru/i187/1011/60/399df0e0c29c.jpg)

Следующие 36 байт – это ориентация точки в пространстве. В них записана матрица вращения т.е. уже вычисленные значения углов. И последние 12 байт секции точки – это её координаты по осям XYZ, соответственно по четыре байта на каждую ось. Изменяя эти координаты можно перемещать точку в пространстве. Далее идет информация о следующей точке
http://s015.radikal.ru/i330/1011/13/7a85222e4174t.jpg (http://s015.radikal.ru/i330/1011/13/7a85222e4174.jpg)

ZIMA
12.11.2010, 19:17
Это была теория, теперь перейдем к практике. Чтобы облегчить себе жизнь, и не вычислять вручную углы поворота и координаты точки, можно использовать 3DSMAX, а еще проще вышедшую недавно утилиту AttachmentMaker. Откроем файл vl10.imв Attachment Maker. Жмем кнопку Add Attach (1), пишем название точки a.driver0 в поле Name (2), в поле Position (3) задаем координаты точки или же двигаем её в проекционных окнах курсором. Координаты я вычислил заранее методом тыка.
(4) В конце сохраняем меш выбрав SaveAttMesh (5)
http://s44.radikal.ru/i104/1011/81/a0d37579fc35t.jpg (http://s44.radikal.ru/i104/1011/81/a0d37579fc35.jpg)

В указанной папке у нас сохранился файл attach_mesh.im. Открываем его и файл vl10.im в Hex Workshop в секции точек привязки ATCH, файла attach_mesh.im видим созданную нами точку a.driver0 Затем выделяем все байты данной точки (1), и копируем их в буфер обмена (2)
http://i066.radikal.ru/1011/cb/b80ec47d7bf8t.jpg (http://i066.radikal.ru/1011/cb/b80ec47d7bf8.jpg)

Далее переключаемся на файл vl10.im, перемещаемся в конец файла и в самом конце под курсор (1) вставляем то, что было скопировано (2)
http://s014.radikal.ru/i327/1011/4b/64e4340fd9c4t.jpg (http://s014.radikal.ru/i327/1011/4b/64e4340fd9c4.jpg)

В начале у нас было в модели 24 точки привязки, о чем свидетельствовал счетчик количества
http://s60.radikal.ru/i169/1011/2b/b51e19765057t.jpg (http://s60.radikal.ru/i169/1011/2b/b51e19765057.jpg)

После добавления новой точки, их количество стало равно 25, меняем значение в счетчике с 24 на число 25, переведя его в 32х битовый формат. Для перевода из одного формата в другой можно воспользоваться встроенным хэлпером (1) В появившемся окне устанавливаем порядок байтов Intel (2), тип данных unsigned long (3) В поле десятичных значений (4) пишем число, на выходе получаем это число в 32х битовом формате (5) Далее находим счетчик количества точек в секции (6), смотрим его значение (7). Вставляем сконвертированное значение 19000000 (5) в счетчик (6)
http://s004.radikal.ru/i207/1011/14/ca1d4b43d78ft.jpg (http://s004.radikal.ru/i207/1011/14/ca1d4b43d78f.jpg)

В результате в сех манипуляций у нас увеличился размер секции точек привязки. Нужны вычислить получившийся размер и внести новую информацию в файл. Находим байты (1) содержащие информацию о размере. В них указан старый размер (2) 1468 байт
http://i013.radikal.ru/1011/30/ce06db047906t.jpg (http://i013.radikal.ru/1011/30/ce06db047906.jpg)

Далее пропускаем эти байты и выделяем после них все данные до самого конца (1) Смотрим получившуюся сумму (2) У нас получилась сумма 5FC Затем открываем конвертер (3) и выставляем параметры как на рисунке. Вписываем сумму 5FC (4) м на выходе в десятеричном исчислении получаем результат 1532 байта (5)
Снова открываем конвертер (6), расставляем параметры как на картинке.В поле десятичных значений (7) вписываем наше значение 1532 и получаем его в 32х битовом формате (8) FC050000
http://s005.radikal.ru/i209/1011/ba/00714da8cb42t.jpg (http://s005.radikal.ru/i209/1011/ba/00714da8cb42.jpg)

Вот это значение, четыре байта FC05 0000 мы вписываем на место старых четырех байтов (1) после ID ATCH Таким образом вместо старого размера 1468 в дата инспекторе (2) должно появиться число 1532
http://i013.radikal.ru/1011/30/ce06db047906t.jpg (http://i013.radikal.ru/1011/30/ce06db047906.jpg)

Так же у нас изменился и общий размер файла. Сохраняем файл vl10.im и смотрим его размер, у нас получилось 861 086 байт
http://s015.radikal.ru/i333/1011/02/f926d2697584t.jpg (http://s015.radikal.ru/i333/1011/02/f926d2697584.jpg)

Теперь от 861 086 байт просто отнимаем 8 и получаем 861 078 байт.
(1)Конвертируем
(2)число 861078
(3) в 32х битовый формат, получаем 96230D00 и эти байты вписываем вместо четырех байт после ID файла (4)
http://s008.radikal.ru/i303/1011/1d/b38674b4e2f2t.jpg (http://s008.radikal.ru/i303/1011/1d/b38674b4e2f2.jpg)

Сохраняем модель и проверяем в игре
http://s56.radikal.ru/i151/1011/6d/975a9a767774t.jpg (http://s56.radikal.ru/i151/1011/6d/975a9a767774.jpg)

Таким образом, хоть и не очень быстрым, можно добавлять любое разумное количество точек привязки. Или же просто изменять их координаты.
З.Ы. Да простит меня Combine за ковыряние в Выльнике :)

Arix
13.12.2010, 20:04
ZIMA, спасибо, это интересно. А я научился добавлять точки привязки другим способом. Любую точку можно добавить, даже не ковыряя меши. Вот, например, мне обидно, что многие вагоны имеют неплохую, а порой и очень хорошую внутреннюю отделку, но у них нет вида из салона и нет точки a.cabfront для его размещения. Я не мог с этим мириться и нашёл способ исправления. Создаем любым доступным способом простейший меш типа attach_mesh.im (можете обозвать его как угодно) и ставим в него нужную нам точку привязки (её придется подгонять методом тыка или вычислить её правильное положение), в данном случае a.cabfront. Этот "аттач" копируем в папку с объектом и прописываем его в конфиге в разделе mesh-table. Ну и прописываем тэг interior. Если готового салона для этого вагона нет (как в моих случаях), но сам вагон имеет хорошую или устраивающую вас внутреннюю отделку, то делаем салон из самого вагона. Создаем копию вагона, меняем kind на "interior", приводим конфиг в нужный вид для этого типа объекта, ставим свой куид. И прописываем его в конфиге вагона. Точку привязки в "аттаче" располагаем "по умолчанию", то есть, в начале координат. Так как мы ставим меш "сам на себя", их начала координат совпадут и салон сразу окажется на правильной высоте. Далее ставим этот вагон на путь, в режиме машиниста садимся в него, выбираем удобные положения для обзора и вписываем их в camera-list в конфиге салона. Таким вот образом я уже давно "осалонил" узкоколейные пассажирские вагоны (ПВ и "Пафаваги"), вагоны ЭР2, ЭД4, ДР1А, Д1, РА2, некоторые зарубежные вагоны. Некоторым локомотивам я добавил точки внешнего обзора (a.outsideview). В трамвае КТМ-19 я добавил outsideviews с более удачным расположением, теперь можно ехать пассажиром, не упираясь взглядом в спинку впереди стоящего сидения.

TRam_
13.12.2010, 20:43
А можно просто использовать кабину от новых скриптованных вагонов - там только положения камеры надо прописать, возиться с мешами не надо.

Arix
14.12.2010, 06:12
А что это за вагоны и где их взять?

dvigatel
14.12.2010, 07:27
https://trainzup.com

Max
14.12.2010, 08:39
ZIMA, интересный метод. А я вот тут озаботился прочтением мануала к проге AttachmentMaker и вот там какой пример использования полученного с её помощью IM-файла.: Имейте в виду, что программа помещает меш приложения в ту же самую папку где и основной, которую Вы открывали, чтобы получить геометрию. В примере ниже оба меша находятся в подпапке папки ассета, названной "qr_smu_body"

mesh-table {
default {
mesh "qr_smu_body\smu_body.im"
auto-create 1
}
attachments {
mesh "qr_smu_body\attach_mesh.im"
auto-create 1
}
}

Поскольку два меша имеют то же самое происхождение (второй построен вокруг первого), никакие другие данные не нужны.


Не будет ли этот метод проще, или он не достигнет необходимого эффекта?

релейщик-автоматчик
15.12.2010, 11:48
Достигнет. ПРОВЕРЕНО мной сегодня

Диспетчер
15.12.2010, 14:13
Max, Ты можешь объяснить как пользоватся программой?

Max
15.12.2010, 17:21
Описание программы. AttachmentMaker – инструмент для создания дополнительного меша, содержащего точки привязки. Никакого опыта работы с GMax не требуется.
Программа обеспечивает просмотр структуры главного меша объекта, в который могут быть помещены приложения. Выравнивание с любыми ориентирами достигается визуально, и точное местоположение точки привязки может быть сделано редактированием положения объекта.
При просмотре структуры может быть изменён масштаб изображения. Следует отметить, что изменение масштаба изображения затрагивает все ракурсы, и что прокрутка масштаба регулирует два ракурса сразу, чтобы поддержать выравнивание вида. Это упрощает работу.
AttachmentMaker использует TrainzMeshImporter, входящий в комплект Trainz на 17 апреля 2010 года, чтобы создать меш приложения.
Программа может также сделать невидимый меш без приложений. Нет ничего проще. Откройте программу и выберете в Меню Save Attach Mesh. В выпавшем окне найдите папку, куда Вы хотите его сохранить, затем окно сообщения спросит, желаете ли Вы сделать невидимый меш. Если Вы щелкнете «да», то меш с одной маленькой невидимой плоскостью будет сделан, используя указанную Вами папку.

Открытие файла. Цель этой опции состоит в том, чтобы добавить точки привязки к существующему ассету. При наличии конкретного открытого на редактирование ассета, мы можем быстро создать требуемое приложение.
Чтобы добавлять нужные точки к ассету, во-первых используйте Content Manager, чтобы открыть ассет на редактирование и найти главный меш. Затем запустите Attachment Maker и откройте меш, используя меню "Файл" - "Открыть".
Объект показан в трех проекциях. Вверху – основная проекция (вид сверху), ниже – вид спереди, и ниже справа - вид сбоку (стандартная трёхугловая проекция чертежников). Используйте колесо мыши, чтобы изменить масштаб изображения. Давите на колесо мыши и двигайте мышь, чтобы двигать изображение для того, чтобы увидеть нужную вам часть объекта. Размер окна может быть изменен, если тянуть его за край.
Последний обработанный файл меша сохраняется и может возобновиться работу, если кликнуть его имя в меню «Файл». Клик по стандартной кнопке окна закрывает программу. Полный просмотр может быть сделан с мышью, имеющую колесо. Если Вы используете портативный компьютер с двумя клавиатурными кнопками навигации, Вы можете использовать курсор. С помощью мыши курсор можно перемещать по проекциям на экране. При клике на соответствующей проекции она меняет цвет.

Навигация. Местоположение окна и его размер сохранятся для повторного использования, когда Вы снова открываете программу. Графический курсор экрана является геометрическим объектом, который не всегда виден. Если Вы его не видите, значит курсор перемещён мышью за пределы окна. Заметьте, что курсор изменяется на стрелку в главном меню окна.
Также имейте в виду, что курсор должен находиться именно в поле того файла, который вы выбрали из группы, чтобы иметь возможность обрабатывать там данные. Добавляя точки убедитесь, что Вы имеете пересечение осей, видимое по крайней мере в одной проекции.
Нажмите кнопку "Add Attach" в малом окне редактора справа. Желтая тренога точки привязки появится на чертеже модели (во всех проекциях). Следует отметить, что новая точка всегда называется "a. new".
Нажмите левую кнопку мыши в любой проекции на треноге точки привязки, это приведёт к тому, что она будет следовать за курсором, когда Вы перемещаете мышь. Поместите точку в нужное положение на одной проекции, после чего отпустите кнопку мыши. Повторите это действие для второй проекции. Вы можете установить точное трёхмерное положение точки привязки, используя любые две проекции.
В малом окне с помощью кнопки «Add Attach» и кнопки up/down, можно изменить название созданной точки, её положение и вращение. Войдите в нужную опцию, не забывая включать префикс "a." в название каждой новой точки привязки. Программа не проверяет наличие дублирующих названий точек привязки. Это – прерогатива пользователя.
Когда Вы окончательно определили местонахождение точки привязки и назвали её правильно, Правой кнопкой мыши кликните на рисунок, и новая точка привязки будет зафиксирована и занесена в память. Это изменяет цвет треноги с желтого на зелёный, как в GMax. Повторите этот процесс, чтобы добавить другие точки привязки.
Чтобы снова редактировать точки, кликните правой кнопкой мыши по малому окну. Список точек будет открыт, и Вы можете выбрать нужную по имени. Выберете нужную точку и нажмите кнопку "Accept", чтобы сохранить выбор. "Отмена" закрывает окно выбора. Вы можете также изменить выбор кнопками up/down рядом с окошком названия. (Пожалуйста отметьте на данном этапе развития программы не имеется выбора щелчком мыши). Выбранная точка может быть удалена нажатием кнопки "Delete".

Создание нового меша. Когда Вы создали все новые точки привязки, результат сохраняется в виде меша, названном "attach_mesh.im". Название может быть изменено по Вашему желанию в соответствующем диалоговом окне файла.
Для сохранения меша необходимо кликнуть " Save Att Mesh" в меню "Файл". Ваши новые точки привязки преобразованы в меш с помощью TrainzMeshImporter. Меш имеет единственную квадратную плоскость 20mm, невидимую сверху, но видимую снизу (только чтобы проверить её наличие), меш не требует никаких текстур.
Пожалуйста помните, что программа переписывает любой уже существующий в той же папке "attach_mesh.im" файл.
Чтобы редактировать существующий "attach_mesh", во-первых, воойдите в меню «Файл» и нажмите «Открыть», чтобы открыть редактируемый меш с точками. Объект будет открыт. Затем в меню «Файл» нажимают на «Open Att Mesh» и открывают "attach_mesh". Изображения будут загружены и показаны. Редактирование может быть сделано, и меш повторно сохранён, если кликнуть " Save Att Mesh " в меню "Файл".

Что делать с Config.txt. Чтобы заставить точки привязки работать в Trainz, ссылка на меш с точками должна быть добавлена в mesh-table в config.txt соответствующего ассета. Следующий пример добавляет точки к единственному мешу. Имейте в виду, что программа помещает меш приложения в ту же самую папку, где и основной (которую Вы открывали, чтобы получить геометрию). В примере ниже оба меша находятся в подпапке папки актива, названной "qr_smu_body"

mesh-table
{
default
{
mesh "qr_smu_body\smu_body.im"
auto-create 1
}
attachments
{
mesh "qr_smu_body\attach_mesh.im"
auto-create 1
}
}

Поскольку два меша имеют то же самое происхождение (второй построен вокруг первого), никакие другие данные не нужны. Вышеупомянутое предполагает, что "attach_mesh.im" файл находится в той же самой папке, где и основной. Это - обычное расположение для мультимешей. См. Content Creators' Guide для вашей версии Trainz, чтобы правильно расположить папки ассета.
Точки привязки должны теперь вести себя так, будто они - часть основного меша.
Если Вы добавили пассажира, груз, дым и так далее, соответствующие теги необходимо добавить в config.txt файл. Снова обратитесь к Content Creators' Guide.

релейщик-автоматчик
16.12.2010, 06:34
только как бы эту черную 20мм мешь убрать(

Диспетчер
16.12.2010, 09:38
только как бы эту черную 20мм мешь убрать(
А зачем это нужно?

релейщик-автоматчик
16.12.2010, 10:07
ну у меня в кабине качка и получается,что летает черная "оса"

Max
16.12.2010, 14:04
Так в конфиге можно прописать, что меш видна только в режиме редактора.
Я вот никак не могу прикрепить новый меш к этой самой точке. Вот, к примеру, пишу так:
attachments
{
mesh "attach_mesh.im"
auto-create 1
}

warning-light-0
{
att-parent "default"
att "a.N1"
mesh "mesh-2v.im"
auto-create 1
}
СМР ошибок не выдаёт, но и mesh-2v.im не появляется на модели в редакторе. Если в качестве эффекта прописывать сторонний куид (default-mech) - то работает, а меш из собственной папки - нет. Что делать?

релейщик-автоматчик
16.12.2010, 14:29
А как сделать видимой только в редакторе?помоги)
я не совсем понял что ты хочешь сделать? какую мешь куда привязать?

TRam_
16.12.2010, 14:33
ну у меня в кабине качка и получается,что летает черная "оса"в меши с привязками попробуй добавить

attachments {
mesh "qr_smu_body\attach_mesh.im"
auto-create 1
opacity 0
}
}

Max
16.12.2010, 17:53
я не совсем понял что ты хочешь сделать? какую мешь куда привязать?
Я хочу, к существующей меши добавить ещё одну, чтобы она появлялась в той точке привязки, которую я сделал. Вот полный контейнер:
mesh-table
{
default
{
auto-create 1
mesh "baum.im"
}

attachments
{
mesh "attach_mesh.im"
auto-create 1
}

warning-light-0
{
att-parent "default"
att "a.N1"
mesh "mesh-2v.im"
auto-create 1
}
}

Диспетчер
20.12.2010, 22:36
Нашёл такую неприятность-не ко всем мешам порга создаёт мешь с точками привязки....В некоторых случаях при сохранении созданного меша с точками привязки возникает ошибка....и как следствие мешь невозможно сохранить...

Vovan81
07.08.2011, 19:34
Парни а подскажите пожалуйста где можно скачать эту прогу AttachmentMaker?А то весь инет перерыл не нашел.

Masterkit
16.08.2011, 10:33
Подскажите можно ли HexWorkshop изменить имя точки привязки:ph:
Если да то как?

Ant
11.10.2013, 17:53
Картинки бы все восстановить.

4ТЭ10с
12.11.2013, 00:17
Ребята, что вообще за бред? Раньше спокойно точки привязки штамповал на модели, и без ошибок всё шло [во вс. сл. в 9 трейнзе и в 10 всё безошибочно было]. Теперь же trainz 12 (на компе дурацкая windows 8) пишет ошибку; добавил, как надо, прокаммитил. Если просматривать модель после добавки точки привязки в аттачмент мейкере, то они есть, и нормально высвечиваются. Но всё иначе для CMP. http://savepic.net/3993847m.png (http://savepic.net/3993847.htm)
Если можно, объясните поподробнее, пожалуйста

jim_spb
14.11.2013, 20:52
Значит где-то ошибся. Ни трейнз, ни винда тут совершенно не причем. Кидай меш в личку, гляну.

jim_spb
23.11.2013, 15:04
Картинки бы все восстановить.
Все картинки восстановил и залил их в надежное место. Больше они не пропадут.

lexXx
11.11.2014, 03:33
Доброго времени суток! Подскажите пожалуйста как прикрутить кабину на бустерную секцию. На сколько я понял точек привязки кабины на ней нет, так как при переходе на вид из кабины - вид только на рельсы. Через PEVSoft Attachment Maker создал точку привязки, сохранил, создался файл "attach_mesh.im", далее "Asset - mesh-table - создал новую мешь под именем "cab" в списке "att" появилась моя точка привязки именно этой меши, но как теперь привязать к ней кабину? Что делаю не так?
Получилась такая структура:
http://savepic.org/6452698m.jpg (http://savepic.org/6452698.htm)

---------- Сообщение добавлено 11.11.2014 в 12:33 ---------- Предыдущее сообщение размещено 10.11.2014 в 23:25 ----------

Вопрос снят, разобрался!

John Warner
17.12.2014, 15:47
По точкам привязки.
Я тут взялся добавить кой-каких точек в меш, но поимел сначала неудачу, хотя технология отработана на 100%, с помощью Attachment Maker`а.
Вообще, я делаю так: после создания attach_mesh.im я с помощью hex-редактора переименовываю исходные точки исходного меша, дабы они не дублировались, это временами мешает. Ну там, например, ненужный a.limback в a.qqqqqck и тд и тп. И доступна точка, если что, и не мешает.
А тут я столкнулся с проблемой - вроде всё сделал, а игра точек не видит!
По методу пользователя ZIMA (тут в топике, выше) пересобрал секцию аттачей в исходном меше - и обнаружил, что просохатил повторы точек...
Исправил - всё заработало.

ЗЫ Сорри за оффтоп: Мне нужна помощь в одном проекте, который пытаюсь сделать уже год как - мне, видимо, надо топик для этого открыть, да?

ak_timur
17.12.2014, 16:24
Мне нужна помощь в одном проекте
Задай в теме "Вопросы", если будет движение, никогда не поздно создать тему, и перенести туда все, что ее касается.

proton2
21.04.2015, 21:41
Смотрю vl10.im в Mesh_text_viewer

0 File ID: JIRF, Chunk Size: 861014, (file size: 861022) File Type: IDXM
12 Chunk ID: INFO Size: 68 (next chunk: 88) Version: 104
24 Position: 0,000, 0,000, 0,000
36 Rotation: 1,000, 0,000, 0,000, 0,000
52 Number of CHNK type Chunks: 19
56 Influence per Vertex: 0, Influence per Chunk: 0
64 Mesh bounding box minimum X, Y, Z: -1,747, -9,016, -0,209
76 Mesh bounding box maximum X, Y, Z: 1,771, 9,041, 4,998
88 Chunk ID: CHNK Size: 9464 (next chunk: 9560) Version: 100
100 Chunk Index: 0
104 Chunk ID: MATL Size: 212 (next chunk: 324) Version: 103
116 Material Name Size: 44
120 Material Name: *vl10*A7C0A056*material #2809611*m.onetex
164 Property Count: 0
168 Two Sided: 0
172 Opacity : 1,000
176 Ambient 0,898, 0,898, 0,898
188 Diffuse 0,898, 0,898, 0,898
200 Specular 0,067, 0,067, 0,067
212 Emissive 0,000, 0,000, 0,000
224 Shininess : 10,000
228 Number of textures: 1
232 Texture Type: 1 = TEX_DIFFUSE
236 Texture Name Size: 80
240 Texture Name: C:\Program Files (x86)\Autodesk\3dsMax8\meshes\TRS\VL10-1628\A\vl10_2.texture *** NON ENGLISH TEXT ***
320 Texture Amount : 1,000
324 Chunk ID: GEOM Size: 9228 (next chunk: 9560) Version: 201

и у меня возникает вопрос - откуда он берет / высчитывает адрес, с которого начинается next chunk? В im файле при объявлении чанка этот адрес не прописан. Я думал что он берет текущий адрес, прибавляет к нему Chunk Size и получает адрес начала нового чанка, но это не так. Как тогда он высчитывает next chunk?

Смотрим вторую строку листинга. Адрес, в котором сохранен Chunk Size равен 16. Сам Chunk Size равен 68. По логике next chunk должен быть равен текущий адрес (16) плюс Chunk Size (68). Но эта сумма равна 84, а не 88... Почему так? Откуда он тогда берет next chunk: 88?

kemal
21.04.2015, 22:42
proton2, полагаю, недостающие 8 байт - это заголовок чанка.

proton2
21.04.2015, 23:38
proton2, полагаю, недостающие 8 байт - это заголовок чанка.

тогда было бы 92 а не 88. Заголовок чанка CHNK начинается с адреса 88. Далее заголовок в 4 байта и сразу после него данные. Т.е. 16+68 = 84, а не 92. Не катит :( Есть еще предположения?

kemal
22.04.2015, 01:11
Далее заголовок в 4 байта и сразу после него данные.
А вот тут ты не прав. 4 байта идентификатор чанка (JIRF, INFO, CHNK, MATL, GEOM, ATCH, etc), 4 байта размер - вот эти самые 8 байтов. Далее в заголовке есть ещё поле версии, но оно уже входит в размер чанка.

jim_spb
22.04.2015, 05:49
В поле длины указывается количество байтов от начала следующего поля и до конца текущего чанка.

Эрендир
22.04.2015, 07:48
Смотрим вторую строку листинга. Адрес, в котором сохранен Chunk Size равен 16. Сам Chunk Size равен 68. По логике next chunk должен быть равен текущий адрес (16) плюс Chunk Size (68). Но эта сумма равна 84, а не 88... Почему так? Откуда он тогда берет next chunk: 88?
Во-первых, откуда ты взял 16? Первый чанк INFO всегда в 12 позиции, ибо он первый, а заголовок файла 12 байт. Во-вторых, любой чанк состоит из заголовка и непосредственно данных. Заголовок равен 8 байтам.
Заголовок состоит из

Ид чанка (4 байта)
Размера данных чанка (4 байта)


Таким образом получается что след.поз = тек поз + разм.чанк + разм.загл.чанк = 12 + 68 + 8 = 88. Всё верно.

Здесь странным кажется тот факт, что версия чанка не входит в его заголовок, а всегда находится в первой позиции данных.

proton2
23.04.2015, 11:02
Большое спасибо за то, что объяснили!
У меня еще вопрос. Рассматриваем тот же файл vl10.im.
Сразу после идентификатора файла JIFR (который расположен с 0 по 3 байт включительно) записан размер файла 861022 минус заголовок (8 байт) = 861014. Как именно мне вытащить значение 861014 из 4 байтов, которые идут сразу после JIFR?
число 861014 располагается в байтах с 4 по 7 включительно:
В 4 байте в байтовом формате содержится значение 56, это же значение в int формате - 86
В 5 байте в байтовом формате содержится значение 23, это же значение в int формате - 35
В 6 байте в байтовом формате содержится значение 0D, это же значение в int формате - 13
В 7 байте в байтовом формате содержится значение 00, это же значение в int формате - 0

Глупый вопрос, но все же хочу понять, как из int значений 86, 35, 13 и 0 получить значение 861014?
Я знаю что HEX editor может посчитать это автоматически, я хочу понять как можно это сделать руками?

poputchik
23.04.2015, 12:02
proton2, calc ---- D2356 hex ---- 861014 dec

proton2
23.04.2015, 12:42
спасибо, нашел вот такой способ:

int ch1 = arr[4];
int ch2 = arr[5];
int ch3 = arr[6];
int ch4 = arr[7];

int a = arr[7];
a = a*256 + arr[6];
a = a*256 + arr[5];
a = a*256 + arr[4];

size_minus_id = a;

kemal
23.04.2015, 15:21
о_0 индус?

0) читать интами (ну то есть сразу нужным размером).
0а) читать структуру, в которой опять же, поля нужного размера.
1) если уж приспичило доставать из массива, то что-то типа
int size_minus_id=*(int*)(&arr[4]);
или
int size_minus_id=*(int*)(arr+4);

Вот если бы там порядок байтов был другим, то да... Да и то, всё украдено до нас есть функции/макросы.

proton2
23.04.2015, 17:04
int size_minus_id=*(int*)(&arr[4]);
или
int size_minus_id=*(int*)(arr+4);

у меня java а не с++

Эрендир
23.04.2015, 17:36
proton2, а с каких пор в java int имеет отличную от 32х бит длину? Да и там так же обратный порядок. Надо сразу int доставать.

kemal
23.04.2015, 19:00
Эрендир, вопрос, полагаю, не в размере инта, а в работе с указателями. Как там с этим в яве, честно говоря, не силён.
Ну а что касается размера, то, справедливости ради, лучше использовать какой-нибудь uint32_t, чтобы уж наверняка!

proton2
25.04.2015, 00:10
Как это:
Attachment Name size: 8, Name: a.radio
Orientation: [-1,000, 0,000, 0,000]
[0,000, -1,000, 0,000]
[0,000, 0,000, 1,000]

пересчитать в такой вот удобопонятный вид?
Calculated or.: 0.00 -0.00 -180.00

объясните пожалуйста на пальцах.

TRam_
25.04.2015, 00:17
proton2,

https://upload.wikimedia.org/math/b/0/7/b07124a94a7e00ebab0ef1c9369c0ce3.png

Отсюда - https://ru.wikipedia.org/wiki/%CC%E0%F2%F0%E8%F6%E0_%EF%EE%E2%EE%F0%EE%F2%E0

Эрендир
25.04.2015, 07:56
proton2, Не пойму, зачем тебе всё это, когда есть программа для редактирования im файлов, а с ней и готовая библиотека для работы с файлами? Там и матрицы, и кватернионы, и углы Эйлера, и пересчёт между ними.

proton2
25.04.2015, 11:32
Мне нет потребности открывать и редактировать *.im файлы, все что мне нужно я могу смоделить сам.

А ковыряю я это все для практики программирования. Изучил вот разделы Exceptions и IO в Java Core и потребовалось на чем-то практическом руки почесать. Вот и придумал себе практическую задачку. Задачка получилась очень интересной для практики, тут и работа с массивами и ООП и практика применения структур данных и много еще чего интересного.
:ph:

TRam_
25.04.2015, 11:35
разделы Exceptions и IO
но пересчёты углов никак не проиллюстрируют тебе работу с исключениями :)

Эрендир
25.04.2015, 11:37
все что мне нужно я могу смоделить сам
Не всегда. Если исходники потеряны, а охото добавить нормали или ещё чего. Так что иногда в этом есть реальная надобность. Ну или вот, например, нынешний конвертер экспортирует костную аниацию для объектов с нормалями с ошибкой, как быть?

proton2
25.04.2015, 11:59
Вот еще вопрос. Допрыгал я по чанкам до последнего чанка ATCH. Это тот же vl10.im, который рассматривается с начала этой темы.
859546 Chunk ID: ATCH Size: 1468 (next chunk: 861022) Version: 100
859558 Attachment Count: 24

Нормально считываю все до этого места
859574 Orientation: [-1,000, 0,000, 0,000]
859586 [0,000, -1,000, 0,000]
859598 [0,000, 0,000, 1,000]

как писали выше раздел Orientation каждой точки привязки занимает 36 байт: 9 точек-координат матрицы, каждая координата по 4 байта в формате float.
первая координата находится по адресу 859574, ее значение в hex редакторе видно как -1,000. Тут все нормально.
Если каждое значение занимает 4 байта, то следующее значение должно располагаться по адресу 859574 + 4, то есть 859578. И значение должно быть 0. Но Hex Editor по адресу 859578 почему-то выдает значение -1.509958e-007, а должен бы выдавать 0!!!
Потом еще через 4 байта по адресу 859582 он нормально читает значение 0.
Еще через 4 байта по адресу 859586 он должен выдавать 0, а выдает почему-то опять 1.509958E-7.

В итоге после считывания должен получиться такой массив
float [] orientation =
{-1,000, 0,000, 0,000,
0,000, -1,000, 0,000,
0,000, 0,000, 1,000}

а получается такой
float [] orientation =
{-1,000, -1.509958E-7, 0,000,
1.509958E-7, -1,000, 0,000,
0,000, 0,000, 1,000}

Почему в Hex Editor по адресам 859578 и 859586 там где должны быть нули Hex Editor выдает 1.509958E-7?
http://savepic.org/7154522m.jpg (http://savepic.org/7154522.htm)

Дальше после 36 байтов блока Orientation он у меня вполне корректно считывает позишены, каждую через 4 байта. Вот какими позишены должны быть в Mesh Text Viewer
http://savepic.org/7153499m.jpg (http://savepic.org/7153499.htm)
и вот как позишены выглядят у меня
http://savepic.org/7196506m.jpg (http://savepic.org/7196506.htm)
Позишены сходятся.

Почему он тогда на Orientation спотыкается?

TRam_
25.04.2015, 12:44
там где должны быть нули Hex Editor выдает 1.509958E-71.5 * 10^-7 это почти ровно 0 :) . С точностью до 6 порядка включительно.

proton2
25.04.2015, 12:59
Большое спасибо! Уже вполне уверенно получается гулять по чанкам!!!

А как тогда 1.509958E-7 обратно закинуть в 0?
Делать что-то типа (1.509958E-7 & с чем-то) или как-то округлять?

TRam_
25.04.2015, 13:05
proton2, тут поступай как хочешь. Если тебе нужна очень высокая точность вычисления углов, ничего округлять нельзя. Если не нужна, то можешь округлять до нужного тебе порядка. Да, точность в типе float - это 7 знаков (т.е. одна главная и 6 после запятой). Порядок может быть от -37 до +37.

proton2
28.04.2015, 15:08
proton2,

https://upload.wikimedia.org/math/b/0/7/b07124a94a7e00ebab0ef1c9369c0ce3.png

Отсюда - https://ru.wikipedia.org/wiki/%CC%E0%F2%F0%E8%F6%E0_%EF%EE%E2%EE%F0%EE%F2%E0

С округлениями и знаками после запятой разобрался, спасибо! Теперь orientation'ы вытаскиваю нормально.

Получается такая матрица
float [] orientation =
{-1,000, 0,000, 0,000,
0,000, -1,000, 0,000,
0,000, 0,000, 1,000}

Возвращаюсь к вопросу пересчета этой матрицы в углы поворота точки привязки - Calculated or.: 0.00 -0.00 -180.00

В посту Tram'а показан процесс перевода углов поворота в матрицу, а мне нужен обратный процесс - матрицу нужно пересчитать в углы поворота.

Какая должна быть последовательность действий?

TRam_
28.04.2015, 20:37
Решать, как систему уравнений. Но я это делать за тебя не хочу.

proton2
30.04.2015, 15:26
Интересная информация...
Знаменитая программа расконверта im файлов (не буду упоминать ее название, кто знает - тот и так знает, а кто не знает, тому и знать не надо) оказывается врет когда экспортирует данные по точкам привязки в отдельный txt файл (Есть у нее такая опция).

Кабина 2тэ121, файл 12-kab-game-b263.im точка привязки a.bploco_equaliser, Mesh text viewer от PEVSoft выдает следующее:

2028778 Attachment Name size: 20, Name: a.bploco_equaliser
2028802 Orientation: [-0,835, 0,478, 0,272]
2028814 [0,550, 0,726, 0,413]
2028826 [0,000, 0,495, -0,869]
2028838 Position: [-0,811, -1,552, 0,933]

расконвертор имени которого я не называю по этой же точке в файл 12-kab-game-b263.im.attachment.txt выдает такое:
Name: a.bploco_equaliser
Orientation: -1.000000 -0.000000 0.000000 0.000000 0.868882 0.495019 -0.000000 0.495019 -0.868882
Calculated or.: 150.33 -0.00 -180.00
Position: -0.810604 -1.551432 0.933397

Пояснения. Orientation - это матрица поворота точки, считанная из im файла, Calculated or. - это матрица поворота, пересчитанная в обычные человеческие углы.
Сразу видно что по первым 6 значениям матрицы идут не соответствия с информацией, которую выдает Mesh text viewer от PEVSoft, совпадают только последние 3 значения.

В исходнике в Blender'е углы поворота точки a.bploco_equaliser:
x: 154.553
y: -15.796
z: 150.228

а программа-расконверт выдает Calculated or.: 150.33 -0.00 -180.00 - т.е. врет получается? Позишены она считывает правильно, а вот по углам поворота точки врет...

Решил я попробовать пересчитать матрицу поворота в углы с помощью функции


float[] getVector(float [][] matr){
float x = 0, y = 0, z = 0;

y=(float) Math.asin(matr[0][2]);
if (y<Math.PI/2)
{
if (y > -Math.PI/2)
{
x = (float)Math.atan2(-matr[1][2], matr[2][2]);
z = (float)Math.atan2(-matr[0][1], matr[0][0]);
}
else
{
float value = (float) Math.atan2(matr[1][0], matr[1][1]);
z = 0;
x = z - value;
}
}
else
{
float value = (float) Math.atan2(matr[1][0], matr[1][1]);
z = 0;
x = value - z;
}

x=(float) Math.toDegrees(x)*-1;
y=(float) Math.toDegrees(y)*-1;
z=(float) Math.toDegrees(z)*-1;

return new float [] {x, y, z};
}


по первой точке привязки указанная функция выдает такое
http://savepic.org/7198327m.jpg (http://savepic.org/7198327.htm)

получается что эта функция не врет. С начала эта функция почему-то всегда выдает значения с неверным знаком, там где должен быть + она выдает - и наоборот. Чтобы она выдавала корректные значения я домножаю конечный результат на -1, но это грязный хак, хотелось бы конечно чтобы все было корректно без грязных приемов.

Кто может сказать замечания по делу касаемо приведенного алгоритма пересчета из матрицы в углы Эйлера? Он не врет, но осадочек из-за этого домножения на -1 остается...

ZIMA
30.04.2015, 16:27
Боря, тут нужно проверить такую вещь. Дело в том, что часто в разных модельных программах вертикальной осью берётся либо Z, либо Y. К тому же когда из этой программы расконверченную модель открываешь в максе, то она повернута на 90 градусов по одной из осей.

proton2
30.04.2015, 18:14
Спасибо за идею. Предполагаю что игра при открытии im формата где-то учитывает ориентацию объекта (т.е. не перевернуто ли само начало координат), если начало координат не перевернуто - то домножать на -1, если перевернуто - то не домножать.

Возможно что он считывает данные или в 24 строке или в 36 и на основании этого решает - инвертировать или не инвертировать знак у всех координат углов поворота точек привязки.
0 File ID: JIRF, Chunk Size: 861014, (file size: 861022) File Type: IDXM
12 Chunk ID: INFO Size: 68 (next chunk: 88) Version: 104
24 Position: 0,000, 0,000, 0,000
36 Rotation: 1,000, 0,000, 0,000, 0,000

в любом случае с этим домножением на -1 я проверил почти все точки в кабине 2тэ121. Встречались случаи когда точки в исходнике имели координаты поворота, отличающиеся от координат поворота, вычисленных моей функцией. Я ради эксперимента выставлял в исходнике те точки поворота, который рассчитывал мой алгоритм - и точка привязки разворачивалась точно как исходная!

Например у меня в исходнике есть точка a.empty02, у которой углы поворота X: 270, Y: 0, Z: 45.
Я конвертил объект в im, потом в своей программе открывал полученный im, считывал матрицу, вычислял из нее углы поворота и они получались другими:
X: -90, Y: -0, Z: 44.999146
но когда я вбивал эти углы в исходник - точка получалась повернута ровно так же, как исходная точка с углами поворота X: 270, Y: 0, Z: 45. То есть получается что функция которую я использую работает правильно, просто в исходнике точка чрезмерно выкручена по углам поворота, а при конвертации в im плагин вносит поправку в чрезмерно перекрученные углы.

Эрендир
30.04.2015, 23:24
Бегом учить что углы поворота могут быть только в пределах от -180 до +180, и никаких 270 быть не может. 270 это уже проварот на -90. Как ты делал перевод углов Эйлера в матрицу и обратно и не вник в тонкости.

proton2
30.04.2015, 23:49
Я только сегодня до этого допер, в тему вникал на ходу. Угол 270 мне нигде не попадается. Это в кабине точка повернута на 270, а при экспорте в IM плагин ее скручивает на -90. Сначала я этого не понимал - думал куда делись мои 270? Когда я читаю im файл, там уже никаких 270 нету, там только -90, теперь мне понятно что так оно и должно быть. Поэтому у меня матрица нормально переводится в углы Эйлера. В запись im файла я пока не лезу, экспериментирую только с его чтением и распихиванием информации по структурам данных.



New