Changeset 8536:26812a0affff in orange


Ignore:
Timestamp:
07/30/11 01:08:02 (3 years ago)
Author:
matejd <matejd@…>
Branch:
default
Convert:
13af4abd7e3c386911a631129e7552b6cccec171
Message:

Worked around setUniformValue(float) windows bug; fixed camera bug

Location:
orange/OrangeWidgets
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • orange/OrangeWidgets/Prototypes/OWScatterPlot3D.py

    r8532 r8536  
    174174 
    175175        self.loadSettings() 
     176        self.plot.update_camera() 
    176177 
    177178        self.data = None 
  • orange/OrangeWidgets/plot/owplot3d.py

    r8534 r8536  
    5151OpenGL.ERROR_LOGGING = False 
    5252OpenGL.FULL_LOGGING = False 
     53#OpenGL.ERROR_ON_COPY = True  # TODO: enable this to check for unwanted copying (wrappers) 
    5354from OpenGL.GL import * 
    5455from OpenGL.GLU import * 
     
    5758from OpenGL.GL.ARB.vertex_buffer_object import * 
    5859from ctypes import c_void_p 
    59 #OpenGL.ERROR_ON_COPY = True  # TODO: enable this to check for unwanted copying (wrappers) 
    6060 
    6161import sys 
     
    7272 
    7373def normalize(vec): 
    74     return vec / numpy.sqrt(numpy.sum(vec** 2)) 
     74    return vec / numpy.sqrt(numpy.sum(vec**2)) 
    7575 
    7676def clamp(value, min, max): 
     
    392392        self.activatePanning = void 
    393393        self.activateSelection = void 
     394        self.removeLastSelection = void 
    394395 
    395396        self.commands = [] 
     
    401402        self.yaw = self.pitch = -pi / 4. 
    402403        self.rotation_factor = 0.3 
    403         self.camera = [ 
    404             sin(self.pitch)*cos(self.yaw), 
    405             cos(self.pitch), 
    406             sin(self.pitch)*sin(self.yaw)] 
     404        self.update_camera() 
    407405 
    408406        self.ortho_scale = 100. 
     
    498496            uniform bool encode_color; 
    499497            uniform bool hide_outside; 
    500             uniform float symbol_scale; 
    501             uniform float transparency; 
    502             uniform float view_edge; 
     498            uniform vec2 transparency; // vec2 instead of float, fixing a bug on windows 
     499                                       // (setUniformValue with float crashes) 
     500            uniform vec2 symbol_scale; 
     501            uniform vec2 view_edge; 
    503502 
    504503            uniform vec3 scale; 
     
    509508            void main(void) { 
    510509              vec3 offset_rotated = offset; 
    511               offset_rotated.x *= symbol_scale; 
    512               offset_rotated.y *= symbol_scale; 
    513               offset_rotated.z *= symbol_scale; 
     510              offset_rotated.x *= symbol_scale.x; 
     511              offset_rotated.y *= symbol_scale.x; 
     512              offset_rotated.z *= symbol_scale.x; 
    514513 
    515514              if (use_2d_symbols) { 
     
    561560                pos = abs(pos); 
    562561                float manhattan_distance = max(max(pos.x, pos.y), pos.z)+5.; 
    563                 float a = min(pow(min(1., view_edge / manhattan_distance), 5.), transparency); 
     562                float a = min(pow(min(1., view_edge.x / manhattan_distance), 5.), transparency.x); 
    564563                // Calculate the amount of lighting this triangle receives (diffuse component only). 
    565564                vec3 light_direction = normalize(vec3(1., 1., 0.5)); 
     
    567566                                    light_direction)); 
    568567                var_color = vec4(color.rgb+diffuse*0.7, a); // Physically wrong, but looks better. 
    569                 if (manhattan_distance > view_edge && hide_outside) 
     568                if (manhattan_distance > view_edge.x && hide_outside) 
    570569                    var_color.a = 0.; 
    571570              } 
     
    625624    def resizeGL(self, width, height): 
    626625        glViewport(0, 0, width, height) 
     626 
     627    def update_camera(self): 
     628        self.pitch = clamp(self.pitch, -3., -0.1) 
     629        self.camera = [ 
     630            sin(self.pitch)*cos(self.yaw), 
     631            cos(self.pitch), 
     632            sin(self.pitch)*sin(self.yaw)] 
    627633 
    628634    def paintGL(self): 
     
    669675                self.symbol_shader.setUniformValue(self.symbol_shader_encode_color,   False) 
    670676                self.symbol_shader.setUniformValue(self.symbol_shader_hide_outside,   self.hide_outside) 
    671                 self.symbol_shader.setUniformValue(self.symbol_shader_view_edge,      float(self.view_cube_edge)) 
    672                 self.symbol_shader.setUniformValue(self.symbol_shader_symbol_scale,   float(self.symbol_scale)) 
    673                 self.symbol_shader.setUniformValue(self.symbol_shader_transparency,   self.transparency / 255.) 
     677                # Specifying float uniforms with vec2 because of a weird bug in PyQt 
     678                self.symbol_shader.setUniformValue(self.symbol_shader_view_edge,      self.view_cube_edge, self.view_cube_edge) 
     679                self.symbol_shader.setUniformValue(self.symbol_shader_symbol_scale,   self.symbol_scale, self.symbol_scale) 
     680                self.symbol_shader.setUniformValue(self.symbol_shader_transparency,   self.transparency / 255., self.transparency / 255.) 
    674681                self.symbol_shader.setUniformValue(self.symbol_shader_scale,          *scale) 
    675682                self.symbol_shader.setUniformValue(self.symbol_shader_translation,    *self.translation) 
     
    13871394                self.yaw += dx / (self.rotation_factor*self.width()) 
    13881395                self.pitch += dy / (self.rotation_factor*self.height()) 
    1389                 self.pitch = clamp(self.pitch, -3., -0.1) 
    1390                 self.camera = [ 
    1391                     sin(self.pitch)*cos(self.yaw), 
    1392                     cos(self.pitch), 
    1393                     sin(self.pitch)*sin(self.yaw)] 
     1396                self.update_camera() 
    13941397        elif self.state == PlotState.SCALING: 
    13951398            dx = pos.x() - self.scaling_init_pos.x() 
Note: See TracChangeset for help on using the changeset viewer.