Python OpenGL зумирование

тут выпала задача сделать зум в opengl, я попробовал разобраться но всё тщетно, вот код, буду рад любым подсказкам, сам от себя пробовал много чего, и glScale и glOrtho, оно всё работает но отрисовывает один раз, я хочу повесить этот ивент на колесико мыши в PySide, но не получается, график просто не обновляется

from PySide2.QtCore import QPoint
from PySide2.QtWidgets import *
from OpenGL import GL
import sys
import numpy as np


# Simple example for a class derived from QWidget, which has its own resize methods and mouse events
class TestWidget(QOpenGLWidget):

    def initializeGL(self):
        self.vertices = vertices = np.array([0.0, 1.0, -1.0, -1.0, 1.0, -1.0], dtype=np.float32)

        self.bufferID = bufferId = GL.glGenBuffers(1)

        GL.glBindBuffer(GL.GL_ARRAY_BUFFER, bufferId)

        GL.glBufferData(GL.GL_ARRAY_BUFFER, vertices.nbytes, vertices, GL.GL_DYNAMIC_DRAW)

        GL.glEnableVertexAttribArray(0)
        GL.glVertexAttribPointer(0, 2, GL.GL_FLOAT, GL.GL_FALSE, 0, None)
        # GL.glOrtho(-10, 10, -10, 10, -10, 10)             # если раскоментить тут - работает
        # GL.glOrtho(-100, 100, -100, 100, -100, 100)
        self.test = GL.glGetBufferSubData(GL.GL_ARRAY_BUFFER, 0, self.vertices.nbytes)

    def paintGL(self):
        GL.glDrawArrays(GL.GL_TRIANGLES, 0, 3)

    def mousePressEvent(self, event):

        GL.glRotatef(45, 0, 0, 1)   # тут не работает
        pos = QPoint(event.pos())
        print(f"Clicked: {pos}")
        event.accept()

    def wheelEvent(self, event):
        scrolls = event.delta()
        print(f"Scrolled: {scrolls}")
        GL.glOrtho(-100, 100, -100, 100, -100, 100)         # тут не рабоатет


class TestContainerApp(QWidget):
    def __init__(self):
        QWidget.__init__(self)

        self.setMinimumSize(500, 500)
        self.setBaseSize(500, 500)
        self.test_widget = TestWidget()

        self.gridLayoutWidget = QWidget()
        self.gridLayoutWidget.setObjectName(u"gridLayoutWidget")
        self.gridLayout = QGridLayout(self.gridLayoutWidget)
        self.gridLayout.setObjectName(u"gridLayout")
        self.gridLayout.addWidget(self.test_widget, 0, 0)
        self.setLayout(self.gridLayout)

        self.test_widget.setEnabled(True)
        self.test_widget.show()


if __name__ == '__main__':
    app = QApplication()
    my_app = TestContainerApp()
    my_app.show()
    sys.exit(app.exec_())

Ответы (1 шт):

Автор решения: antipups

В итоге сделал зуминг, с помощью комментария Владимира Клыкова, ответ вот такой:

Исправить Test Widget на тот виджет, который ниже:

class TestWidget(QOpenGLWidget):

    def initializeGL(self):

        self.vertices = vertices = np.array([0.0, 1.0, -1.0, -1.0, 1.0, -1.0], dtype=np.float32)

        self.bufferID = bufferId = GL.glGenBuffers(1)

        GL.glBindBuffer(GL.GL_ARRAY_BUFFER, bufferId)

        GL.glBufferData(GL.GL_ARRAY_BUFFER, vertices.nbytes, vertices, GL.GL_DYNAMIC_DRAW)

        GL.glEnableVertexAttribArray(0)
        GL.glVertexAttribPointer(0, 2, GL.GL_FLOAT, GL.GL_FALSE, 0, None)

        self.zooming_var = 0
        self.old_zoom_var = 0

        self.up_scale = 1.2
        self.down_scale = 0.8

    def set_scale(self):
        if self.zooming_var < self.old_zoom_var:
            scale = self.down_scale

        elif self.zooming_var > self.old_zoom_var:
            scale = self.up_scale

        else:
            scale = 1

        self.old_zoom_var = self.zooming_var

        return scale

    def paintGL(self):
        scale = self.set_scale()
        GL.glScalef(*((scale, ) * 3))
        GL.glDrawArrays(GL.GL_TRIANGLES, 0, 3)

    def wheelEvent(self, event):
        scrolls = event.delta()
        if scrolls > 0:
            self.zooming_var += 1

        else:
            self.zooming_var -= 1
        self.update()
→ Ссылка