如何在 Opengl 中缩放矩形并将其保持在初始位置

问题描述 投票:0回答:1

我想使用缩放变换矩阵在 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()
python opengl pycharm pyopengl opengl-compat
1个回答
0
投票

移动对象之前必须先对其进行缩放。将对象以 (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()
© www.soinside.com 2019 - 2024. All rights reserved.