OpenGL: установить позицию вместо перевода? - PullRequest
4 голосов
/ 17 сентября 2010

Могу ли я установить текущую позицию рендеринга в произвольное значение, вместо того, чтобы просто дать ей смещение от текущей позиции?

Вот что я сейчас делаю:

gl.glTranslatef(3.0f, 0.0f, 2.0f);

Это позволяет мне сказать «Я хочу двигаться влево», но не «Я хочу двигаться в точку (2, 1, 2)». Есть ли способ сделать последнее?

Я использую OpenGL с JOGL.

Обновление :

@ Бахбар предлагает следующее:

gl.glLoadIdentity();
gl.glTranslatef(...);

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

Ответы [ 2 ]

5 голосов
/ 17 сентября 2010

Да. Просто начните с идентификационной матрицы.

gl.glLoadIdentity();
gl.glTranslatef(...);
0 голосов
/ 24 февраля 2011

Да, вы можете установить свою позицию просмотра с помощью команды gluLookAt.Если вы посмотрите на FAQ по OpenGL, у вас есть вопрос, строка которого наиболее соответствует вашей проблеме: 8.060 Как сделать так, чтобы камера «вращалась» вокруг точки моей сцены?

Вы можете смоделировать орбиту, переместив / повернув сцену / объект и оставив камеру в том же месте.Например, чтобы вращаться вокруг объекта, расположенного где-то на оси Y, при этом непрерывно глядя на начало координат, вы можете сделать следующее:

gluLookAt(camera[0], camera[1], camera[2], /* look from camera XYZ */
          0, 0, 0, /* look at the origin */
          0, 1, 0); /* positive Y up vector */ 
glRotatef(orbitDegrees, 0.f, 1.f, 0.f); /* orbit the Y axis */ 
          /* ...where orbitDegrees is derived from mouse motion */
glCallList(SCENE); /* draw the scene */

Если вы настаиваете на физическом вращении вокруг камерывам нужно будет преобразовать вектор текущей позиции камеры перед использованием его в ваших преобразованиях просмотра.

В любом случае я рекомендую вам изучить функцию gluLookAt () (если вы еще не используете эту процедуру).

Обратите внимание, что вызывается gluLookAt: автор сохраняет положение камеры в массиве из 3 значений.Если вы сделаете то же самое, вы сможете указать свою точку обзора в абсолютных координатах точно так, как вы хотели.

ПРИМЕЧАНИЕ: если вы переместите положение глаза, скорее всего, вы захотите указать виднаправление тоже.В этом примере автор решил сосредоточить внимание на точке (0, 0, 0).

Есть большая вероятность, что этот вопрос также связан с тем, что вы пытаетесь сделать: GLU.gluLookAt в Java Привязки OpenGL, похоже, ничего не делают .

...