ScorpioT1000
Работаем
offline
Опыт: отключен
|
Collada формат моделей .DAE (+ FCollada API) model format
Эта тема, где я буду складывать некоторые вещи касательно Collada.
— Wikipedia. После того, как моя работа с коллада будет закончена, хочу, чтобы эти файлы остались - вдруг, пригодятся.
Я остановился на API FCollada, поскольку данный пакет очень быстро поставился, в отличие от других.
Однако, в 2008 году Feeling Software Inc. перестали поддерживать данный API и стали работать над другим, коммерческим. Но это не значит, что я обязан отказаться от его использования. Документация из кода FCollada
Пример реиндексации геометрии
Структура хранения костей
Далее есть некоторые беседы по поводу Collada из icq. Тоже выложу здесь, чтобы не потерять =)
» О том, что делать, когда информации о позициях меньше, чем самих вершин
ScorpioT1000, 23.12.2012 20:50:14:
смотри мы обсуждали что нормалей 6,позиций 4 и индексов 6, дальше получается что у тебя каждый индекс указывает на каждую новую позицию ? ScorpioT1000, 20:50:25:
ну когда ты говорил что создаешь ScorpioT1000, 20:50:35:
ну да в принципе так и есть ScorpioT1000, 20:50:47:
т.е. число индексов = числу вершин Jonny, 20:50:48:
да, получается 6 индексов 6 вершин, каждый индекс указывает на уникальную вершину ScorpioT1000, 20:50:55:
ясно ScorpioT1000, 20:51:00:
я щас так сделаю ScorpioT1000, 20:51:25:
тока меня напрягает то что если полигон состоит из независимых треугольников, не будет ли там швов? ScorpioT1000, 20:51:49:
ну вдруг рендер какойто не очень хороший, я же както еще предполагаю обратный экспорт в колладу Jonny, 20:51:50:
всмысле не зависимых? ScorpioT1000, 20:52:08:
ну тоесть позиция берется из разных значений а не из 1 Jonny, 20:52:15:
швы могут быть только если координаты вершин не равны ScorpioT1000, 20:52:18:
и фейсы рендерятся считай неслитно ScorpioT1000, 20:52:24:
тоесть это 100% ? Jonny, 20:52:29:
да ScorpioT1000, 20:52:44:
меня это напрягает немного, ну посмотрим тогда Jonny, 20:53:01:
шов может получится хоть из-за ошибок округления, т.е. сделал ((x*2)+100)/2 и у тебя есть вероятность шова Jonny, 20:53:13:
т.е. не так Jonny, 20:53:15:
ну ты понял Jonny, 20:53:38:
((x*2)+100)/2-50
ScorpioT1000, 20:53:59:
да, не я скорее про другое например в какомто случае эти вершины будут обрабатываться отдельно, хз в каком Jonny, 20:54:02:
если просто брать и копировать координаты по значению то шва не будет ScorpioT1000, 20:54:05:
тоесть позиции ScorpioT1000, 20:54:13:
хотя в принципе они всегда отдельно как я понял ScorpioT1000, 20:54:36:
тоесть выводятся на девайс ScorpioT1000, 20:54:52:
параллельными массивами, а не так чтобы гдето меньше и гдето больше Jonny, 20:55:10:
непонял ScorpioT1000, 20:55:58:
ну типа нельзя так в графический девайс отправить, чтобы индексов позиций было меньше чем индексов Jonny, 20:56:20:
можно Jonny, 20:56:37:
так обычно и бывает Jonny, 20:56:51:
или не понял ScorpioT1000, 20:57:12:
ты говорил что так как оно представлено в формате коллады не подходит к реальному рендеру Jonny, 20:58:11:
не подходит, в рендере можно рисовать вершины представленые по разному, это может быть один массив вершин состоящих из нормалей позиций и пр., а погут быть паралельные массивы вершин нормалей и пр. Jonny, 20:58:28:
но массив индексов для этих массивов толкьо один ScorpioT1000, 20:59:51:
ага тоесть ScorpioT1000, 21:00:04:
нельзя сделать чтобы нормали шли не в том же порядке что вершины Jonny, 21:00:18:
но паралельными массивами на практике никто не пользуется, это для специфических случаев если какието маленькие обьемы состовных частей вершины обновляется отдельно от других больших обьемов ScorpioT1000, 21:00:19:
или нет Jonny, 21:00:25:
нельзя ScorpioT1000, 21:00:29:
ясно ScorpioT1000, 21:00:51:
ну тоесть по сути надо вот так вот как выше обсуждалось "распаковывать" при случае ScorpioT1000, 21:01:06:
при случае разных массивов Jonny, 21:01:07:
да ScorpioT1000, 21:15:20:
вроде получилось модель в принципе может больше весить изза распаралленивания массивов вершин/нормалей/юв, но в противном случае будет потеря нормалей и текстурных карт в большинстве случаев. я это потом решу отдельно оптимизацией - он будет смотреть где нет потери и там соединять нормально
» про bind_shape_matrix
ScorpioT1000, 30.12.2012 16:08:32:
тут хрень такая есть ScorpioT1000, 16:08:39:
<bind_shape_matrix> 1 0 0 0 0 1 0 90 0 0 1 0 0 0 0 1 </bind_shape_matrix> ScorpioT1000, 16:09:12:
говорят что эта матрица описывает, как трансформировать геометрию в правильную систему координат для использования костями и так может быть для каждого объекта я так понял есть матрица трансформаций в анимации
и есть эта херня
они перемножаются чтоли?
ScorpioT1000, 16:10:47:
т.е. если мне нужна универсальная линейка кадров, надо каждый кадр анимации домножить на это? Jonny, 16:14:17:
привет Jonny, 16:14:36: ну если так говорят то да, просто перемножаешь и все
» FCollada - как превратить матрицу трансформации в translate/rotate/scale и обратно
ScorpioT1000, 30.12.2012 17:12:54:
void Decompose(FMVector3& scale, FMVector3& rotation, FMVector3& translation, float& inverted) const; ScorpioT1000, 17:13:23: Recompose this matrix from its scale, rotation, and translation components.; it also tells whether it is inverted. ScorpioT1000, 30.12.2012 17:14:37: /** Decompose this matrix into its scale, rotation, and translation components; it also tells whether it is inverted. To get back the Так же в FCollada есть кватернионы вращения, кусок кода, как я это делал:
Отредактировано ScorpioT1000, 04.01.2013 в 01:04. |
04.01.2013, 00:09 | #1
+1/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
ScorpioT1000
Работаем
offline
Опыт: отключен
|
Полезный топик, как читать матрицы преобразований Matrix-animation-output-transform-array, в анимациях:
|
04.01.2013, 07:45 | #2
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
ScorpioT1000
Работаем
offline
Опыт: отключен
|
Хороший туториал по структуре collada www.wazim.com/Collada_Tutorial_1.htm
ScorpioT1000 добавил:
Ещё я узнал, что FCollada читает файлы текстур во время парсинга - видимо, сверяет заголовки. Так вот, там есть бага - иногда обращение по несуществующей ячейке и фатал, фиксится так: файл FUUri.cpp, строка 289
заменить
на
естественно, если у вас есть сорцы. если нет - снимать штаны и бегать) |
05.01.2013, 13:00 | #3
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
ScorpioT1000
Работаем
offline
Опыт: отключен
|
ОЧЕНЬ ДОЛГО мучался с матрицами позиций, теперь все строго и по полочкам:
1 и 2 надо перемножить, обратить и применить к позициям костей
2 я пока взял только translation и вычел ее из 4, т.е. из каждой матрицы анимаций
ну с 4 все ясно, делим на кватернион, перемещение и масштабирование |
21.01.2013, 04:26 | #4
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
ScorpioT1000
Работаем
offline
Опыт: отключен
|
Результат трудов: xgm.ru/p/wc3/xldataconverter |
22.01.2013, 07:16 | #5
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|