Я настоящий нуб, который только начал изучать трехмерное программирование, и мне очень тяжело учиться вращению в трехмерном пространстве.Моя проблема в том, что я не могу понять, как вращать объект, используя его локальные координаты.
У меня есть базовый класс для трехмерных объектов, и, для начала, я хочу реализовать функции, которые будут вращатьобъект на определенной оси с х градусов.Пока у меня есть следующее:
public void RollDeg(float angle)
{
this.rotation = Matrix4.Mult(rotation,
Matrix4.CreateRotationX(MyMath.Conversions.DegToRad(angle)));
}
public void PitchDeg(float angle)
{
this.rotation = Matrix4.Mult(rotation,
Matrix4.CreateRotationY(MyMath.Conversions.DegToRad(angle)));
}
public void YawDeg(float angle)
{
this.rotation = Matrix4.Mult(rotation,
Matrix4.CreateRotationZ(MyMath.Conversions.DegToRad(angle)));
}
'Вращение' - это матрица 4x4, которая начинается как единичная матрица.Каждый раз, когда я хочу повернуть / наклонить / рыскать объект, я вызываю одну из функций выше.
для рисования, я использую другую функцию, которая помещает матрицу в стек ModelView, умножает ее на перевод, вращениеи масштабируем матрицы объекта (в этом порядке) и начинаем рисовать вершины.Конечно, наконец, я вытаскиваю матрицу из стека.
проблема в том, что вышеприведенные функции вращают объект по ГЛОБАЛЬНОЙ оси, а не по ЛОКАЛЬНОЙ, даже если, насколько я понимаю, каждый раз, когда вы поворачиваетеобъект, локальная система меняет свою ось, а затем, когда новый поворот применяется поверх других, локальная ось используется для новой.
Я читаю различные учебники о математике за ней и каквращать объекты, но я не мог найти тот, который мог бы помочь мне.
если бы у кого-то было время, я был бы очень признателен, если бы он помог мне понять, КАК вращаться вокруг локальной оси и, может быть, даже более важно, что я сделал неправильно в моей текущей реализации.