Вычисление матрицы LookAt

Я думаю, что вы ищете Гибридное свойство .

from sqlalchemy.ext.hybrid import hybrid_property

class VerifiedAsset(Base):
    id = Column(Integer, primary_key=True)
    verified_at = Column('verified_at', String(24))

    @hybrid_property
    def verification(self):
        return self.verified_at;

    @verification.setter
    def verification(self, value):
        if value and not self.verification:
            self.verified_at = datetime.datetime.utcnow
        if not value and self.verification:
            self.verified_at = None
        # Presumably you want to handle your other cases here

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

37
задан Judge Maygarden 9 December 2008 в 17:36
поделиться

6 ответов

Я создаю взгляд - в матрице путем создания 3x3 матрица вращения, поскольку Вы сделали здесь и затем расширение его к 4x4 с нулями и единственным 1 в правом нижнем угле. Тогда я создаю 4x4 матрица перевода использование отрицательных глазных координат точки (никакие скалярные произведения) и умножаю эти две матрицы вместе. Мое предположение - то, что это умножение приводит к эквиваленту скалярных произведений в нижнем ряду Вашего примера, но я должен был бы разработать его на бумаге для проверки.

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

18
ответ дан Judge Maygarden 10 October 2019 в 08:47
поделиться

Просто немного общей информации:

lookat матрица является матрицей, которую поворачивают положения/, что-то для указания на (посмотрите на), точка в пространстве, от другой точки в пространстве.

метод берет желаемый "центр" представления камер, вектор, который представляет направление для камеры (почти всегда (0,1,0), но это не должно быть), и "глазной" вектор, который является местоположением камеры.

Это используется главным образом для камеры, но может также использоваться для других методов как тени, центры внимания, и т.д.

откровенно я не совсем уверен, почему компонент перевода устанавливается, как это находится в этом методе. В gluLookAt (от OpenGL), компонент перевода установлен на 0,0,0, так как камера просматривается как являющийся в 0,0,0 всегда.

3
ответ дан TM. 10 October 2019 в 08:47
поделиться

Тот компонент перевода помогает Вам путем создания ортонормированное основание "глазом" в источнике и всем остальном выраженном с точки зрения того источника ("глаз") и эти три оси.

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

Так, короткий ответ - то, что это делает математику намного легче.

Ответ на вопрос в комментарии: причина Вы только вычитаете "глазное" положение из всего, имеет отношение к порядку операций. Думайте о нем этот путь: как только Вы находитесь в новой системе отсчета (т.е. положение головы, представленное xaxis, yaxis и zaxis), Вы теперь хотите выразить расстояния с точки зрения этой новой (повернутой) системы отсчета. Именно поэтому Вы используете скалярное произведение новых осей с позицией наблюдателя: это представляет то же расстояние, которое должны переместить вещи, но оно использует новую систему координат.

3
ответ дан Bob Cross 10 October 2019 в 08:47
поделиться

Скалярное произведение просто проектирует точку к оси для получения x-, y-, или z-компонента глаза. Вы перемещаете камеру, назад настолько выглядящую на (0, 0, 0) от (10, 0, 0) и от (100000, 0, 0) имел бы различный эффект.

2
ответ дан Eugene Yokota 10 October 2019 в 08:47
поделиться

lookat матрица делает эти два шага:

  1. Переводят Вашу модель в источник,
  2. Поворачивают его согласно ориентации, настроенной векторным и взглядом
    направление.

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

1
ответ дан Kalle 10 October 2019 в 08:47
поделиться

Преобразование 4x4 матрица содержит два три компонента: 1. матрица вращения 2. перевод для добавления. 3. масштаб (многие механизм не используют это непосредственно в матрице).

комбинация их преобразовала бы точку от пространства для Интервала B, следовательно это - матрица преобразования M_ab

Теперь, местоположение камеры находится в пространстве A и таким образом, это не допустимое преобразование для пространства B, таким образом, необходимо умножиться, это местоположение с вращением преобразовывают.

единственный нерешенный вопрос остается, то, почему точки? Ну, если бы Вы пишете 3 точки на бумаге, Вы обнаружили бы, что 3 точки с X, Y и Z точно похожи на умножение с матрицей вращения.

пример для того дальше строка/столбец взяла бы нулевую точку - (0,0,0) в мировом пространстве. Это не нулевая точка, при закрытых дверях располагают с интервалами, и таким образом, необходимо знать то, что является представлением, при закрытых дверях располагают с интервалами, так как вращение и масштаб оставляют его в нуле!

аплодисменты

1
ответ дан Adi 10 October 2019 в 08:47
поделиться
Другие вопросы по тегам:

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