def test_euler_equivalence(self): eulers = euler.create_from_x_rotation(np.pi / 2.) m = Matrix33.from_x_rotation(np.pi / 2.) q = Quaternion.from_x_rotation(np.pi / 2.) qm = Matrix33.from_quaternion(q) em = Matrix33.from_eulers(eulers) self.assertTrue(np.allclose(qm, m)) self.assertTrue(np.allclose(qm, em)) self.assertTrue(np.allclose(m, em))
def drag_camera(self): if not imgui.is_any_item_active(): mx, my = imgui.get_mouse_drag_delta() else: mx, my = 0, 0 # if we just released the mouse, save the new camera position if self.camera['mouse_down'] and not self.io.mouse_down[0]: self.camera['saved_center'] = self.camera['center'] self.camera['mouse_down'] = self.io.mouse_down[0] # no drag, don't do anything if mx == 0 and my == 0: return False # calculate the camera position according to the current drag # this is a rotation relative to the saved position self.camera['center'] = Matrix33.from_y_rotation(self.camera['rot_speed'] * mx / self.width) \ * Matrix33.from_x_rotation(self.camera['rot_speed'] * my / self.height) \ * self.camera['saved_center'] self.update_camera() # camera has changed return True