Вы не должны использовать gluLookAt (обратите внимание на 'u' в 'glu', gluLookAt не является частью OpenGL), но устанавливать матрицы представления модели напрямую.Сначала вы должны определить, что происходит, далеко и в сторону.Большинство людей, использующих OpenGL, предпочитают правую систему координат (RHCS).Первое основание - X, второе Y и третье Z. В RHCS X - сбоку (вправо), Y - далеко, а Z - вверх.Проекция OpenGL по умолчанию такова, как если бы камера смотрела вниз по оси Z в отрицательном направлении, т. Е. Взгляд падал.
Таким образом, можно сказать, что матрица
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
смотрит вниз,Заглядывая в дальний угол, нужно рыскать.X остается прежним, но Y и Z меняются местами.Матрица, соответствующая этому, будет иметь вид
1 0 0 0
0 0 1 0
0 1 0 0
0 0 0 1
. Если смотреть в сторону, глобальный Y отображает на X, глобальный X отображает на Z, а глобальный Z отображает на Y, в результате чего
0 1 0 0
0 0 1 0
1 0 0 0
0 0 0 1
Теперь вы, вероятно, хотите панорамировать и масштабировать этот вид.Вы можете сделать это либо используя glScale и glTranslate, либо непосредственно в матрице.
s 0 0 pan.x
0 s 0 pan.y
0 0 s pan.z
0 0 0 1
s 0 0 pan.x
0 0 s pan.y
0 s 0 pan.z
0 0 0 1
0 s 0 pan.x
0 0 s pan.y
s 0 0 pan.z
0 0 0 1
Теперь панорамирование в направлении Z не имеет большого смысла в ортографической проекции.Таким образом, вы можете оставить pan.z равным нулю.
Теперь давайте рассмотрим вашу проблему с ограничением глубины.Одним из приятных свойств отографической проекции является то, что диапазон обрезки глубины будет линейно отображаться в буфер глубины, тогда как в перспективной проекции он следует закону 1 / x.Также допускаются смешанные знаки для дальнего и ближнего расстояния, и нет никаких ограничений, что | рядом |<| далеко |Таким образом, для каждого из ваших видов все, что вам нужно сделать, это определить минимальное и максимальное положения всех преобразованных вершин объектов и использовать их для установки соответствующих значений клипа в проекции каждого вида.Хорошее приближение, так что вам не нужно перебирать каждую вершину, используя ограничивающие сферы и позиции объектов (добавляйте / вычитайте радиус ограничивающей сферы к ее положению), чтобы получить минимальный / максимальный диапазоны. </p>