Vladimir488 писал(а):
Интересует пара вопросов: Вращение по циклу? То-есть 360 или при таком раскладе нужно постоянно на 0 сбрасывать что черевато. И смена дистанции относительно точки вращения, Эллипс, его как понимаю не удобно таким методом делать и локальный(или как) + на правый вектор относительно твоего примера тоже будет выглядеть как костыль.
любой ротатор какой подашь, хоть углы ейлера хоть кватернион как у меня, в моем примере старт от 0 можно в обе стороны +- вращать, с любыми значениями ( можно больше 360).
можно регулировать расстояние - стартовым расстоянием, то-есть кубики можно вручную двигать, и логика по прежнему остается рабочей, стартовая точка вращения будет то положение кубиков которое выставлено в начале вращения. При этом ориентация вращающегося кубика относительно точки вращения будет сохраняться.
также смена дистанции добавляем вектор смещения помимо ротатора - не просто а очень просто.
элипс таким способом проще всего сделать, в зависимости от значения угла смещать вектором от центра вращения, очень простая логика - косинус угла как управляющая логика для елипса, и тогда еще одним значением можно регулировать полюса, тогда максимальные смещения будут фокусами.
Эллипс также можно определить как фигуру, которую можно получить из окружности, применяя аффинное преобразование. ТОесть еще можно скейл добалять в трансформ, но тогда надо будет выравнивать скейл куба после трансформации.
эм... и чтоб вообще убедительно было:
Код:
i=vertid
n=boneid
v' =v[i].transform * inverse bonebind[n].transform * boneanim[n].transform * weight[i][n] --преобразование для скина в псевдокоде
/*
и чуть пояснений
v - вершина геометрии в компонент спейсе
bonebind - это реф поза кости в компонент спейсе ,обычно в которой заскиненная модель, именно поэтому она важна, потому что она есть в расчетах
boneanim - анимация кости в компонент спейсе
weight - вес вершины к конкретной кости
тоесть:
берем вершину относительно пивота модели, переносим ее в локальные координаты реф позы кости, переносим результат в анимацию кости, умножаем все это на вес ПРОФИТ!
*/
V'=V*invBо*B*W -- коротко
-пример расчета скин ветрекс шейдера. Это стандарт скина на теперешний момент, в анриале он работает по этим же формулам.
тоесть... к чему я веду: нужно иерархическое преобразование - матрицы "бест вей ту ду зет".
все трансформации в 3д работают только через трансформ матрицы! каким бы способом вы их не задавали.
ПС: а теперь по поводу структур из другой темы на данном примере...
очевидно что v,Bo,w хранить отдельно неудобно обьединяем их в структуру или многомерный массив управляющуся по вертекс айди
получаем v{Bo{Bo1,Bo2,...},w{w1,w2,...}} и потом в массив вершын преобразовываем v{v1,v2,....}
теперь зная только айди вершины мы можем получить полную информацию о ней
_________________
we need to go deeperПоследний раз редактировалось
Snake 23 фев 2017, 09:16, всего редактировалось 1 раз.