Как настроить область просмотра в сцене в OpenGL ES 2.0? - PullRequest
1 голос
/ 23 июня 2011

Я занимался программированием в OpenGL и знаю, как установить видимую область в нем с помощью gluOrtho(), но подобной функции не существует в OpenGL ES 2.0.

Как мне это сделать в OpenGL ES 2.0?

PS: я занимаюсь разработкой OpenGL ES 2.0 в Ubuntu 10.10 с эмулятором PowerVR SDK.

Ответы [ 3 ]

4 голосов
/ 25 июня 2011

Как предполагает Николь, вы захотите установить матрицу ортографической проекции. Например, метод 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;
}

Даже если вы не знакомы с синтаксисом метода Objective-C, тело C этого кода должно легко следовать. Матрица определяется как

GLfloat orthographicMatrix[16];

Затем вы примените это в своем вершинном шейдере для настройки местоположения ваших вершин, используя код, подобный следующему:

gl_Position = modelViewProjMatrix * position * orthographicMatrix;

Исходя из этого, вы должны быть в состоянии установить различные пределы вашего пространства отображения, чтобы приспособить вашу геометрию.

2 голосов
/ 23 июня 2011

Нет функции с именем gluOrtho.Есть gluOrtho2D, и есть glOrtho, оба из которых делают очень похожие вещи.Но ни один из них не настроил область просмотра .

Преобразование области просмотра для конвейера OpenGL управляется glViewport и glDepthRange.То, о чем вы говорите, - это матрица ортографической проекции, которую и вычисляют glOrtho и gluOrtho2D.

OpenGL ES 2.0 не обладает многими фиксированными функциями удобства настольного OpenGL pre-3.1.Поэтому вам придется создавать их самостоятельно.Создание ортографической матрицы очень просто;в документах по glOrtho и gluOrtho2D указано, как они создают матрицы.

Вам нужно будет передать эту матрицу в шейдер через униформу шейдера.Затем вам нужно будет использовать эту матрицу для преобразования положений вершин из пространства глаза (определено с положением глаза в качестве источника, + X вправо, + Y вверх и + Z в направлении глаз).

0 голосов
/ 01 июля 2012

Вы также можете использовать следующий удобный метод, определенный в GLkit.

GLKMatrix4 GLKMatrix4MakeOrtho (
   float left,
   float right,
   float bottom,
   float top,
   float nearZ,
   float farZ
);

Просто передайте (-1, 1) для значений Z.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...