OpenGL - перспективный выпуск - PullRequest
       6

OpenGL - перспективный выпуск

1 голос
/ 27 октября 2011

Я просто хочу создать перспективу, где глаз камеры будет, скажем, (2, 2, -2) смотреть прямо на начало координат. Я пытаюсь использовать комбинацию gluLookAt() и glFrustum(), но по какой-то причине, хотя это рендеринг, мои объекты выглядят очень искаженными:

glMatrixMode( GL_PROJECTION );
glLoadIdentity();
glFrustum (-1.0, 1.0, -1.0, 1.0, 1.0, 500.0);

... 

gluLookAt (-2.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0, -1.0, 0.0);

Что я делаю не так?

РЕДАКТИРОВАТЬ : Вот скриншот. Левая сторона определяет кривую профиля, которая будет развернута вокруг оси Y. Это должен быть цилиндр в перспективе, но он ... искривлен.

enter image description here

РЕДАКТИРОВАТЬ 2 : Кроме того, эти оси на виде в перспективе настроены следующим образом, что, я знаю, не правильно:

// draw the axis
   glBegin(GL_LINES);
     // x
     glVertex3f(500.0, 0.0, 0.0);
     glVertex3f(-500.0, 0.0, 0.0);
     // y
     glVertex3f(0.0, -500.0, 0.0);
     glVertex3f(0.0, 500.0, 0.0);
     // z
     glVertex3f(0.0, 0.0, -500.0);
     glVertex3f(0.0, 0.0, 500.0);

   glEnd(); 

РЕДАКТИРОВАТЬ 3 : Кроме того, ни одна из вершин этой формы не имеет значения x, y или z, превышающие 1,0 ..

Ответы [ 2 ]

3 голосов
/ 27 октября 2011

Что я делаю не так?

Не думаю, что ты что-то делаешь неправильно. Вид, который вы хотите видеть на левой панели, обычно выполняется с использованием орфографической проекции . Искажение, которое вы видите, является просто перспективным искажением; вы не смотрите перпендикулярно кривой (кривая лежит в плоскости XY, и вы смотрите на плоскость XY под некоторым углом).

Примечание:

Матрица проекции определяет только « объектив » в OpenGL. Его нельзя использовать для размещения «камеры». Любое позиционирование точки зрения (представление ) определяется как часть преобразования вида модели. Таким образом, gluLookAt предназначен для использования в матрице вида модели.

0 голосов
/ 27 октября 2011

Ваше усеченное тело настроено так, как если бы экран был квадратным.Если ваш экран не квадратный, это будет сильно искажать объекты.

Кроме того, если объекты находятся близко к вашей камере, ближнее и дальнее расстояния могут повлиять на изображение.Дело в том, что ваша ось вверх в gluLookAt направлена ​​вниз.

Размещение скриншота поможет выявить проблему.

...