def test_transforms(): """Test basic transforms""" xfm = np.random.randn(4, 4).astype(np.float32) # Do a series of rotations that should end up into the same orientation # again, to ensure the oreder of computation is all correct # i.e. if rotated would return the transposed matrix this would not work out # (the translation part would be incorrect) new_xfm = ( rotated(90, (1,0,0)) * rotated(90, (0,1,0)) * rotated(90,(0,0,1)) * rotated(-90,(0,1,0)) * rotated(180,(1,0,0)) ) * xfm assert_allclose(xfm, new_xfm) new_xfm = translate((1, -1, 1)) * translate((-1, 1, -1)) * xfm assert_allclose(xfm, new_xfm) new_xfm = scale((1, 2, 3)) * scale((1, 1. / 2., 1. / 3.)) * xfm assert_allclose(xfm, new_xfm) # These could be more complex... xfm = ortho(-1, 1, -1, 1, -1, 1) assert_equal(xfm.shape, (4, 4)) xfm = frustum(-1, 1, -1, 1, -1, 1) assert_equal(xfm.shape, (4, 4)) xfm = perspective(1, 1, -1, 1) assert_equal(xfm.shape, (4, 4))
def on_key_press(self, event): """Controls - a(A) - move left d(D) - move right w(W) - move up s(S) - move down x/X - rotate about x-axis cw/anti-cw y/Y - rotate about y-axis cw/anti-cw z/Z - rotate about z-axis cw/anti-cw space - reset view p(P) - print current view i(I) - zoom in o(O) - zoom out """ self.translate = [0, 0, 0] self.rotate = [0, 0, 0] if(event.text == 'p' or event.text == 'P'): print(self.view) elif(event.text == 'd' or event.text == 'D'): self.translate[0] = 0.3 elif(event.text == 'a' or event.text == 'A'): self.translate[0] = -0.3 elif(event.text == 'w' or event.text == 'W'): self.translate[1] = 0.3 elif(event.text == 's' or event.text == 'S'): self.translate[1] = -0.3 elif(event.text == 'o' or event.text == 'O'): self.translate[2] = 0.3 elif(event.text == 'i' or event.text == 'I'): self.translate[2] = -0.3 elif(event.text == 'x'): self.rotate = [1, 0, 0] elif(event.text == 'X'): self.rotate = [-1, 0, 0] elif(event.text == 'y'): self.rotate = [0, 1, 0] elif(event.text == 'Y'): self.rotate = [0, -1, 0] elif(event.text == 'z'): self.rotate = [0, 0, 1] elif(event.text == 'Z'): self.rotate = [0, 0, -1] elif(event.text == ' '): self.view = self.default_view self.view = ( translate(-np.array(self.translate)) * rotated(self.rotate[0], (1, 0, 0)) * rotated(self.rotate[1], (0, 1, 0)) * rotated(self.rotate[2], (0, 0, 1)) ) * self.view self.program['u_view'] = self.view self.update()