我想使用缩放变换矩阵在 OpenGL 中缩放矩形。矩形的顶点为 (325,320)、(460,320)、(460,150) 和 (325,150)。我定义了一个函数来执行转换,并将缩放因子保留为函数的参数。但是当我调用该函数时,矩形的尺寸会减小,但不会停留在其初始位置。如何在保持其原始位置的同时缩放它?
这是我缩放矩形的代码:
def scaling(sc):
s = np.array([[sc, 0, 0],
[0, sc, 0],
[0, 0, 1]])
v1 = np.array([[325],
[320],
[1]])
v2 = np.array([[460],
[320],
[1]])
v3 = np.array([[460],
[150],
[1]])
v4 = np.array([[325],
[150],
[1]])
v11 = np.matmul(s, v1)
v22 = np.matmul(s, v2)
v33 = np.matmul(s, v3)
v44 = np.matmul(s, v4)
glColor3f(1.5, 0.17, 0)
glBegin(GL_QUADS)
glVertex2f(v11[0][0], v11[1][0])
glVertex2f(v22[0][0], v22[1][0])
glVertex2f(v33[0][0], v33[1][0])
glVertex2f(v44[0][0], v44[1][0])
glEnd()
移动对象之前必须先对其进行缩放。将对象以 (0, 0) 为中心,使用
glScale
对其进行缩放,并使用 glTranslate
将其移动到其位置。使用 glPushMatrix
和 glPopMatrix
保存和恢复变换矩阵。
def scaling(sc):
glPushMatrix()
glTranslate(392.5, 185, 0)
glScalef(sc, sc, 0)
glColor3f(1.5, 0.17, 0)
glBegin(GL_QUADS)
glVertex2f(-67.5, 35)
glVertex2f(67.5, 35)
glVertex2f(67.5, -35)
glVertex2f(-67.5, -35)
glEnd()
glPopMatrix()