Exemplo n.º 1
0
 def play(self, do_loop=False, real_time=True):
     time = 0.0 # seconds
     timer = QElapsedTimer()
     timer.restart()
     dtime = 1.0 / self.frames_per_second
     key_frame_number = 0
     frame_number = 0
     for kf in self._key_frames:
         self.current_key_frame_index = key_frame_number
         key_frame_time = 0.0
         while key_frame_time < kf.time_to_next_frame:
             # Drop frames if we are going too slow
             # if real_time and (timer.elapsed() - 200) > time*1000.0:
             #     continue
             tf = key_frame_time / kf.time_to_next_frame
             interpolation_parameter = tf + key_frame_number
             camera_state = camera.State()
             focus_x = self.spline.interpolate_sequence(
                         self._focusx, 
                         interpolation_parameter,
                         do_loop)
             focus_y = self.spline.interpolate_sequence(
                         self._focusy, 
                         interpolation_parameter,
                         do_loop)
             focus_z = self.spline.interpolate_sequence(
                         self._focusz, 
                         interpolation_parameter,
                         do_loop)
             camera_state.focus= Vec3([focus_x, focus_y, focus_z])
             camera_state.zFocus_vheight = self.spline.interpolate_sequence(
                         self._zfv,
                         interpolation_parameter,
                         do_loop)
             quat = self.spline.interpolate_quaternion_sequence(
                         self._quat,
                         interpolation_parameter,
                         do_loop)
             camera_state.rotation = quat.to_rotation()
             if real_time:
                 while timer.elapsed() < time*1000.0:
                     # TODO - use threading instead
                     QCoreApplication.processEvents()
             frame = KeyFrame(camera_state)
             frame.frame_number = frame_number + 1
             frame.key_frame_number = key_frame_number + 1
             yield frame
             key_frame_time += dtime
             time += dtime
             frame_number += 1
             if (not do_loop) and (key_frame_number == len(self._key_frames) - 1):
                 return # Don't go past final frame
         key_frame_number += 1