1

У меня есть матрица преобразования 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 

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

ответ

2

Если вы хотите, чтобы z-координата была 0, вам необходимо пройти нулевую строку. Также включите перспективную часть в последнюю строку:

a b 0 c 
d e 0 f 
0 0 0 0 
g h 0 i 
+0

Ах, спасибо! Если преобразование вектора I уже имеет z = '0', я могу оставить третью строку как' 0 0 1 0', чтобы сделать z таким же, как z out, правильно? – Vegard

+0

Да, это правильно. –

+1

Почему бы не сохранить 3-й ряд [0 0 1 0], оставив z без изменений? Идентичность заключалась бы в том, чтобы сохранить ее таким образом. Ноль-вектор в 3-й строке будет означать деструктивное проекционное преобразование. Я понимаю, что даже если точка имела z ≠ 0, она будет сделана 0, а другая оставит ее неизменной. Но есть ли другая причина, кроме того, что вы имели в виду? Просто любопытно. – legends2k

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