Что делает glOrtho (-1, 1, -1, 1, -1, 1)? - PullRequest
0 голосов
/ 31 октября 2010

Я читаю документацию для glOrtho и не понимаю ее.

Я смотрю на этот код изменения размера для 2D-чертежа и не понимаю, почему некоторые индексы положительные, а некоторые отрицательные.Рисунок должен оставаться плоским, поэтому я не знаю, делает ли он то, что должен:

void reshape(int width, int height)
{

    glViewport(0, 0, width, height);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity(); 
    glOrtho(-1, 1, -1, 1, -1, 1); 
   //left, right, bottom, top, nearval, farval 
    glMatrixMode(GL_MODELVIEW);

}

Ответы [ 2 ]

4 голосов
/ 31 октября 2010

Это построение проекционной матрицы.glOrtho умножает текущую матрицу, которая является единичной матрицей из-за предыдущего оператора, на матрицу ортографической проекции, заданную функцией.

В частности, этот вызов glOrtho создает матрицу, которая будетмировые координаты (-1, -1, -1) в левом нижнем углу экрана и мировые координаты (1, 1, 1) в верхнем правом углу экрана.Поэтому, если бы вы нарисовали треугольник:

glBegin(GL_TRIANGLES);
glVertex3f(-1, -1, 0);
glVertex3f(-1, 1, 0);
glVertex3f(1, -1, 0);
glEnd();

Он бы охватил ровно половину экрана.

Обратите внимание, что если вы используете только 2D, то последние два параметра не являютсяэто важно (хотя они могут использоваться для управления слоями).Просто нарисуйте все с z = 0 , и если вам нужно поставить что-то перед чем-то другим, используйте более высокое значение z .

2 голосов
/ 23 января 2015

Это на самом деле ничего не делает, кроме переворачивания координаты z. Если вы включите свои значения, вы увидите, что он генерирует матрицу

1  0  0  0
0  1  0  0
0  0 -1  0
0  0  0  1

Обратите внимание, что не матрица идентичности, потому что glOrtho странно глупо (обратите внимание на знаки минуса):

(left, bottom, -nearVal) и (right, top, -nearVal) указывают точки на ближней плоскости отсечения, которые отображаются в нижний левый и верхний правый углы окна соответственно, при условии, что глаз расположен в (0, 0, 0). -farVal указывает местоположение дальней плоскости отсечения.

Эти знаки минус означают, что fNear и fFar имеют противоположное значение.

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