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, похоже, ничего не делают.