Вопрос немного двусмысленный. Вы просили, чтобы квадраты были вдвое меньше их первоначального размера, но вы не указали, где они должны быть после изменения их размера. Стандартный способ - применить коэффициент масштабирования:
glPushMatrix();
glScaled(.5,.5,.5);
glBegin(GL_QUADS);
glVertex3f(-0.7f, -0.5f, 0.0f);
glVertex3f(0.7f, -0.5f, 0.0f);
glVertex3f(0.4f, 0.5f, 0.0f);
glVertex3f(-0.4f, 0.5f, 0.0f);
glEnd();
...
glBegin(GL_QUADS);
...
glEnd();
glPopMatrix();
Это масштабирует все после вызова glScale
до glPopMatrix()
. Следовательно, квадраты будут в два раза меньше, но также будут вдвое меньше от начала координат (здесь нет проблем, когда они центрированы в начале координат). Если вы хотите применить коэффициент масштабирования к квадратам, но не к их местоположению, вам, вероятно, понадобится что-то вроде этого:
glPushMatrix();
glTranslated(xx,yy,zz);
glBegin(GL_QUADS);
glVertex3d( ww*ss, hh*ss,0);
glVertex3d(-ww*ss, hh*ss,0);
glVertex3d(-ww*ss,-hh*ss,0);
glVertex3d( ww*ss,-hh*ss,0);
glEnd();
glPopMatrix();
Тогда вам просто нужно установить ss
на желаемое значение и использовать xx,yy,zz
, чтобы разместить квад по вашему желанию. Конечно, немного глупо так поступать, по крайней мере, вы должны умножить значения по одному и запомнить их, но вы поймете, что идея.