Я не использовал косую / кавалерную проекцию ранее, но следующее должно дать вам представление о том, как действовать:
Создание матрицы сдвига 4x4,
H(θ, Φ) = | 1, 0, -cot(θ), 0 |
| 0, 1, -cot(Φ), 0 |
| 0, 0, 1, 0 |
| 0, 0, 0, 1 |
θ - сдвиг в X, Φ - сдвиг в Y, а Z - один.
( ссылка: слайд 11 из http://www.cs.unm.edu/~angel/CS433/LECTURES/CS433_17.pdf)
Умножьте это на вашу ортографическую проекцию,
| 2/(r-l), 0, 0, -(r+l)/(r-l) |
| 0, 2/(t-b), 0, -(t+b)/(t-b) |
| 0, 0, 2/(f-n), -(f+n)/(f-n) |
| 0, 0, 0, 1 |
(описывается слева, справа, снизу, сверху, близко и далеко)
(ref: http://en.wikipedia.org/wiki/Orthographic_projection_%28geometry%29)
Затем OpenGL позволяет загружать эту матрицу напрямую (в виде массива из 16 чисел с плавающей запятой) с помощью функции glLoadMatrixf () :
GLfloat proj[16] = { ... };
glMatrixMode(GL_PROJECTION); // Make sure we're modifying the *projection* matrix
glLoadMatrixf(proj); // Load the projection
Для более глубокого изучения того, как в OpenGL работают просмотры и преобразования, я отсылаю вас к главе 3 «Красной книги» OpenGL . Там они используют glOrtho () , чтобы создать и применить ортографическую проекцию.
Edit:
Как указывает datenwolf, имейте в виду, что элементы матрицы в OpenGL указаны в главном порядке столбцов.