Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opengl 将glScalef()应用于多边形时,它会更改其位置,如何消除它?_Opengl_Opengl Compat - Fatal编程技术网

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