Beispiel #1
0
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))
Beispiel #2
0
    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()