движущаяся камера openGL - PullRequest
       16

движущаяся камера openGL

0 голосов
/ 18 января 2011

Я пытаюсь переместить мою камеру.Я использую функцию gluLookAt.У меня есть некоторые переменные для этого.

float x,y,z ==> is camera location
float lx,ly,lz ==> is point that camera looks.

Я пытаюсь двигаться по оси x

x= x+0.01
gluLookAt(x,y,z, lx,ly,lz, 0.0 1.0, 0.0);

это работа.

Когда я пытаюсь двигаться по оси z, как описано выше

z = z +0.01
gluLookAt(x,y,z, lx,ly,lz, 0.0 1.0, 0.0);

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

Я хочу, чтобы объект выглядел больше при перемещении камеры вперед и уменьшался при перемещении камеры назад,Но при перемещении камеры по оси z происходят какие-либо изменения.

В чем проблема?Почему объект исчезает?Как я могу добиться, чтобы этот объект увеличивался при перемещении камеры вперед.

Я знаю, что могу решить эту проблему с помощью glTranslate или увеличения размера объекта.Но я хочу использовать gluLookAt. * ​​1018 *

Спасибо за ответы.

Ответы [ 3 ]

1 голос
/ 18 января 2011

Похоже, вы неправильно настроили матрицу проекции.Используйте gluPerspective (gl http://www.opengl.org/sdk/docs/man/xhtml/gluPerspective.xml) и убедитесь, что параметры zNear и zFar будут соответствовать вашему объекту.

0 голосов
/ 19 января 2011

Как уже упоминал Майкл, это звучит как проблема матрицы проекции.При использовании перспективного преобразования глубина преобразуется таким образом, чтобы обеспечить более высокую точность проверки глубины ближе к камере, чем на расстоянии.В рамках этого преобразования z-координаты (в координатах области просмотра) делятся на zNear (расстояние в ближней плоскости) - zFar (расстояние в дальней плоскости).Чтобы свести к минимуму борьбу за глубину, расстояние zNear (расстояние перед камерой, на котором объекты становятся невидимыми) должно быть настолько большим, насколько вы можете сойти с рук, чтобы при движении к объектам они в конечном итоге пересекали плоскость и передобъект будет обрезан (который обычно выглядит так, как если бы фронт объекта был обрезан, и вы можете видеть его внутри / сквозь него).

0 голосов
/ 19 января 2011

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

Объект окончательно исчезает, если камера проходит через него (пересекает плоскость zNear).

Как упоминал Майкл, вы должны установить матрицу перспективной проекции, используя gluPerspective .

...