@@ -13,39 +13,45 @@ def normalize(vec):
13
13
def project_vector (x , y , z , matrix ):
14
14
vec = np .dot (matrix , pad_ones (x , y , z ))
15
15
16
- return vec [0 ]/ vec [3 ], vec [1 ]/ vec [3 ], vec [2 ]/ vec [3 ]
16
+ return vec [0 ] / vec [3 ], vec [1 ] / vec [3 ], vec [2 ] / vec [3 ]
17
17
18
18
19
19
def get_look_at_matrix (eye , center , up ):
20
20
n = normalize (eye - center )
21
21
u = normalize (np .cross (up , n ))
22
22
v = np .cross (n , u )
23
23
24
- matrix_r = [[u [0 ], u [1 ], u [2 ], 0 ],
25
- [v [0 ], v [1 ], v [2 ], 0 ],
26
- [n [0 ], n [1 ], n [2 ], 0 ],
27
- [0 , 0 , 0 , 1 ]]
24
+ matrix_r = [
25
+ [u [0 ], u [1 ], u [2 ], 0 ],
26
+ [v [0 ], v [1 ], v [2 ], 0 ],
27
+ [n [0 ], n [1 ], n [2 ], 0 ],
28
+ [0 , 0 , 0 , 1 ],
29
+ ]
28
30
29
- matrix_t = [[1 , 0 , 0 , - eye [0 ]],
30
- [0 , 1 , 0 , - eye [1 ]],
31
- [0 , 0 , 1 , - eye [2 ]],
32
- [0 , 0 , 0 , 1 ]]
31
+ matrix_t = [
32
+ [1 , 0 , 0 , - eye [0 ]],
33
+ [0 , 1 , 0 , - eye [1 ]],
34
+ [0 , 0 , 1 , - eye [2 ]],
35
+ [0 , 0 , 0 , 1 ],
36
+ ]
33
37
34
38
return np .dot (matrix_r , matrix_t )
35
39
36
40
37
41
def get_perspective_matrix (fovy , aspect , near , far ):
38
- f = 1. / tan (fovy * pi / 360. )
42
+ f = 1.0 / tan (fovy * pi / 360.0 )
39
43
40
- return np .array ([
41
- [f / aspect , 0 , 0 , 0 ],
42
- [ 0 , f , 0 , 0 ],
43
- [ 0 , 0 , (near + far )/ (near - far ), 2 * near * far / (near - far )],
44
- [ 0 , 0 , - 1 , 0 ]
45
- ])
44
+ return np .array (
45
+ [
46
+ [f / aspect , 0 , 0 , 0 ],
47
+ [0 , f , 0 , 0 ],
48
+ [0 , 0 , (near + far ) / (near - far ), 2 * near * far / (near - far )],
49
+ [0 , 0 , - 1 , 0 ],
50
+ ]
51
+ )
46
52
47
53
48
- class OrbitCamera () :
54
+ class OrbitCamera :
49
55
50
56
def __init__ (self , radius , center , aspect , near = 0 , far = 8 ):
51
57
self .radius = radius
@@ -60,7 +66,7 @@ def update_position(self, elev, azim):
60
66
self .elev = elev
61
67
self .azim = azim
62
68
63
- relev , razim = np .pi * self .elev / 180 , np .pi * self .azim / 180
69
+ relev , razim = np .pi * self .elev / 180 , np .pi * self .azim / 180
64
70
65
71
xp = self .center [0 ] + cos (razim ) * cos (relev ) * self .radius
66
72
yp = self .center [1 ] + sin (razim ) * cos (relev ) * self .radius
@@ -69,7 +75,7 @@ def update_position(self, elev, azim):
69
75
self .position = np .array ((xp , yp , zp ))
70
76
self .front = self .center - self .position
71
77
72
- if abs (relev ) > pi / 2. :
78
+ if abs (relev ) > pi / 2.0 :
73
79
self .up = np .array ((0 , 0 , - 1 ))
74
80
else :
75
81
self .up = np .array ((0 , 0 , 1 ))
@@ -78,5 +84,7 @@ def update_position(self, elev, azim):
78
84
79
85
def update_matrix (self ):
80
86
self .view_matrix = get_look_at_matrix (self .position , self .center , self .up )
81
- self .projection_matrix = get_perspective_matrix (50 , self .aspect , self .near , self .far )
87
+ self .projection_matrix = get_perspective_matrix (
88
+ 50 , self .aspect , self .near , self .far
89
+ )
82
90
self .matrix = np .dot (self .projection_matrix , self .view_matrix )
0 commit comments