OpenGL: установить позицию вместо перевода?

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

Вот чем я сейчас занимаюсь:

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

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

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

Обновление:

@Bahbar предлагает следующее:

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

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

2 ответа

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

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

Да, вы можете установить свою позицию просмотра, используя 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, похоже, ничего не делают.

Другие вопросы по тегам