Предположим, у меня есть два (например, два, это будет на самом деле n> 1) вида прямоугольных призм, "прикрепленных друг к другу", так что 4 вершины на смежных гранях - это одна и та же вершина в памяти. Таким образом, как два деревянных блока, один сложен на другой, с 4 вершинами внизу, 4 в середине, которые разделены между двумя, и 4 сверху. Теперь я хочу иметь возможность сначала выполнить определенный поворот на «верхнем» деревянном блоке, как если бы он находился на шарнире с центральной точкой этих 4 общих вершин.
Так что, как колено, допустим, что он может сгибаться только под углом до 45 градусов под определенным углом, и для выполнения поворота я поворачиваю 8 вершин, которые составляют объект, вокруг этой невидимой центральной точки шарнира. При этом 4 общие вершины другого блока несколько сдвигаются, но, поскольку шарнир является центральной точкой среди них, они не «переводятся» от нижнего блока. Я думаю, что называть их деревянными нелогично, так как они будут меняться определенным образом, но я пытался настроить его для визуализации. В любом случае, скажем, я хочу иметь возможность вращать этот нижний блок другим способом, но верхний блок действует так, как будто он прикреплен. Таким образом, если нижний блок перемещается, верхний блок поворачивается вместе с ним, но также с любым изгибом, который он имеет на шарнире между ними.
Я рассматривал возможность поэтапного выполнения преобразований с помощью угла оси или кватернионов, начиная с блока «самый верхний» и продвигаясь вниз по цепочке зависимостей, выполняя вращение текущего блока и каждой вершины в блоках «над» ним. , Однако для этого потребуется возместить смещение всех вершин, чтобы поставить текущий шарнир в качестве источника, выполнив вращение, а затем изменив предыдущее смещение, для каждого шага в этой цепочке. Есть ли более эффективный способ справиться с этим? Я имею в виду эффективность в скорости, наличие дополнительных предварительно обработанных данных в памяти не имеет большого значения. Может также наступить время, когда я не могу рассчитывать на наличие такой линейной цепочки зависимостей (например, верхний блок в конечном итоге присоединяется к нижнему блоку, образуя кольцо). Что было бы правильным способом справиться с этим для такого рода возможностей?