首页 > 解决方案 > 将 glScalef() 应用于多边形时,它会改变它的位置,如何摆脱它?

问题描述

是一个简单的多边形。

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() 应用于多边形时,它会改变它的位置,如何摆脱它?我的意思是……如果他在同一个高度,他会改变它。

标签: openglopengl-compat

解决方案


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

推荐阅读