我想在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()
1条答案
按热度按时间eqfvzcg81#
在移动对象之前,必须缩放对象。将对象以(0,0)为中心,用
glScale
缩放,然后用glTranslate
将其移动到其位置。使用glPushMatrix
和glPopMatrix
来保存和恢复变换矩阵。请注意,这与预先使用
glTranslate
围绕点(0,0)定向对象相同: