Я использую OpenGL с gluPerspective, что мне нужно сделать, чтобы он использовал систему координат, в которой начало координат находится вверху слева, а не внизу слева?
Изменение системы координат OpenGL
Ответы (2)
Я бы сказал, что прямая работа с проекционной матрицей является чистым способом для этой операции. Но если вдруг вам нужна альтернатива:
Вы можете просто использовать glScalef(1.f, -1.f, 1.f)
, чтобы перевернуть ось.
Это также просто операция над матрицей GL_MODELVIEW или GL_PROJECTION (независимо от того, что в данный момент активно).
person
ypnos
schedule
19.05.2010
Вы можете сделать это, перевернув ось y
матрицы проекции. Так:
glMatrixMode(GL_PROJECTION);
glPushMatrix();
glLoadMatrix( [1 0 0 0;
0 -1 0 0;
0 0 1 0;
0 0 0 1] );
// ^ pseudo-code, replace with actual matrix
Это должно сделать это.
Вы также можете использовать вызов glMultMatrix
с той же матрицей (вместо Push
, а затем Load
), но этот способ легче изменить (просто вызовите glPopMatrix
в стеке GL_PROJECTION
позже).
Вы также можете использовать ту же технику, чтобы перевернуть любую из других осей; просто поставьте минус в нужных местах.
person
tzaman
schedule
19.05.2010
Разве glLoadMastrix не уничтожит ранее установленную проекцию? Он полностью заменяет проекционную матрицу, а это не то, что просят.
- person ypnos; 19.05.2010
Вот для чего нужен вызов
glPushMatrix
, он помещает существующую матрицу в стек, сохраняя существующее преобразование. Новая матрица составляется вместе с предыдущей, а не заменяет ее.
- person tzaman; 19.05.2010
Как я узнал, и как говорится в каждом руководстве в Интернете, которое я нашел, LoadMatrix всегда заменяет матрицу в стеке и никогда не компонуется. PushMatrix полезен только для восстановления исходной матрицы (и отказа от загруженной) с помощью PopMatrix впоследствии.
- person ypnos; 26.05.2010