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

        self.makeObject()

        self.gl.glEnable(self.gl.GL_DEPTH_TEST)
        self.gl.glEnable(self.gl.GL_CULL_FACE)

        vshader = QOpenGLShader(QOpenGLShader.Vertex, self)
        vshader.compileSourceCode(self.vsrc)

        fshader = QOpenGLShader(QOpenGLShader.Fragment, self)
        fshader.compileSourceCode(self.fsrc)

        self.program = QOpenGLShaderProgram()
        self.program.addShader(vshader)
        self.program.addShader(fshader)
        self.program.bindAttributeLocation("vertex",
                                           self.PROGRAM_VERTEX_ATTRIBUTE)
        self.program.bindAttributeLocation("texCoord",
                                           self.PROGRAM_TEXCOORD_ATTRIBUTE)
        self.program.link()

        self.program.bind()
        self.program.setUniformValue("texture", 0)

        self.program.enableAttributeArray(self.PROGRAM_VERTEX_ATTRIBUTE)
        self.program.enableAttributeArray(self.PROGRAM_TEXCOORD_ATTRIBUTE)
        self.program.setAttributeArray(self.PROGRAM_VERTEX_ATTRIBUTE,
                                       self.vertices)
        self.program.setAttributeArray(self.PROGRAM_TEXCOORD_ATTRIBUTE,
                                       self.texCoords)
Example #2
0
    def initializeGL(self):
        self.makeObject()

        glEnable(GL_DEPTH_TEST)
        glEnable(GL_CULL_FACE)

        vshader = QOpenGLShader(QOpenGLShader.Vertex, self)
        vshader.compileSourceCode(self.vsrc)

        fshader = QOpenGLShader(QOpenGLShader.Fragment, self)
        fshader.compileSourceCode(self.fsrc)

        self.program = QOpenGLShaderProgram(self)
        self.program.addShader(vshader)
        self.program.addShader(fshader)
        self.program.bindAttributeLocation('vertex',
                                           self.PROGRAM_VERTEX_ATTRIBUTE)
        self.program.bindAttributeLocation('texCoord',
                                           self.PROGRAM_TEXCOORD_ATTRIBUTE)
        self.program.link()

        self.program.bind()
        self.program.setUniformValue('texture', 0)

        self.program.enableAttributeArray(self.PROGRAM_VERTEX_ATTRIBUTE)
        self.program.enableAttributeArray(self.PROGRAM_TEXCOORD_ATTRIBUTE)
        self.program.setAttributeArray(self.PROGRAM_VERTEX_ATTRIBUTE,
                                       self.vertices)
        self.program.setAttributeArray(self.PROGRAM_TEXCOORD_ATTRIBUTE,
                                       self.texCoords)
Example #3
0
def getRgbCubeMaterial(entity):
    vertexShaderInput = """
     varying vec4 position; 
           // this is a varying variable in the vertex shader
         
        void main()
        {
            position = 0.5 * (gl_Vertex + vec4(1.0, 1.0, 1.0, 0.0));
               // Here the vertex shader writes output(!) to the 
               // varying variable. We add 1.0 to the x, y, and z 
               // coordinates and multiply by 0.5, because the 
               // coordinates of the cube are between -1.0 and 1.0 
               // but we need them between 0.0 and 1.0 
            gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
         }
    """

    fragmentShaderInput = """
     varying vec4 position; 
            // this is a varying variable in the fragment shader
         
         void main()
         {
            gl_FragColor = position;
               // Here the fragment shader reads intput(!) from the 
               // varying variable. The red, gree, blue, and alpha 
               // component of the fragment color are set to the 
               // values in the varying variable. (The alpha 
               // component of the fragment doesn't matter here.) 
         }
    """

    vertexShader = QOpenGLShader(QOpenGLShader.Vertex)
    vertexShader.compileSourceCode(vertexShaderInput)

    fragmentShader = QOpenGLShader(QOpenGLShader.Fragment)
    fragmentShader.compileSourceCode(fragmentShaderInput)

    program = QShaderProgram()
    program.setShaderCode(QShaderProgram.Vertex, QByteArray(bytes(vertexShaderInput, "UTF-8")))
    program.setShaderCode(QShaderProgram.Fragment, QByteArray(bytes(fragmentShaderInput, "UTF-8")))
    print(program.log())

    renderPass = QRenderPass()
    renderPass.setShaderProgram(program)
    technique = QTechnique()
    technique.addRenderPass(renderPass)
    effect = QEffect()
    effect.addTechnique(technique)
    material = QMaterial(entity)
    material.setEffect(effect)
    return material
Example #4
0
    def initializeGL(self):
        self.gl = self.context().versionFunctions()
        self.gl.initializeOpenGLFunctions()

        self.makeObject()

        self.gl.glEnable(self.gl.GL_DEPTH_TEST)
        self.gl.glEnable(self.gl.GL_CULL_FACE)

        vshader = QOpenGLShader(QOpenGLShader.Vertex, self)
        vshader.compileSourceCode(self.vsrc)

        fshader = QOpenGLShader(QOpenGLShader.Fragment, self)
        fshader.compileSourceCode(self.fsrc)

        self.program = QOpenGLShaderProgram()
        self.program.addShader(vshader)
        self.program.addShader(fshader)
        self.program.bindAttributeLocation('vertex',
                self.PROGRAM_VERTEX_ATTRIBUTE)
        self.program.bindAttributeLocation('texCoord',
                self.PROGRAM_TEXCOORD_ATTRIBUTE)
        self.program.link()

        self.program.bind()
        self.program.setUniformValue('texture', 0)

        self.program.enableAttributeArray(self.PROGRAM_VERTEX_ATTRIBUTE)
        self.program.enableAttributeArray(self.PROGRAM_TEXCOORD_ATTRIBUTE)
        self.program.setAttributeArray(self.PROGRAM_VERTEX_ATTRIBUTE,
                self.vertices)
        self.program.setAttributeArray(self.PROGRAM_TEXCOORD_ATTRIBUTE,
                self.texCoords)
Example #5
0
    def initialize(self):
        #print("initialize.gls")
        self.gl.initializeOpenGLFunctions()

        self.gl.glClearColor(0.1, 0.1, 0.2, 1.0)

        vshader1 = QOpenGLShader(QOpenGLShader.Vertex, self.program1)
        vsrc1 = str("attribute highp vec4 vertex;\n"
                    "attribute mediump vec3 normal;\n"
                    "uniform mediump mat4 matrix;\n"
                    "varying mediump vec4 color;\n"
                    "void main(void)\n"
                    "{\n"
                    "    vec3 toLight = normalize(vec3(0.0, 0.3, 1.0));\n"
                    "    float angle = max(dot(normal, toLight), 0.0);\n"
                    "    vec3 col = vec3(0.40, 1.0, 0.0);\n"
                    "    color = vec4(col * 0.2 + col * 0.8 * angle, 1.0);\n"
                    "    color = clamp(color, 0.0, 1.0);\n"
                    "    gl_Position = matrix * vertex;\n"
                    "}\n")
        vshader1.compileSourceCode(vsrc1)

        fshader1 = QOpenGLShader(QOpenGLShader.Fragment, self.program1)
        fsrc1 = str("varying mediump vec4 color;\n"
                    "void main(void)\n"
                    "{\n"
                    "    gl_FragColor = color;\n"
                    "}\n")
        fshader1.compileSourceCode(fsrc1)

        self.program1.addShader(vshader1)
        self.program1.addShader(fshader1)
        self.program1.link()

        self.vertexAttr1 = self.program1.attributeLocation("vertex")
        self.normalAttr1 = self.program1.attributeLocation("normal")
        self.matrixUniform1 = self.program1.uniformLocation("matrix")

        self.gl.glTexParameteri(self.gl.GL_TEXTURE_2D,
                                self.gl.GL_TEXTURE_MIN_FILTER,
                                self.gl.GL_LINEAR)
        self.gl.glTexParameteri(self.gl.GL_TEXTURE_2D,
                                self.gl.GL_TEXTURE_MAG_FILTER,
                                self.gl.GL_LINEAR)

        self.m_fAngle = 0
        self.m_fScale = 1
        self.createGeometry()
Example #6
0
    def initialize(self):
        #print("initialize.gls")
        self.gl.initializeOpenGLFunctions()

        self.gl.glClearColor(0.1, 0.1, 0.2, 1.0)

        vshader1 = QOpenGLShader(QOpenGLShader.Vertex, self.program1)
        vsrc1 = str("attribute highp vec4 vertex;\n"
                "attribute mediump vec3 normal;\n"
                "uniform mediump mat4 matrix;\n"
                "varying mediump vec4 color;\n"
                "void main(void)\n"
                "{\n"
                "    vec3 toLight = normalize(vec3(0.0, 0.3, 1.0));\n"
                "    float angle = max(dot(normal, toLight), 0.0);\n"
                "    vec3 col = vec3(0.40, 1.0, 0.0);\n"
                "    color = vec4(col * 0.2 + col * 0.8 * angle, 1.0);\n"
                "    color = clamp(color, 0.0, 1.0);\n"
                "    gl_Position = matrix * vertex;\n"
                "}\n")
        vshader1.compileSourceCode(vsrc1)

        fshader1 = QOpenGLShader(QOpenGLShader.Fragment, self.program1)
        fsrc1 = str("varying mediump vec4 color;\n"
                "void main(void)\n"
                "{\n"
                "    gl_FragColor = color;\n"
                "}\n")
        fshader1.compileSourceCode(fsrc1)

        self.program1.addShader(vshader1)
        self.program1.addShader(fshader1)
        self.program1.link()

        self.vertexAttr1 = self.program1.attributeLocation("vertex")
        self.normalAttr1 = self.program1.attributeLocation("normal")
        self.matrixUniform1 = self.program1.uniformLocation("matrix")

        self.gl.glTexParameteri(self.gl.GL_TEXTURE_2D, self.gl.GL_TEXTURE_MIN_FILTER, self.gl.GL_LINEAR )
        self.gl.glTexParameteri(self.gl.GL_TEXTURE_2D, self.gl.GL_TEXTURE_MAG_FILTER, self.gl.GL_LINEAR )

        self.m_fAngle = 0
        self.m_fScale = 1
        self.createGeometry()
Example #7
0
 def changeVertexAndFragmentFromSourceCode(self, vertexCode, fragCode):
     vertexShader = QOpenGLShader(QOpenGLShader.Vertex)
     fragmentShader = QOpenGLShader(QOpenGLShader.Fragment)
     vertexShader.compileSourceCode(vertexCode)
     if not vertexShader.isCompiled():
         return 'Vertex Shader: \n{}'.format(vertexShader.log())
     fragmentShader.compileSourceCode(fragCode)
     if not fragmentShader.isCompiled():
         return 'Fragment Shader: \n{}'.format(fragmentShader.log())
     self.program.removeAllShaders()
     self.program.addShaderFromSourceCode(QOpenGLShader.Vertex, vertexCode)
     self.program.addShaderFromSourceCode(QOpenGLShader.Fragment, fragCode)
     self.program.link()
     self.program.bind()
     return 'Vertex Shader and Fragment Shader compiled Successfully'