У меня есть матрица преобразования 3x3 для 2D однородных координат:Как преобразовать матрицу 2D преобразования (для однородных координат) в 3D в плоскости z = 0?
a b c
d e f
g h i
я хотел бы передать это OpenGL (с использованием glMultMatrix
) в 2D-приложении, но OpenGL принимает матрицу 4x4 для 3D однородных координат. Я бы хотел, чтобы все координаты, преобразованные моей матрицей 4x4, закончились x
и y
такими же, как для матрицы 3x3, и с z=0
.
Я попытался это исправить. Для вектора x, y, 1
Я бы закончил преобразованный вектор ax + by + c, dx + ey + f, gx + hy + i
, так что для вектора x, y, 0, 1
я бы хотел получить преобразованный вектор ax + by + c, dx + ey + f, 0, ?
. Одна матрица, которая будет делать это, является (насколько я могу судить):
a b 0 c
d e 0 f
0 0 1 0
0 0 0 1
Это правильно? Это работает? Я не думаю, что это единственная матрица, которая даст результат, который я ищу, но я не совсем понимаю, что должно или не должно идти в третьей и четвертой строках (и в четвертом столбце).
Ах, спасибо! Если преобразование вектора I уже имеет z = '0', я могу оставить третью строку как' 0 0 1 0', чтобы сделать z таким же, как z out, правильно? – Vegard
Да, это правильно. –
Почему бы не сохранить 3-й ряд [0 0 1 0], оставив z без изменений? Идентичность заключалась бы в том, чтобы сохранить ее таким образом. Ноль-вектор в 3-й строке будет означать деструктивное проекционное преобразование. Я понимаю, что даже если точка имела z ≠ 0, она будет сделана 0, а другая оставит ее неизменной. Но есть ли другая причина, кроме того, что вы имели в виду? Просто любопытно. – legends2k