Попытка увеличить произвольный прямоугольник в квадрате с выравниванием по экрану - PullRequest
5 голосов
/ 09 июня 2010

У меня квадрант, выровненный по экрану, и я хотел бы увеличить произвольный прямоугольник внутри этого квадра, но я не правильно понимаю свою математику.

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

//
// render once zoomed in
glPushMatrix();
glTranslatef(offX, offY, 0);
glScalef(?wtf?, ?wtf?, 1.0f);

RenderQuad();

glPopMatrix();

//
// render PIP display
glPushMatrix();
glTranslatef(0.7f, 0.7f, 0);
glScalef(0.175f, 0.175f, 1.0f);

RenderQuad();

glPopMatrix();

У кого-нибудь есть советы? Пользователь выбирает прямоугольную область, и затем эти значения передаются моему объекту рендеринга как [x, y, w, h], где эти значения являются процентами ширины и высоты области просмотра.

Ответы [ 3 ]

1 голос
/ 15 июня 2010

Учитывая, что ваши значения передаются как [x, y, w, h], я думаю, что вы хотите сначала перевести в отрицательном направлении, чтобы получить верхний левый угол в 0,0, а затем масштабировать на 1 / w и 1/ ч, чтобы заполнить его на экран.Как это:

//
// render once zoomed in
glPushMatrix();
glTranslatef(-x, -y, 0);
glScalef(1.0/w, 1.0/h, 1.0f);

RenderQuad();

glPopMatrix();

Это работает?

0 голосов
/ 15 июня 2010

Из вашего комментария похоже, что вы хотите нарисовать тот же квадрат (RenderQuad ()), что и для полного изображения, и в режиме PIP.

Предполагая, что у вас есть widthPIP и heightPIP и позиция startXY окна PIP, используйте widthPIP/ totalWidth, heightPIP / totalHeight для масштабирования исходного четырехугольника и повторного рендеринга при заданном startXY.

Это то, что вы ищете?

0 голосов
/ 09 июня 2010

Когда мне нужно было это сделать, я всегда просто менял параметры, которые я передавал, на glOrtho, glFrustrum, gluPerspective или что-то еще (в зависимости от того, что я использовал).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...