как вернуть glScalef ()?
Вопрос
Я использую glScalef () для масштабирования в моей программе, теперь, когда я возвращаю его обратно к исходному размеру с кодом:
glScalef(1.0f/ZOOM, 1.0f/ZOOM, 1);
Это не очень хорошо работает в высоких масштабах ... (может быть, из-за потерянных десятичных дробей?)
Как я могу вернуть его обратно к исходному размеру без каких-либо расчетов, как указано выше?
Решение
Вы можете сделать это так:
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...]
Другие советы
Вы можете просто сохранить свою матрицу проекции. glPushMatrix (), glScalef (), ..., glPopMatrix ()
Используйте glPushMatrix () перед вашим первым glScalef (), чтобы поместить матрицу текущей модели в стек, а затем glPopMatrix (), когда вы хотите вернуть исходный масштаб, таким образом, не будет никаких ошибок округления, так как не выполняется никаких расчетов.
Сохраните предыдущий размер где-нибудь, скажем, в стеке, и используйте его.
(анимация перехода к предыдущему значению масштабирования, панорамирования и поворота довольно забавная, а не масштабирование)