将 glScalef() 应用于多边形时,它改变了它的位置,如何摆脱它?

When applying glScalef() to a polygon, it changes its position, how to get rid of it?

是一个简单的多边形。

glPushMatrix();
glBegin(GL_POLYGON);
glColor3f(1, 1, 1);
glVertex3f(-150, 150, 0);
glVertex3f(150, 150, 0);
glVertex3f(150, 450, 0);
glVertex3f(-150, 450, 0);
glEnd();
glPopMatrix();

将glScalef() 应用于多边形时,它改变了它的位置,如何摆脱它?我的意思是...如果他在同样的高度,他会改变它。

glScalef() 不缩放多边形,它缩放整个坐标系。一切都将围绕多边形中心坐标 (0, 0, 0) 而不是 的点进行缩放。

如果您想围绕其他点 (x, y, z) 进行缩放,您可以使用以下代码:

glTranslatef(x, y, z);
glScalef(your, scale, here);
glTranslatef(-x, -y, -z);

尽管更可靠的解决方案是使多边形的坐标相对于其中心,在这种情况下,您不再需要第二个 glTranslatef() 了。在您的具体示例中:

glPushMatrix();
glTranslatef(0, 300, 0);
glScalef(your, scale, here);
glBegin(GL_POLYGON);
glColor3f(1, 1, 1);
glVertex3f(-150, -150, 0);
glVertex3f(150, -150, 0);
glVertex3f(150, 150, 0);
glVertex3f(-150, 150, 0);
glEnd();
glPopMatrix();