2009-02-12 3 views
1

У меня есть класс, который содержит матрицу 4x4 для масштабирования и перевода. Как мне применить методы ротации к этому классу? И должен ли я выполнять вращение как отдельную матрицу?Матрицы вращения и OpenGL

ответ

3

Вы можете умножить свою текущую матрицу на матрицу вращения. Посмотрите на http://en.wikipedia.org/wiki/Rotation_matrix

+0

ах, так что я бы только генерировать матрицу вращения и размножайтесь с текущей матрицей, а не хранить 2? Как бы я сгенерировал матрицу вращения, если бы вектор xyz вращался в трех измерениях? –

+0

@Nowell, Что значит? В зависимости от вашей структуры создайте матрицу для вращения и умножьте ее на исходную матрицу. Или вы можете применить умножение непосредственно к своей матрице. – strager

+0

Im в основном пытается воссоздать функциональность glRotate –

1

Существует сайт, который я использую каждый раз, когда мне нужно искать детали трехмерного преобразования, называемого http://www.euclideanspace.com. Определенную страницу по вращению матрицы можно найти here.

Редактировать: Вращение вокруг данной оси, просмотр axis & angle Представление. Эта страница также ссылается на описание того, как перевести одно представление в другое.

Если вам нужно вращаться вокруг нескольких осей, просто умножьте соответствующие матрицы.

+0

hmm, который подсказывает мне, как вращаться по оси x y или z или поворачивать вектор под углом, но не как поворачивать x y и z azis сразу же, учитывая вектор –

1

Отвечая на вторую половину вопроса, одна матрица 4x4 отлично способна масштабировать, переворачивать и поворачивать. Поэтому, если вы не наложили особых ограничений на какие 4x4 матрицы вы можете обрабатывать, один 4x4 является штраф за то, что вы хотите.

Что касается вращения вокруг произвольного вектора (как вы спрашиваете в комментариях), посмотрите раздел «Вращение вокруг произвольного вектора» в ссылках на статью yabcok в Википедии. Вы захотите расширить его до матрицы 4x4, заполнив ее нулями, за исключением позиции 4,4 (масштабирования), которая должна быть одной. Затем используйте матричное умножение с вашим масштабированием/трансляцией 4x4 для создания новой матрицы 4x4.

0

Вы хотите убедиться, что найдете ссылку, которая говорит о правильном виде матрицы, которая используется для компьютерной графики (а именно 3D-однородные координаты с использованием матрицы преобразования 4x4 для вращения/перевода/перекоса).

См компьютерной графики "библия", такие как Foley and Van Dam (pg. 213), или один из них:

Смежные вопросы