Crystallize писал: Родительская кость-это координата начала, а ориентация-это трёхмерный вектор направления, я так понимаю?
У любой кости есть трансформация, хоть у родительской, хоть у племянницыной. За исключением масштаба, который в игорях чаще всего не нужен. Как реализуется хранение трансформации (в векторе, матрице или кватернионе, в локальном пространстве кости или в общем для всех костей), будет решать автор движка.
А все беды откуда? От лени и незнания английского!
Вальве тебе "Modeling for Half-Life.doc" дала - на, читай! Нет, не хочу, хочу флудить на форуме. Там всё по полкам разложено. Есть раздел "What is a bone?". ИМХО, достаточно просто увидеть "SMD file format":
Skeleton
Begins the skeleton pose block
Time 0
Begins this time block
<ID> <PosX> <PosY> <PosZ> <RotX> <RotY> <RotZ>
<ID> is the bone <PosX>, <PosY> and <PosZ> are the position in world units (good to 6 significant digits). <RotX> <RotY> and <RotZ> are local Euler rotations in radians. Bones which are not children of the world report their position and rotations in their parent’s local space.
Читай-не читай, однако старших товарищей слушать тоже полезно.
Вот один форумчанин (не будем показывать пальцем), задумал отрендерить студиомодели совершенно по своему. Ну то есть, без матриц.
Я спрашиваю - почему без матриц. Он говорит - я их не понимаю, я буду складывать углы Эйлера. Я говорю - углы эйлера не конкативны, их нельзя складывать. Он говорит, эй чувак, ну я просто сложу их и всё будет нормально. Я говорю, да не сложишь ты. Плюнул и забыл.
Проходит полгода. Он опять ко мне стучится и говорит - у меня уже почти получилось, но скелет постоянно перекручивается. Я говорю, правильно, его и будет перекручивать, потому что углы Эйлера не конкативны.
Он говорит, но я же почти-почти добился того, чтобы его не перекручивало, я за эти полгода столько всего перепробовал, я уже почти добился. Я говорю, можешь еще хоть два года пробовать, но углы Эйлера не конкативны. И, о чудо, всего через неделю он наконец-то осознал это и прекратил свои идиотские упражнения. А ведь если бы я ему не сказал - он бы до самой старости пробывал.
XaeroX писал: На юнити можно разрабатывать игры, не имея представления об играх, тебя это не смущает?
Наоборот, эта байка про студиомодели разрушила мои благоговейно-трепетные представления о непреодолимом пороге вхождения в программирование OpenGL.
Цитата:
XaeroX писал: Что предложил бы ты?
Не знаю. Я только в курсе, что в думе и даркенджине кватернионы. Но это форматы из тех, что вы называете компилированными.
У эйлеров серьёзные проблемы с гимбаллоком. Хотя учитывая, что формат сырьевой и анимация запечённая, разницы нет. Всё равно же в .mdl вращение не в эйлерах? И преобразование из эйлеров, возможно, аффтары хотят делать строго по-своему. Там ведь вроде не по-всякому ещё преобразуешь, чтобы кости не передёргивало.
nemyax писал: о непреодолимом пороге вхождения в программирование OpenGL.
Ты наверное хотел сказать - в DirectX? Я его до сих пор боюсь, как и любого SDK от микрософт. С меня хватило изучения формата DDS.
Цитата:
nemyax писал: У эйлеров серьёзные проблемы с гимбаллоком
Поправочка, у эйлеров проблемы с гимбаллоком, если мы начнём вертеть объект как нам вздумается. Например физ. объект. Но если это монстр или скажем дверь или поезд, короче говоря, объект, который использует не более двух осей, то никаких проблем не будет. Второй момент - учитывать гимбаллок, когда мы переводим матрицу обратно в эйлера.
Опять таки проблем никаких. Надо просто уметь пользоваться.
Цитата:
nemyax писал: Всё равно же в .mdl вращение не в эйлерах?
Там кватернионы, да. Именно в силу не конкативности эйлеров.
Потом кватернионы лерпятся и преобразовываются в матрицы.
Потом матрицы перемножаются между собой. А потом мы их используем для трансформации вертексов на CPU или GPU. Но вообще говоря - работа с матрицами на порядок приятнее работы с кватернионами, по крайней мере для меня. Уже хотя бы потому, что операции с матрицами не требуют применения синуса, косинуса и квадратного корня. Только арифметические операции.