Changeset 8350:a0ab03aef862 in orange


Ignore:
Timestamp:
07/04/11 22:25:41 (3 years ago)
Author:
matejd <matejd@…>
Branch:
default
Convert:
ba49c8dece2d2897772a450c430aa87a7a937b76
Message:

Added outlines to particles, ortho projection

File:
1 edited

Legend:

Unmodified
Added
Removed
  • orange/OrangeWidgets/OWGraph3D.py

    r8349 r8350  
    4444glVertexAttribPointer = gl.glVertexAttribPointer 
    4545glEnableVertexAttribArray = gl.glEnableVertexAttribArray 
     46glGetProgramiv = gl.glGetProgramiv 
    4647 
    4748 
     
    8182        self.vertex_buffers = [] 
    8283        self.vaos = [] 
     84 
     85        self.ortho = True 
    8386 
    8487    def __del__(self): 
     
    105108            uniform mat4 projection; 
    106109            uniform mat4 modelview; 
     110            uniform vec4 overriden_color; 
     111            uniform bool override_color; 
    107112 
    108113            varying vec4 var_color; 
     
    130135              vec3 offset_rotated = invs * offset; 
    131136              gl_Position = gl_ProjectionMatrix * gl_ModelViewMatrix * vec4(position+offset_rotated, 1); 
    132               var_color = color; 
     137              if (override_color) 
     138                  var_color = overriden_color; 
     139              else 
     140                  var_color = color; 
    133141            } 
    134142            ''' 
     
    172180        glBindAttribLocation(self.color_shader, 2, 'color') 
    173181        glLinkProgram(self.color_shader) 
    174         # TODO: link status 
     182        self.color_shader_override_color = glGetUniformLocation(self.color_shader, 'override_color') 
     183        self.color_shader_overriden_color = glGetUniformLocation(self.color_shader, 'overriden_color') 
     184        linked = c_int() 
     185        glGetProgramiv(self.color_shader, GL_LINK_STATUS, byref(linked)) 
     186        if not linked.value: 
     187            print('Failed to link shader!') 
    175188        print('Shaders compiled and linked!') 
    176189 
     
    184197        glMatrixMode(GL_PROJECTION) 
    185198        glLoadIdentity() 
    186         aspect = float(self.width()) / self.height() if self.height() != 0 else 1 
    187         gluPerspective(30.0, aspect, 0.1, 100) 
     199        width, height = self.width(), self.height() 
     200        divide = self.zoom*10. 
     201        if self.ortho: 
     202            glOrtho(-width/divide, width/divide, -height/divide, height/divide, -1, 1000) 
     203        else: 
     204            aspect = float(width) / height if height != 0 else 1 
     205            gluPerspective(30.0, aspect, 0.1, 100) 
    188206        glMatrixMode(GL_MODELVIEW) 
    189207        glLoadIdentity() 
     208        zoom = 100 if self.ortho else self.zoom 
    190209        gluLookAt( 
    191             self.camera[0]*self.zoom + self.center[0], 
    192             self.camera[1]*self.zoom + self.center[1], 
    193             self.camera[2]*self.zoom + self.center[2], 
     210            self.camera[0]*zoom + self.center[0], 
     211            self.camera[1]*zoom + self.center[1], 
     212            self.camera[2]*zoom + self.center[2], 
    194213            self.center[0], 
    195214            self.center[1], 
     
    205224                glUseProgram(self.color_shader) 
    206225                glBindVertexArray(vao.value) 
     226                glUniform1i(self.color_shader_override_color, 0) 
    207227                glDrawArrays(GL_TRIANGLES, 0, vao.num_vertices) 
     228                # Draw outlines. 
     229                glUniform1i(self.color_shader_override_color, 1) 
     230                glUniform4f(self.color_shader_overriden_color, 0,0,0,1) 
     231                glPolygonMode(GL_FRONT_AND_BACK, GL_LINE) 
     232                glDrawArrays(GL_TRIANGLES, 0, vao.num_vertices) 
     233                glPolygonMode(GL_FRONT_AND_BACK, GL_FILL) 
    208234                glBindVertexArray(0) 
    209235                glUseProgram(0) 
     
    222248 
    223249    def paint_axes(self): 
     250        zoom = 100 if self.ortho else self.zoom 
    224251        cam_in_space = numpy.array([ 
    225           self.center[0] + self.camera[0]*self.zoom, 
    226           self.center[1] + self.camera[1]*self.zoom, 
    227           self.center[2] + self.camera[2]*self.zoom 
     252          self.center[0] + self.camera[0]*zoom, 
     253          self.center[1] + self.camera[1]*zoom, 
     254          self.center[2] + self.camera[2]*zoom 
    228255        ]) 
    229256 
     
    284311        def draw_axis_plane(axis_plane, sub=10): 
    285312            normal = normal_from_points(*axis_plane[:3]) 
    286             cam_in_space = numpy.array([ 
    287               self.center[0] + self.camera[0]*self.zoom, 
    288               self.center[1] + self.camera[1]*self.zoom, 
    289               self.center[2] + self.camera[2]*self.zoom 
    290             ]) 
    291313            camera_vector = normalize(axis_plane[0] - cam_in_space) 
    292314            cos = numpy.dot(normal, camera_vector) 
Note: See TracChangeset for help on using the changeset viewer.