Ниже приведено сообщение Дэйва Шрайнера о настройкебазовая система просмотра:
Сначала вычислите ограничивающую сферу для всех объектов в вашей сцене.Это должно предоставить вам два бита информации: центр сферы (пусть (cx, cy, cz) будет эта точка) и ее диаметр (назовите его «diam»).
Далее выберите значениедля плоскости отсечения zNear.Общие рекомендации - выбирать что-то большее, чем, но близкое к 1,0.Итак, допустим, вы установили:
zNear = 1.0;
zFar = zNear + diam;
Структурируйте вызовы вашей матрицы в следующем порядке (для ортогональной проекции):
GLdouble left = c.x - diam;
GLdouble right = c.x + diam;
GLdouble bottom c.y - diam;
GLdouble top = c.y + diam;
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(left, right, bottom, top, zNear, zFar);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
Этот подход должен центрировать ваши объекты по центруОкно и растянуть их, чтобы соответствовать (то есть, если вы используете окно с соотношением сторон = 1,0).Если ваше окно не квадратное, вычислите левый, правый, нижний и верхний, как указано выше, и вставьте следующую логику перед вызовом glOrtho ():
GLdouble aspect = (GLdouble) windowWidth / windowHeight;
if ( aspect < 1.0 ) { // window taller than wide
bottom /= aspect;
top /= aspect;
} else {
left *= aspect;
right *= aspect;
}
Приведенный выше код должен позиционироватьобъекты в вашей сцене соответственно.Если вы намереваетесь манипулировать (то есть вращаться и т. Д.), Вам необходимо добавить к нему преобразование просмотра.
Типичное преобразование просмотра будет выполняться в матрице ModelView и может выглядеть следующим образом:
gluLookAt(0., 0., 2.*diam,
c.x, c.y, c.z,
0.0, 1.0, 0.0);