Я не знаю Каира, поэтому я удалю свой ответ, если получится лучший.
Согласно документам Каира:
x_new = xx * x + xy * y + x0;
y_new = yx * x + yy * y + y0;
Когда вы используете OpenGL,формула выглядит следующим образом: (m
является матрицей)
x_new = m(1,1) * x + m(1,2) * y + m(1,3) * z + m(1,4)
y_new = m(2,1) * x + m(2,2) * y + m(2,3) * z + m(2,4)
z_new = m(3,1) * x + m(3,2) * y + m(3,3) * z + m(3,4)
(обратите внимание, что для простоты я не упомянул четвертую координату)
Итак, вам нужнопросто сопоставьте две формулы:
mat.xx = 2 / (right - left);
mat.yy = 2 / (top - bottom);
mat.xy = 0;
mat.yx = 0;
mat.x0 = -(right + left) / (right - left);
mat.y0 = -(top + bottom) / (top - bottom);
Пожалуйста, попробуйте это