Advertisement
Chl_Snt

OpenGL №1

May 13th, 2023
629
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.32 KB | None | 0 0
  1. from PyQt5 import QtCore
  2. from PyQt5 import QtGui
  3. from PyQt5 import QtOpenGL
  4. from PyQt5.QtWidgets import *
  5. import OpenGL.GL as gl
  6. from OpenGL import GLU
  7. import sys
  8. from OpenGL.arrays import vbo
  9. import numpy as np
  10.  
  11.  
  12. class GLWidget(QtOpenGL.QGLWidget):
  13.     def __init__(self, parent=None):
  14.         self.parent = parent
  15.         QtOpenGL.QGLWidget.__init__(self, parent)
  16.  
  17.     def initializeGL(self):
  18.         self.qglClearColor(QtGui.QColor(0, 0, 255))
  19.         gl.glEnable(gl.GL_DEPTH_TEST)
  20.         self.initGeometry()
  21.         self.rotX = 0.0
  22.         self.rotY = 0.0
  23.         self.rotZ = 0.0
  24.  
  25.     def resizeGL(self, width, height):
  26.         gl.glViewport(0, 0, width, height)
  27.         gl.glMatrixMode(gl.GL_PROJECTION)
  28.         gl.glLoadIdentity()
  29.         aspect = width / float(height)
  30.         GLU.gluPerspective(45.0, aspect, 1.0, 100.0)
  31.         gl.glMatrixMode(gl.GL_MODELVIEW)
  32.  
  33.     def paintGL(self):
  34.         gl.glClear(gl.GL_COLOR_BUFFER_BIT | gl.GL_DEPTH_BUFFER_BIT)
  35.         gl.glPushMatrix()
  36.         gl.glTranslate(0.0, 0.0, -50.0)
  37.         gl.glScale(20.0, 20.0, 20.0)
  38.         gl.glRotate(self.rotX, 1.0, 0.0, 0.0)
  39.         gl.glRotate(self.rotY, 0.0, 1.0, 0.0)
  40.         gl.glRotate(self.rotZ, 0.0, 0.0, 1.0)
  41.         gl.glTranslate(-0.5, -0.5, -0.5)  
  42.         gl.glEnableClientState(gl.GL_VERTEX_ARRAY)
  43.         gl.glEnableClientState(gl.GL_COLOR_ARRAY)
  44.         gl.glVertexPointer(3, gl.GL_FLOAT, 0, self.vertVBO)
  45.         gl.glColorPointer(3, gl.GL_FLOAT, 0, self.colorVBO)
  46.         gl.glDrawElements(gl.GL_QUADS, len(self.cubeIdxArray), gl.GL_UNSIGNED_INT, self.cubeIdxArray)
  47.         gl.glDisableClientState(gl.GL_VERTEX_ARRAY)
  48.         gl.glDisableClientState(gl.GL_COLOR_ARRAY)
  49.         gl.glPopMatrix()  
  50.  
  51.     def initGeometry(self):
  52.         self.cubeVtxArray = np.array(
  53.             [[0.0, 0.0, 0.0],
  54.              [1.0, 0.0, 0.0],
  55.              [1.0, 1.0, 0.0],
  56.              [0.0, 1.0, 0.0],
  57.              [0.0, 0.0, 1.0],
  58.              [1.0, 0.0, 1.0],
  59.              [1.0, 1.0, 1.0],
  60.              [0.0, 1.0, 1.0]])
  61.         self.vertVBO = vbo.VBO(np.reshape(self.cubeVtxArray,
  62.                                           (1, -1)).astype(np.float32))
  63.         self.vertVBO.bind()
  64.  
  65.         self.cubeClrArray = np.array(
  66.             [[0.0, 0.0, 0.0],
  67.              [1.0, 0.0, 0.0],
  68.              [1.0, 1.0, 0.0],
  69.              [0.0, 1.0, 0.0],
  70.              [0.0, 0.0, 1.0],
  71.              [1.0, 0.0, 1.0],
  72.              [1.0, 1.0, 1.0],
  73.              [0.0, 1.0, 1.0]])
  74.         self.colorVBO = vbo.VBO(np.reshape(self.cubeClrArray,
  75.                                            (1, -1)).astype(np.float32))
  76.         self.colorVBO.bind()
  77.  
  78.         self.cubeIdxArray = np.array(
  79.             [0, 1, 2, 3,
  80.              3, 2, 6, 7,
  81.              1, 0, 4, 5,
  82.              2, 1, 5, 6,
  83.              0, 3, 7, 4,
  84.              7, 6, 5, 4])
  85.  
  86.     def setRotX(self, val):
  87.         self.rotX = np.pi * val
  88.        
  89.     def setRotY(self, val):
  90.         self.rotY = np.pi * val
  91.        
  92.     def setRotZ(self, val):
  93.         self.rotZ = np.pi * val
  94.  
  95.  
  96. class MainWindow(QMainWindow):
  97.     def __init__(self):
  98.         QMainWindow.__init__(self)  # call the init for the parent class
  99.         self.resize(300, 300)
  100.         self.setWindowTitle('Hello OpenGL App')
  101.         self.glWidget = GLWidget(self)
  102.         self.initGUI()
  103.         timer = QtCore.QTimer(self)
  104.         timer.setInterval(2)  # period, in milliseconds
  105.         timer.timeout.connect(self.glWidget.updateGL)
  106.         timer.start()
  107.  
  108.     def initGUI(self):
  109.         central_widget = QWidget()
  110.         gui_layout = QVBoxLayout()
  111.         central_widget.setLayout(gui_layout)
  112.         self.setCentralWidget(central_widget)
  113.  
  114.         gui_layout.addWidget(self.glWidget)
  115.  
  116.         sliderX = QSlider(QtCore.Qt.Horizontal)
  117.         sliderX.valueChanged.connect(lambda val: self.glWidget.setRotX(val))
  118.  
  119.         sliderY = QSlider(QtCore.Qt.Horizontal)
  120.         sliderY.valueChanged.connect(lambda val: self.glWidget.setRotY(val))
  121.  
  122.         sliderZ = QSlider(QtCore.Qt.Horizontal)
  123.         sliderZ.valueChanged.connect(lambda val: self.glWidget.setRotZ(val))
  124.  
  125.         gui_layout.addWidget(sliderX)
  126.         gui_layout.addWidget(sliderY)
  127.         gui_layout.addWidget(sliderZ)
  128.  
  129.  
  130. if __name__ == '__main__':
  131.     app = QApplication(sys.argv)
  132.     win = MainWindow()
  133.     win.show()
  134.     sys.exit(app.exec_())
  135.  
  136.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement