将 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();
是一个简单的多边形。
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();