Вопрос

Я использую 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 (), когда вы хотите вернуть исходный масштаб, таким образом, не будет никаких ошибок округления, так как не выполняется никаких расчетов.

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top