Seite 1 von 1

PyQt5 und PYOPENGL

Verfasst: Samstag 3. Dezember 2022, 17:13
von tryyan
Hallo ich probiere ein 3D modell (ein Würfel) in einer GUI darzustellen. Das klappt aufch. Jtzt möchte ich dem würfel eine Textur geben das klappt aber nicht kann mir jemand helfen?
Herzlichen Dank


Code: Alles auswählen

import math
import sys

import numpy as np
from OpenGL.GL import *
from OpenGL.raw.GLU import gluPerspective
from PyQt5.QtGui import QOpenGLVersionProfile, QColor
from PyQt5.QtWidgets import QOpenGLWidget, QApplication
from PyQt5.QtCore import pyqtSignal, QPoint, Qt
from PIL import Image, ImageQt

class PyQtOpenGL(QOpenGLWidget):
    x_rotation_changed = pyqtSignal(int)
    y_rotation_changed = pyqtSignal(int)
    z_rotation_changed = pyqtSignal(int)

    def __init__(self, parent=None):
        super().__init__(parent)
        self.paint_0 = True
        self.paint_1 = True
        self.paint_2 = True
        self.resize_lines = True
        self.resize_lines = False


        self.img = Image.open("erde.png")
        self.mapWidth, self.mapHeight = self.img.size
        pgImData = np.asarray(self.img)
        self.inputMapFile = np.flipud(pgImData)
        self.clear = QColor.fromCmykF(0.0, 0.0, 0.0, 0.0)

        self.paint_rotation = True
        self.paint_rotation = False
        self.x_rotation = 0
        self.y_rotation = 0
        self.z_rotation = 0
        self.last_pos = QPoint()
    def normalize_angle(self, angle):
        while angle < 0:
            angle += 360 * 16

        while angle > 360 * 16:
            angle -= 360 * 16

        return angle
    def set_x_rotatio(self, angle):
        angle = self.normalize_angle(angle)
        if angle != self.x_rotation:
            self.x_rotation = angle
            self.x_rotation_changed.emit(angle)
            self.update()


    def set_y_rotatio(self, angle):
        angle = self.normalize_angle(angle)
        if angle != self.y_rotation:
            self.y_rotation = angle
            self.y_rotation_changed.emit(angle)
            self.update()

    def set_z_rotatio(self, angle):
        angle = self.normalize_angle(angle)
        if angle != self.z_rotation:
            self.z_rotation = angle
            self.z_rotation_changed.emit(angle)
            self.update()

    def initializeGL(self):
        version_profile = QOpenGLVersionProfile()
        version_profile.setVersion(2, 0)
        self.gl = self.context().versionFunctions(version_profile)
        self.gl.initializeOpenGLFunctions()

        self.setClearColor(self.clear.darker())
        self.object = self.makeObject()
        self.gl.glShadeModel(self.gl.GL_SMOOTH)
        self.gl.glEnable(self.gl.GL_DEPTH_TEST)
        self.gl.glEnable(self.gl.GL_CULL_FACE)
        self.gl.glEnable(self.gl.GL_LIGHTING)
        self.gl.glLightModelfv(self.gl.GL_LIGHT_MODEL_AMBIENT, [0.9, 0.9, 0.9, 1.0])
        self.gl.glEnable(self.gl.GL_COLOR_MATERIAL)
        self.gl.glColorMaterial(self.gl.GL_FRONT, self.gl.GL_AMBIENT_AND_DIFFUSE)

        self.gl.glActiveTexture(self.gl.GL_TEXTURE0)
        self.text_obj = self.gl.glGenTextures(1)
        self.gl.glBindTexture(self.gl.GL_TEXTURE_2D, self.text_obj)
        self.gl.glPixelStorei(self.gl.GL_UNPACK_ALIGNMENT, 1)
        self.gl.glTexImage2D(self.gl.GL_TEXTURE_2D, 0, self.gl.GL_RGB, self.mapWidth, self.mapHeight, 0, self.gl.GL_RGB, self.gl.GL_UNSIGNED_BYTE, self.inputMapFile.tobytes())
        self.gl.glPixelStorei(self.gl.GL_UNPACK_ALIGNMENT, 4)
        self.gl.glTexParameterf(self.gl.GL_TEXTURE_2D, self.gl.GL_TEXTURE_MAG_FILTER, self.gl.GL_LINEAR)
        self.gl.glTexParameterf(self.gl.GL_TEXTURE_2D, self.gl.GL_TEXTURE_MIN_FILTER, self.gl.GL_LINEAR)

    def paintGL(self):
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
        glLoadIdentity()
        glTranslatef(0.0, 0.0, -10.0)
        glRotatef(self.x_rotation/ 16.0, 1.0, 0.0, 0.0)
        glRotatef(self.y_rotation/ 16.0, 0.0, 1.0, 0.0)
        glRotatef(self.z_rotation/ 16.0, 0.0, 0.0, 1.0)

        self.gl.glEnable(self.gl.GL_TEXTURE_2D)
        self.gl.glBindTexture(self.gl.GL_TEXTURE_2D, self.text_obj)
        self.gl.glColor3f(1, 1, 1)
        self.gl.glCallList(self.object)
        #self.draw()




    def makeObject(self):
        genList = self.gl.glGenLists(1)
        self.gl.glNewList(genList, self.gl.GL_COMPILE)
        self.gl.glBegin(self.gl.GL_QUADS)

#mistake
        UResolution = 32
        VResolution = 32
        r = 0.3
        startU = 0
        startV = 0
        endU = math.pi * 2
        endV = math.pi
        stepU = (endU-startU)/UResolution # step size between U-points on the grid
        stepV = (endV-startV)/VResolution # step size between V-points on the grid
        for i in range(UResolution):  # U-points
            for j in range(VResolution):  # V-points


                t0 = [i/UResolution, 1-j/VResolution]
                t1 = [i/UResolution, 1-(j+1)/VResolution]
                t2 = [(i+1)/UResolution, 1-j/VResolution]
                t3 = [(i+1)/UResolution, 1-(j+1)/VResolution]

#code of the quader
                self.gl.glTexCoord2f(*t0)
                self.gl.glVertex3f(1.0, 1.0,-1.0)
                self.gl.glTexCoord2f(*t1)
                self.gl.glVertex3f(-1.0, 1.0,-1.0)
                self.gl.glTexCoord2f(*t2)
                self.gl.glVertex3f(-1.0, 1.0, 1.0)
                self.gl.glTexCoord2f(*t3)
                self.gl.glVertex3f( 1.0, 1.0, 1.0)

                self.gl.glTexCoord2f(*t0)
                self.gl.glVertex3f( 1.0,-1.0, 1.0)
                self.gl.glTexCoord2f(*t1)
                self.gl.glVertex3f(-1.0,-1.0, 1.0)
                self.gl.glTexCoord2f(*t2)
                self.gl.glVertex3f(-1.0,-1.0,-1.0)
                self.gl.glTexCoord2f(*t3)
                self.gl.glVertex3f( 1.0,-1.0,-1.0)

                self.gl.glTexCoord2f( *t0)
                self.gl.glVertex3f( 1.0, 1.0, 1.0)
                self.gl.glTexCoord2f(*t1)
                self.gl.glVertex3f(-1.0, 1.0, 1.0)
                self.gl.glTexCoord2f(*t2)
                self.gl.glVertex3f(-1.0,-1.0, 1.0)
                self.gl.glTexCoord2f(*t3)
                self.gl.glVertex3f( 1.0,-1.0, 1.0)

                self.gl.glTexCoord2f(*t0)
                self.gl.glVertex3f( 1.0,-1.0,-1.0)
                self.gl.glTexCoord2f(*t1)
                self.gl.glVertex3f(-1.0,-1.0,-1.0)
                self.gl.glTexCoord2f(*t2)
                self.gl.glVertex3f(-1.0, 1.0,-1.0)
                self.gl.glTexCoord2f(*t3)
                self.gl.glVertex3f( 1.0, 1.0,-1.0)

                self.gl.glTexCoord2f(*t0)
                self.gl.glTexCoord2f(10.0, 20.0)
                self.gl.glTexCoord2f(*t1)
                self.gl.glVertex3f(-1.0, 1.0, 1.0)
                self.gl.glTexCoord2f(*t2)
                self.gl.glVertex3f(-1.0, 1.0,-1.0)
                self.gl.glTexCoord2f(*t3)
                self.gl.glVertex3f(-1.0,-1.0,-1.0)
                self.gl.glTexCoord2f(*t0)
                self.gl.glVertex3f(-1.0,-1.0, 1.0)
                self.gl.glTexCoord2f(*t0)
                self.gl.glTexCoord2f(10.0, 20.0)
                self.gl.glTexCoord2f(*t1)

                self.gl.glVertex3f( 1.0, 1.0,-1.0)
                self.gl.glTexCoord2f(*t2)
                self.gl.glVertex3f( 1.0, 1.0, 1.0)
                self.gl.glTexCoord2f(*t3)
                self.gl.glVertex3f( 1.0,-1.0, 1.0)
                self.gl.glTexCoord2f(*t0)
                self.gl.glVertex3f( 1.0,-1.0,-1.0)

        self.gl.glEnd()
        self.gl.glEndList()

        return genList

    def draw(self):
        if self.paint_rotation:




            glBegin(GL_QUADS)

            glColor3f(0.0,1.0,0.0)
            glVertex3f( 1.0, 1.0,-1.0)
            glVertex3f(-1.0, 1.0,-1.0)
            glVertex3f(-1.0, 1.0, 1.0)
            glVertex3f( 1.0, 1.0, 1.0)

            glColor3f(1.0,0.0,0.0)
            glVertex3f( 1.0,-1.0, 1.0)
            glVertex3f(-1.0,-1.0, 1.0)
            glVertex3f(-1.0,-1.0,-1.0)
            glVertex3f( 1.0,-1.0,-1.0)

            glColor3f(0.0,1.0,0.0)
            glVertex3f( 1.0, 1.0, 1.0)
            glVertex3f(-1.0, 1.0, 1.0)
            glVertex3f(-1.0,-1.0, 1.0)
            glVertex3f( 1.0,-1.0, 1.0)

            glColor3f(1.0,1.0,0.0)
            glVertex3f( 1.0,-1.0,-1.0)
            glVertex3f(-1.0,-1.0,-1.0)
            glVertex3f(-1.0, 1.0,-1.0)
            glVertex3f( 1.0, 1.0,-1.0)

            glColor3f(0.0,0.0,1.0)
            glVertex3f(-1.0, 1.0, 1.0)
            glVertex3f(-1.0, 1.0,-1.0)
            glVertex3f(-1.0,-1.0,-1.0)
            glVertex3f(-1.0,-1.0, 1.0)

            glColor3f(1.0,0.0,1.0)
            glVertex3f( 1.0, 1.0,-1.0)
            glVertex3f( 1.0, 1.0, 1.0)
            glVertex3f( 1.0,-1.0, 1.0)
            glVertex3f( 1.0,-1.0,-1.0)

            glEnd()





        if self.paint_0:

            glColor3f(1.0, 0.0, 0.0)
            glRectf(-0, -0, 0, 0)

        if self.paint_1:
            glColor3f(0.0, 1.0, 0.0)
            x=10
            y=10
            self.draw_loop(x, y)

        if self.paint_2:
            glColor3f(0.0, 0.0, 0.0)
            x=5
            y=5
            self.draw_loop(x, y)


    def resizeGL(self, width, height):
        side = min(width, height)
        if side < 0:
            return
        glViewport((width -side) //2, (height - side) // 2, side, side)
        glMatrixMode(GL_PROJECTION)
        glLoadIdentity()
        if self.resize_lines:
            glOrtho(-50, 50, -50, 50, -50.0, 50.0)
        else:
            glOrtho(-2, +2, -2, +2, 1.0, 15.0)
        glMatrixMode(GL_MODELVIEW)

    def draw_loop(self, x, y, incr=10):
        for _ in range(5):
            self.draw_square_lines(x, y)
            x += incr
            y += incr

    def draw_square_lines(self, x=10, y=10, z=10):
        glBegin(GL_LINES)
        glVertex3f(x, y, z)
        glVertex3f(x, -y, z)

        glVertex3f(x, -y, z)
        glVertex3f(-x, -y, z)

        glVertex3f(-x, -y, z)
        glVertex3f(-x, y, z)

        glVertex3f(-x, y, z)
        glVertex3f(x, y, z)
        glEnd()

    def mousePressEvent(self, event):
        self.last_pos = event.pos()

    def mouseMoveEvent(self, event):
        move_x = event.x() - self.last_pos.x()
        move_y = event.y() - self.last_pos.y()

        if event.buttons() & Qt.LeftButton:
            self.set_x_rotatio(self.x_rotation + 8 * move_y)
            self.set_y_rotatio(self.y_rotation + 8 * move_x)

        elif event.buttons() & Qt.RightButton:
            self.set_x_rotatio(self.x_rotation + 8 * move_y)
            self.set_z_rotatio(self.z_rotation + 8 * move_x)
        self.last_pos = event.pos()


    def setClearColor(self, c):
        self.gl.glClearColor(c.redF(), c.greenF(), c.blueF(), c.alphaF())

if __name__ == '__main__':
    app =  QApplication(sys.argv)
    widget = PyQtOpenGL()
    widget.show()
    app.exec_()

Re: PyQt5 und PYOPENGL

Verfasst: Sonntag 4. Dezember 2022, 13:07
von tryyan
Ok ich weiss jetzt was das Problem ist ich muss irgendwie die bit (vom Bild ) ändern auf 32 bit (vorher 24) wie kann ich das Aber ändern kann mir jemand helfen ?

Re: PyQt5 und PYOPENGL

Verfasst: Sonntag 4. Dezember 2022, 13:50
von __deets__

Re: PyQt5 und PYOPENGL

Verfasst: Mittwoch 7. Dezember 2022, 19:15
von tryyan
Danke habe es geschaft!

Code: Alles auswählen

import math
import sys

import numpy as np
from OpenGL.GL import *
from OpenGL.raw.GLU import gluPerspective
from PyQt5.QtGui import QOpenGLVersionProfile, QColor
from PyQt5.QtWidgets import QOpenGLWidget, QApplication
from PyQt5.QtCore import pyqtSignal, QPoint, Qt
from PIL import Image, ImageQt

class PyQtOpenGL(QOpenGLWidget):
    x_rotation_changed = pyqtSignal(int)
    y_rotation_changed = pyqtSignal(int)
    z_rotation_changed = pyqtSignal(int)

    def __init__(self, parent=None):
        super().__init__(parent)
        self.paint_0 = True
        self.paint_1 = True
        self.paint_2 = True
        self.resize_lines = True
        self.resize_lines = False
        #get Skin Texture
        from scripts.GetSkin import getSkinTexture



        self.paint_rotation = True
        self.paint_rotation = False
        self.x_rotation = 0
        self.y_rotation = 0
        self.z_rotation = 0
        self.last_pos = QPoint()


    def setTexureofSkin(self, skintexture):
        self.img = Image.open("./assets/"+skintexture+".jpg")

        self.mapWidth, self.mapHeight = self.img.size
        pgImData = np.asarray(self.img)
        self.inputMapFile = np.flipud(pgImData)
        self.clear = QColor.fromCmykF(0.0, 0.0, 0.0, 0.0)


    def normalize_angle(self, angle):
        while angle < 0:
            angle += 360 * 16

        while angle > 360 * 16:
            angle -= 360 * 16

        return angle
    def set_x_rotatio(self, angle):
        angle = self.normalize_angle(angle)
        if angle != self.x_rotation:
            self.x_rotation = angle
            self.x_rotation_changed.emit(angle)
            self.update()


    def set_y_rotatio(self, angle):
        angle = self.normalize_angle(angle)
        if angle != self.y_rotation:
            self.y_rotation = angle
            self.y_rotation_changed.emit(angle)
            self.update()

    def set_z_rotatio(self, angle):
        angle = self.normalize_angle(angle)
        if angle != self.z_rotation:
            self.z_rotation = angle
            self.z_rotation_changed.emit(angle)
            self.update()

    def initializeGL(self):
        version_profile = QOpenGLVersionProfile()
        version_profile.setVersion(2, 0)
        self.gl = self.context().versionFunctions(version_profile)
        self.gl.initializeOpenGLFunctions()

        self.setClearColor(self.clear.darker())
        self.object = self.makeObject()
        self.gl.glShadeModel(self.gl.GL_SMOOTH)
        self.gl.glEnable(self.gl.GL_DEPTH_TEST)
        self.gl.glEnable(self.gl.GL_CULL_FACE)
        self.gl.glEnable(self.gl.GL_LIGHTING)
        self.gl.glLightModelfv(self.gl.GL_LIGHT_MODEL_AMBIENT, [0.9, 0.9, 0.9, 1.0])
        self.gl.glEnable(self.gl.GL_COLOR_MATERIAL)
        self.gl.glColorMaterial(self.gl.GL_FRONT, self.gl.GL_AMBIENT_AND_DIFFUSE)

        self.gl.glActiveTexture(self.gl.GL_TEXTURE0)
        self.text_obj = self.gl.glGenTextures(1)
        self.gl.glBindTexture(self.gl.GL_TEXTURE_2D, self.text_obj)
        self.gl.glPixelStorei(self.gl.GL_UNPACK_ALIGNMENT, 1)
        self.gl.glTexImage2D(self.gl.GL_TEXTURE_2D, 0, self.gl.GL_RGBA, self.mapWidth, self.mapHeight, 0, self.gl.GL_RGBA, self.gl.GL_UNSIGNED_BYTE, self.inputMapFile.tobytes())
        self.gl.glPixelStorei(self.gl.GL_UNPACK_ALIGNMENT, 4)
        self.gl.glTexParameterf(self.gl.GL_TEXTURE_2D, self.gl.GL_TEXTURE_MAG_FILTER, self.gl.GL_LINEAR)
        self.gl.glTexParameterf(self.gl.GL_TEXTURE_2D, self.gl.GL_TEXTURE_MIN_FILTER, self.gl.GL_LINEAR)

    def paintGL(self):
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
        glLoadIdentity()
        glTranslatef(0.0, 0.0, -10.0)
        glRotatef(self.x_rotation/ 16.0, 1.0, 0.0, 0.0)
        glRotatef(self.y_rotation/ 16.0, 0.0, 1.0, 0.0)
        glRotatef(self.z_rotation/ 16.0, 0.0, 0.0, 1.0)

        self.gl.glEnable(self.gl.GL_TEXTURE_2D)
        self.gl.glBindTexture(self.gl.GL_TEXTURE_2D, self.text_obj)
        self.gl.glColor3f(1, 1, 1)
        self.gl.glCallList(self.object)
        #self.draw()




    def makeObject(self):
        genList = self.gl.glGenLists(1)
        self.gl.glNewList(genList, self.gl.GL_COMPILE)
        self.gl.glBegin(self.gl.GL_QUADS)



        self.gl.glTexCoord2f(0.0, 0.0)
        self.gl.glVertex3f(1.0, 1.0,-1.0)
        self.gl.glTexCoord2f(1.0, 0.0)
        self.gl.glVertex3f(-1.0, 1.0,-1.0)


        self.gl.glTexCoord2f(1.0, 1.0)
        self.gl.glVertex3f(-1.0, 1.0, 1.0)
        self.gl.glTexCoord2f(0.0, 1.0)
        self.gl.glVertex3f( 1.0, 1.0, 1.0)

        self.gl.glTexCoord2f(0.0, 0.0)
        self.gl.glVertex3f( 1.0,-2.0, 1.0)
        self.gl.glTexCoord2f(1.0, 0.0)
        self.gl.glVertex3f(-1.0,-2.0, 1.0)

        self.gl.glTexCoord2f(1.0, 1.0)
        self.gl.glVertex3f(-1.0,-2.0,-1.0)
        self.gl.glTexCoord2f(0.0, 1.0)
        self.gl.glVertex3f( 1.0,-2.0,-1.0)
        #höhe1
        self.gl.glTexCoord2f(0.0, 0.0)
        self.gl.glVertex3f( 1.0, 1.0, 1.0)
        self.gl.glTexCoord2f(1.0, 0.0)
        self.gl.glVertex3f(-1.0, 1.0, 1.0)
        #länge1
        self.gl.glTexCoord2f(1.0, 1.0)
        self.gl.glVertex3f(-1.0,-2.0, 1.0)
        self.gl.glTexCoord2f(0.0, 1.0)
        self.gl.glVertex3f( 1.0,-2.0, 1.0)
        #länge2
        self.gl.glTexCoord2f(0.0, 0.0)
        self.gl.glVertex3f( 1.0,-2.0,-1.0)
        self.gl.glTexCoord2f(1.0, 0.0)
        self.gl.glVertex3f(-1.0,-2.0,-1.0)
        #höhe2
        self.gl.glTexCoord2f(1.0, 1.0)
        self.gl.glVertex3f(-1.0, 1.0,-1.0)
        self.gl.glTexCoord2f(0.0, 1.0)
        self.gl.glVertex3f( 1.0, 1.0,-1.0)


        self.gl.glTexCoord2f(1.0, 0.0)
        self.gl.glVertex3f(-1.0, 1.0, 1.0)
        self.gl.glTexCoord2f(1.0, 1.0)
        self.gl.glVertex3f(-1.0, 1.0,-1.0)

        self.gl.glTexCoord2f(0.0, 1.0)
        self.gl.glVertex3f(-1.0,-2.0,-1.0)
        self.gl.glTexCoord2f(0.0, 0.0)
        self.gl.glVertex3f(-1.0,-2.0, 1.0)


        self.gl.glTexCoord2f(1.0, 1.0)

        self.gl.glVertex3f( 1.0, 1.0,-1.0)
        self.gl.glTexCoord2f(0.0, 1.0)
        self.gl.glVertex3f( 1.0, 1.0, 1.0)

        self.gl.glTexCoord2f(0.0, 0.0)
        self.gl.glVertex3f( 1.0,-2.0, 1.0)
        self.gl.glTexCoord2f(1.0, 0.0)
        self.gl.glVertex3f( 1.0,-2.0,-1.0)
        self.gl.glEnd()
        self.gl.glEndList()

        return genList

    def draw(self):
        if self.paint_rotation:
            genList = self.gl.glGenLists(1)
            self.gl.glNewList(genList, self.gl.GL_COMPILE)



            glBegin(GL_QUADS)

            glColor3f(0.0,1.0,0.0)
            glVertex3f( 1.0, 1.0,-1.0)
            glVertex3f(-1.0, 1.0,-1.0)
            glVertex3f(-1.0, 1.0, 1.0)
            glVertex3f( 1.0, 1.0, 1.0)

            glColor3f(1.0,0.0,0.0)
            glVertex3f( 1.0,-1.0, 1.0)
            glVertex3f(-1.0,-1.0, 1.0)
            glVertex3f(-1.0,-1.0,-1.0)
            glVertex3f( 1.0,-1.0,-1.0)

            glColor3f(0.0,1.0,0.0)
            glVertex3f( 1.0, 1.0, 1.0)
            glVertex3f(-1.0, 1.0, 1.0)
            glVertex3f(-1.0,-1.0, 1.0)
            glVertex3f( 1.0,-1.0, 1.0)

            glColor3f(1.0,1.0,0.0)
            glVertex3f( 1.0,-1.0,-1.0)
            glVertex3f(-1.0,-1.0,-1.0)
            glVertex3f(-1.0, 1.0,-1.0)
            glVertex3f( 1.0, 1.0,-1.0)

            glColor3f(0.0,0.0,1.0)
            glVertex3f(-1.0, 1.0, 1.0)
            glVertex3f(-1.0, 1.0,-1.0)
            glVertex3f(-1.0,-1.0,-1.0)
            glVertex3f(-1.0,-1.0, 1.0)

            glColor3f(1.0,0.0,1.0)
            glVertex3f( 1.0, 1.0,-1.0)
            glVertex3f( 1.0, 1.0, 1.0)
            glVertex3f( 1.0,-1.0, 1.0)
            glVertex3f( 1.0,-1.0,-1.0)

            glEnd()





        if self.paint_0:

            glColor3f(1.0, 0.0, 0.0)
            glRectf(-0, -0, 0, 0)

        if self.paint_1:
            glColor3f(0.0, 1.0, 0.0)
            x=10
            y=10
            self.draw_loop(x, y)

        if self.paint_2:
            glColor3f(0.0, 0.0, 0.0)
            x=5
            y=5
            self.draw_loop(x, y)


    def resizeGL(self, width, height):
        side = min(width, height)
        if side < 0:
            return
        glViewport((width -side) //2, (height - side) // 2, side, side)

        glMatrixMode(GL_PROJECTION)
        glLoadIdentity()
        if self.resize_lines:
            glOrtho(-50, 50, -50, 50, -50.0, 50.0)
        else:
            glOrtho(-8, +8, -8, +8, 1.0, 15.0)
        glMatrixMode(GL_MODELVIEW)

    def draw_loop(self, x, y, incr=10):
        for _ in range(5):
            self.draw_square_lines(x, y)
            x += incr
            y += incr

    def draw_square_lines(self, x=10, y=10, z=10):
        glBegin(GL_LINES)
        glVertex3f(x, y, z)
        glVertex3f(x, -y, z)

        glVertex3f(x, -y, z)
        glVertex3f(-x, -y, z)

        glVertex3f(-x, -y, z)
        glVertex3f(-x, y, z)

        glVertex3f(-x, y, z)
        glVertex3f(x, y, z)
        glEnd()

    def mousePressEvent(self, event):
        self.last_pos = event.pos()

    def mouseMoveEvent(self, event):
        move_x = event.x() - self.last_pos.x()
        move_y = event.y() - self.last_pos.y()

        if event.buttons() & Qt.LeftButton:
            self.set_x_rotatio(self.x_rotation + 8 * move_y)
            self.set_y_rotatio(self.y_rotation + 8 * move_x)

        elif event.buttons() & Qt.RightButton:
            self.set_x_rotatio(self.x_rotation + 8 * move_y)
            self.set_z_rotatio(self.z_rotation + 8 * move_x)
        self.last_pos = event.pos()


    def setClearColor(self, c):
        self.gl.glClearColor(c.redF(), c.greenF(), c.blueF(), c.alphaF())

if __name__ == '__main__':
    app =  QApplication(sys.argv)
    widget = PyQtOpenGL()
    widget.show()
    app.exec_()