Как описывает Кристиан, вся математическая математика для обработки ваших вершин зависит от вас, поэтому вы должны повторить матрицу, которую создает glOrthof()
. В своем ответе здесь я предоставил следующий метод Objective-C для генерации такой матрицы ортографической проекции:
- (void)loadOrthoMatrix:(GLfloat *)matrix left:(GLfloat)left right:(GLfloat)right bottom:(GLfloat)bottom top:(GLfloat)top near:(GLfloat)near far:(GLfloat)far;
{
GLfloat r_l = right - left;
GLfloat t_b = top - bottom;
GLfloat f_n = far - near;
GLfloat tx = - (right + left) / (right - left);
GLfloat ty = - (top + bottom) / (top - bottom);
GLfloat tz = - (far + near) / (far - near);
matrix[0] = 2.0f / r_l;
matrix[1] = 0.0f;
matrix[2] = 0.0f;
matrix[3] = tx;
matrix[4] = 0.0f;
matrix[5] = 2.0f / t_b;
matrix[6] = 0.0f;
matrix[7] = ty;
matrix[8] = 0.0f;
matrix[9] = 0.0f;
matrix[10] = 2.0f / f_n;
matrix[11] = tz;
matrix[12] = 0.0f;
matrix[13] = 0.0f;
matrix[14] = 0.0f;
matrix[15] = 1.0f;
}
Матрица, используемая здесь, определяется как
GLfloat orthographicMatrix[16];
Затем я применяю матрицу в моем вершинном шейдере, используя что-то вроде следующего:
gl_Position = modelViewProjMatrix * position * orthographicMatrix;
Мой порядок умножения отличается от порядка Кристиана, поэтому я могу сделать что-то немного назад, но это то, что я использовал для обработки этого в моем приложении OpenGL ES 2.0 (исходный код которого можно найти здесь ).