Как сделать серию фигур в два раза меньше? - PullRequest
0 голосов
/ 27 мая 2011

У меня есть сцена с кучей фигур, нарисованных так:

    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();

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

1 Ответ

3 голосов
/ 27 мая 2011

Вопрос немного двусмысленный. Вы просили, чтобы квадраты были вдвое меньше их первоначального размера, но вы не указали, где они должны быть после изменения их размера. Стандартный способ - применить коэффициент масштабирования:

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

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