как вернуть glScalef ()? - PullRequest
5 голосов
/ 11 марта 2009

Я использую glScalef () для увеличения в моей программе, теперь, когда я возвращаю его обратно к исходному размеру с кодом:

glScalef(1.0f/ZOOM, 1.0f/ZOOM, 1);

Это не очень хорошо работает в высоких масштабах ... (может быть из-за потерянных десятичных дробей?)

Как я могу вернуть его обратно к исходному размеру без каких-либо расчетов, как указано выше?

Ответы [ 4 ]

8 голосов
/ 11 марта 2009

Вы можете сделать это так:

ZOOMSQRT = sqrt(ZOOM);
glScalef(1.0f/ZOOMSQRT, 1.0f/ZOOMSQRT, 1);
glScalef(1.0f/ZOOMSQRT, 1.0f/ZOOMSQRT, 1);

или используйте glPushMatrix / glPopMatrix для восстановления исходной матрицы перед увеличением:

glPushMatrix();
glScalef(ZOOM, ZOOM, 1);
[do whatever you like here...]
glPopMatrix(); // now it's at normal scale again
[do other things here...]
5 голосов
/ 11 марта 2009

Вы можете просто сохранить свою матрицу проекции. glPushMatrix (), glScalef (), ..., glPopMatrix ()

4 голосов
/ 11 марта 2009

Используйте glPushMatrix () перед вашим первым glScalef (), чтобы поместить матрицу текущей модели в стек, а затем glPopMatrix (), когда вы хотите вернуть исходный масштаб, таким образом, не будет никаких ошибок округления расчеты не выполняются.

2 голосов
/ 11 марта 2009

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

(анимация перехода к предыдущему значению масштабирования, панорамирования и поворота довольно забавная, а не масштабирование)

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