如何在OpenGL中缩放矩形使其保持在初始位置

8mmmxcuj  于 2023-10-18  发布在  其他
关注(0)|答案(1)|浏览(104)

我想在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()
eqfvzcg8

eqfvzcg81#

在移动对象之前,必须缩放对象。将对象以(0,0)为中心,用glScale缩放,然后用glTranslate将其移动到其位置。使用glPushMatrixglPopMatrix来保存和恢复变换矩阵。

def scaling(sc):

    glPushMatrix()
    glTranslatef(392.5, 185, 0)
    glScalef(sc, sc, 1)

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

请注意,这与预先使用glTranslate围绕点(0,0)定向对象相同:

def scaling(sc):

    glPushMatrix()
    glTranslate(392.5, 185, 0)
    glScalef(sc, sc, 1)
    glTranslate(-392.5, -185, 0)

    glColor3f(1.5, 0.17, 0)
    glBegin(GL_QUADS)
    glVertex2f(325, 320)
    glVertex2f(460, 320)
    glVertex2f(460, 150)
    glVertex2f(325, 150)
    glEnd()

    glPopMatrix()

相关问题