Матрица масштабирования и матрица перевода - PullRequest
0 голосов
/ 29 марта 2011

Привет
Я устанавливаю матрицу однонаправленного масштабирования для объекта (скажем, Entity 1) в 3D.Теперь у меня есть другая сущность (сущность 2), которая следует за этой сущностью, которая должна иметь равномерное масштабирование.Последовательность Матрицы, которую я применяю к обеим этим сущностям, выглядит следующим образом ...

  1. Перевести сущность1 из исходной мировой позиции в исходную
  2. Масштабировать однонаправленно
  3. Перевестисущность вернулась на свою позицию в мире.

Это работает.Однако, если я следую той же последовательности для Entity 2, это не сработает.Я делаю все преобразования матрицы в мировой системе координат.

Это мой первый шаг в удивительный мир компьютерной графики.Я был бы признателен, если бы кто-нибудь смог пролить свет на различные системы координат (Мир, Модель, Локальные) и подсказать мне, как вычислять матрицы из системы координат модели в мировую систему координат и наоборот.
Заранее спасибо
Атул

Ответы [ 2 ]

1 голос
/ 29 марта 2011

Система координат "Мир" использует полностью неизмененную матрицу для представления всех объектов в мире.Это самый простой способ взглянуть на позиции всех ваших объектов в общей схеме вещей.

Система координат "Модель" очень похожа на идею "Местного"система координат.«Локальная» система координат определяет систему координат в терминах локального объекта, поэтому, например, (0,0) может быть центром объекта в этой локальной системе координат, и положительная ось Z может смотреть внизпросмотр объектов.Система координат «Модель» по сути такая же, как и эта, но если вы перепутали с OpenGL, в результате чего у вас есть матрица MODELVIEW, эта матрица в основном является используемой в настоящее время «локальной» системой координат.Вы можете выполнять манипуляции с этой «Модельной» матрицей, чтобы перейти из мировой системы координат в локальную систему координат, в другую локальную систему координат, в другую локальную систему координат и т. Д. И т. Д.

Я думал, что это была действительно отличная статья , которая может помочь вам, если вы заинтересованы в преобразовании напрямую из «Всемирной» системы координат в любую «Локальную» систему координат объекта.Чтобы использовать это решение, необходимо, чтобы у вас были прямой, верхний и боковой векторы (в терминах координат «Мир») для объекта, для которого вы хотите найти «Локальную» систему координат.

Надеюсь, это поможет немного прояснить ситуацию!:)

0 голосов
/ 29 марта 2011

Сначала я попытаюсь ответить на ваш последний вопрос, надеюсь, это прояснит ситуацию.

Всякий раз, когда художник-график создает здание, монстра или ландшафт, ему необходимо определить систему координат . Он состоит из источника (где 0,0) и некоторых осей (где направления x и y?). Выбор совершенно произвольный и не имеет реального значения, но ради простоты (и, в некоторых случаях, для уменьшения ошибок из-за отсутствия точности) источник обычно находится либо близко к центру объекта, либо в контрольной точке. (например, корень дерева).

Теперь, если художник соберет монстра и здание в ландшафте, координаты, скорее всего, не будут совпадать. Она могла бы создать здание вместе с ландшафтом, хотя это не всегда выполнимо, не говоря уже о удобстве, но для монстра бегать за каким-то жалким MMO-игроком это просто невозможно.

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

Так, каковы мировые координаты ? Обычно они ссылаются на то, что имеет больше всего смысла, как на ссылку, элемент, который не движется вокруг чего-то другого. Здесь пейзаж.

Это где матрицы приходят в игру. Что такое матрица? Матрица - это оператор , который позволяет выражать координаты в другой системе координат. Это проекция системы координат из системы в другую : от монстра к сцене, от сцены к камере, от камеры к экрану ...

Матрица может выражать любое преобразование из одной системы в другую: перемещение, вращение, масштабирование, сдвиг, выравнивание ... Или все это одновременно. единичная матрица - это матрица, которая ничего не меняет. Матрицы также можно комбинировать: умножая матрицу перевода и матрицу вращения, мы получаем полученную матрицу преобразования как преобразования, так и вращения. Сделайте это пару раз, и вы получите положение кончика шарнирного рычага робота на автомобильном заводе, просто комбинируя матрицы каждого соединения.

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

Из объяснений, которые вы даете, я подозреваю, что именно здесь у вас что-то не так, потому что перевод даст другой результат, если вы сначала масштабируете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...