функция изменения openGl

может кто-нибудь сказать мне, какой смысл утверждения 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();

}

Спасибо заранее!

0

Решение

По сути, идея состоит в том, чтобы сохранить проекцию квадратного соотношения сторон (это то, что деление w через h для) а также что квадрат в плоскости XY с длиной стороны 100 (мировые космические единицы) вокруг выбранного начала координат XY (0,0) соответствует короткая размер окна (вот что if для того, чтобы решить, какой из двух размеров окна является коротким).

3

Другие решения

Соотношение сторон можно указать двумя разными способами:

  1. width/height
  2. 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.

2

По вопросам рекламы [email protected]