no he utilizado una proyección oblicua/Cavalier antes, pero lo siguiente que debería dar una idea de cómo proceder:
Crear una matriz de 4x4 cizalla,
H(θ, Φ) = | 1, 0, -cot(θ), 0 |
| 0, 1, -cot(Φ), 0 |
| 0, 0, 1, 0 |
| 0, 0, 0, 1 |
θ siendo el cortante en X, Φ siendo el cortante en Y, y Z solo.
(ref: slide 11 of http://www.cs.unm.edu/~angel/CS433/LECTURES/CS433_17.pdf)
que se multiplican por su proyección ortográfica,
| 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 |
(descrito por, izquierda, derecha, abajo, arriba, cerca y lejos)
(ref: http://en.wikipedia.org/wiki/Orthographic_projection_%28geometry%29)
OpenGL luego le permite cargar esta matriz directamente (como una matriz de 16 flotadores) a través de la función glLoadMatrixf():
GLfloat proj[16] = { ... };
glMatrixMode(GL_PROJECTION); // Make sure we're modifying the *projection* matrix
glLoadMatrixf(proj); // Load the projection
Para un análisis más en profundidad la forma en la visualización y transformaciones trabajan en OpenGL, me refiero a Chapter 3 of the OpenGL "Red Book". Allí usan glOrtho() para crear y aplicar una proyección ortográfica.
Editar:
Como datenwolf señala, tener en cuenta que los elementos de matriz en OpenGL se especifican en la columna de orden mayor.