глобальное преобразование в локальное преобразование?

Если объект привязан к другому, и вам нужно установить его положение, поворот и масштаб в глобальном пространстве, что вы делаете, чтобы получить локальные версии этих значений, зная те же значения для «родительского» объекта?

3 голоса | спросил user17402 12 PM000000120000003631 2012, 12:32:36

1 ответ


4

Вы захотите сохранить перевод, поворот и масштабирование независимо, чтобы сделать это проще (а в некоторых случаях и быстрее), но разложение матриц будет работать.

Метод для каждого из трех параметров отличается, но очень просто.

Во-первых, давайте посмотрим, что вы уже знаете: как получить позицию мира из локального положения ребенка и его позиции в мире.

Для перевода просто добавьте перевод родителя из дочернего. Если родительский член находится в (10,2,7), а местный перевод ребенка (1, -3,4), то мировое положение ребенка равно (10 + 1,2-3,7 + 4) = (11, -1,11).

Для вращения примените ротацию родителя к дочернему. Если вы используете упрощенный класс кватернионов, это означает просто умножение ротации родителя на ребенка, возможно, с использованием перегруженного оператора, например. world = parent.otation * child.rotation. Обратите внимание, что это не «правильная» нотация для кватернионов, но как правило, они реализуются в математических библиотеках C ++ /C # /Java.

Для масштаба умножьте компоненты родителя на дочерние. Если родительский элемент равен (2,2,2), а ребенок равен (0,5,1,2), то мировой масштаб равен (2 * 0,5,2 * 1,2 * 2) = (1,2,4).

Чтобы перейти в другую сторону, просто выполните дополнительные операции.

Чтобы получить локальный перевод, вычтите мировой перевод родителя из мирового перевода ребенка. Используя те же самые номера образцов, что и раньше: (11-10, -1-2,11-4) = (1, -3,7).

Чтобы получить локальное вращение, вам нужно будет умножить вращение мира ребенка на сопряжение родителя. Конъюгат - это просто исходный кватернион с отрицательными векторными частями, например. (-X, -y, -z, ш).

Чтобы получить локальный масштаб, умножьте мировой масштаб ребенка на обратную сторону мирового масштаба. С предыдущими примерными числами у родителя была одинаковая шкала в 2, поэтому ее обратная величина была бы равномерной: 0,5 * 2 0,5, 4 * 0,5) = (0,5,1,2).

ответил Sean Middleditch 12 PM00000090000002031 2012, 21:34:20

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132