예제 #1
0
    def draw_callback(self):
        if not hasattr(self, '_edge_shader'):
            self._edge_shader = QtOpenGL.QGLShaderProgram()
            self._edge_shader.addShaderFromSourceFile(
                QtOpenGL.QGLShader.Vertex,
                os.path.join(os.path.dirname(__file__), 'edge.vs'))
            self._edge_shader.addShaderFromSourceFile(
                QtOpenGL.QGLShader.Fragment,
                os.path.join(os.path.dirname(__file__), 'edge.fs'))

            self._edge_shader.bindAttributeLocation('position', 0)

            if not self._edge_shader.link():
                print('Failed to link edge shader!')

            self._node_shader = QtOpenGL.QGLShaderProgram()
            self._node_shader.addShaderFromSourceFile(
                QtOpenGL.QGLShader.Vertex,
                os.path.join(os.path.dirname(__file__), 'node.vs'))
            self._node_shader.addShaderFromSourceFile(
                QtOpenGL.QGLShader.Fragment,
                os.path.join(os.path.dirname(__file__), 'node.fs'))

            self._node_shader.bindAttributeLocation('position', 0)
            self._node_shader.bindAttributeLocation('offset', 1)
            self._node_shader.bindAttributeLocation('color', 2)
            self._node_shader.bindAttributeLocation('selected_marked', 3)

            if not self._node_shader.link():
                print('Failed to link node shader!')

        self._edge_shader.bind()
        self._edge_shader.setUniformValue('projection', self.plot.projection)
        self._edge_shader.setUniformValue('model', self.plot.model)
        self._edge_shader.setUniformValue('view', self.plot.view)
        self._edge_shader.setUniformValue('translation',
                                          self.plot.plot_translation)
        self._edge_shader.setUniformValue('scale', self.plot.plot_scale)
        orangeqt.Canvas3D.draw_edges(self)
        self._edge_shader.release()

        self._node_shader.bind()
        self._node_shader.setUniformValue('projection', self.plot.projection)
        self._node_shader.setUniformValue('model', self.plot.model)
        self._node_shader.setUniformValue('view', self.plot.view)
        self._node_shader.setUniformValue('translation',
                                          self.plot.plot_translation)
        self._node_shader.setUniformValue('scale', self.plot.plot_scale)
        self._node_shader.setUniformValue('mode', 0.)
        orangeqt.Canvas3D.draw_nodes(self)
        self._node_shader.release()
예제 #2
0
    def initializeGL(self):
        self.makeObject()

        glEnable(GL_DEPTH_TEST)
        glEnable(GL_CULL_FACE)

        vshader = QtOpenGL.QGLShader(QtOpenGL.QGLShader.Vertex, self)
        vshader.compileSourceCode(self.vsrc)

        fshader = QtOpenGL.QGLShader(QtOpenGL.QGLShader.Fragment, self)
        fshader.compileSourceCode(self.fsrc)

        self.program = QtOpenGL.QGLShaderProgram(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)
예제 #3
0
    def __init__(self):
        self._projection = QMatrix4x4()
        self._model = QMatrix4x4()
        self._view = QMatrix4x4()

        ## Shader used to draw primitives. Position and color of vertices specified through uniforms. Nothing fancy.
        vertex_shader_source = '''
            attribute float index;
            varying vec4 color;

            uniform vec3 positions[6]; // 6 vertices for quad
            uniform vec4 colors[6];

            uniform mat4 projection, model, view;

            void main(void)
            {
                int i = int(index);
                gl_Position = projection * view * model * vec4(positions[i], 1.);
                color = colors[i];
            }
            '''

        fragment_shader_source = '''
            varying vec4 color;

            void main(void)
            {
                gl_FragColor = color;
            }
            '''

        self._shader = QtOpenGL.QGLShaderProgram()
        self._shader.addShaderFromSourceCode(QtOpenGL.QGLShader.Vertex,
                                             vertex_shader_source)
        self._shader.addShaderFromSourceCode(QtOpenGL.QGLShader.Fragment,
                                             fragment_shader_source)

        self._shader.bindAttributeLocation('index', 0)

        if not self._shader.link():
            print('Failed to link dummy renderer shader!')

        indices = numpy.array(range(6), dtype=numpy.float32)
        self._vertex_buffer = VertexBuffer(indices, [(1, GL_FLOAT)])