Opengl 将glScalef()应用于多边形时,它会更改其位置,如何消除它?
是一个简单的多边形Opengl 将glScalef()应用于多边形时,它会更改其位置,如何消除它?,opengl,opengl-compat,Opengl,Opengl Compat,是一个简单的多边形 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()应用于多边形时,它会更改其位置,如何消除它?我是说。。。如果他在同一高度,他会改变它。gl
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)
的点进行缩放,而不是围绕多边形的中心
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();
如果要围绕某个其他点缩放(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();