может кто-нибудь сказать мне, какой смысл утверждения if-else в этом сегменте кода? что именно это делает?
особенно часть, где он делит высоту на ширину в глорто.
* в случае, если метод кому-то неоднозначен, эта цитата может помочь ..
«Это изменение формы сохраняет формы, обеспечивая одинаковое соотношение сторон для окна просмотра и окна мира»
void myReshape(int w, int h)
{
glViewport(0, 0, w, h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
if (w <= h)
glOrtho(-50.0, 50.0, -50.0*(GLfloat)h / (GLfloat)w,
50.0*(GLfloat)h / (GLfloat)w, -1.0, 1.0);
else
glOrtho(-50.0*(GLfloat)w / (GLfloat)h,
50.0*(GLfloat)w / (GLfloat)h, -50.0, 50.0, -1.0, 1.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
Спасибо заранее!
По сути, идея состоит в том, чтобы сохранить проекцию квадратного соотношения сторон (это то, что деление w
через h
для) а также что квадрат в плоскости XY с длиной стороны 100 (мировые космические единицы) вокруг выбранного начала координат XY (0,0) соответствует короткая размер окна (вот что if
для того, чтобы решить, какой из двух размеров окна является коротким).
Соотношение сторон можно указать двумя разными способами:
width/height
height/width
Если ширина больше высоты, то width/height > 1
а также height/width < 1
,
Аналогично, если высота больше ширины, width/height < 1
а также height/width > 1
Мы не можем установить ширину и высоту проекции на одно и то же значение, если размеры экрана не равны. В противном случае все будет выглядеть растянуто:
Таким образом, мы умножаем одно из измерений на соотношение сторон.
Если соотношение сторон больше 1, оно должно быть умножено на большее измерение.
Аналогично, если соотношение сторон меньше 1, оно должно быть умножено на меньшее измерение.
Что делает ваш пример, удостоверяется, что соотношение сторон всегда остается больше 1.
Следовательно, его всегда нужно умножать на большее измерение, которое может варьироваться. Вот для чего нужен случай if-else:
w <= h
(высота больше измерения), соотношение сторон умножается на верх / низ аргументы glOrtho ();h < w
, ширина — это большее измерение), соотношение сторон умножается на лево право аргументы glOrtho ();фактически, измерение X и Y (с использованием случая if-else) не может быть ниже 100 единиц (-От 50 до +50) — поскольку соотношение сторон всегда больше 1.