ncca-ngl 0.2.2__py3-none-any.whl → 0.2.4__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
ncca/ngl/__init__.py CHANGED
@@ -6,6 +6,9 @@ try:
6
6
  except PackageNotFoundError:
7
7
  __version__ = "0.0.0"
8
8
 
9
+ __author__ = "Jon Macey jmacey@bournemouth.ac.uk"
10
+ __license__ = "MIT"
11
+
9
12
  from .abstract_vao import AbstractVAO, VertexData
10
13
  from .base_mesh import BaseMesh, Face
11
14
  from .bbox import BBox
@@ -38,7 +41,7 @@ from .simple_vao import SimpleVAO
38
41
  from .text import Text
39
42
  from .texture import Texture
40
43
  from .transform import Transform, TransformRotationOrder
41
- from .util import calc_normal, clamp, frustum, lerp, look_at, ortho, perspective
44
+ from .util import PerspMode, calc_normal, clamp, frustum, lerp, look_at, ortho, perspective
42
45
  from .vao_factory import VAOFactory, VAOType
43
46
  from .vec2 import Vec2
44
47
  from .vec2_array import Vec2Array
@@ -107,4 +110,5 @@ all = [
107
110
  PrimData,
108
111
  FirstPersonCamera,
109
112
  PySideEventHandlingMixin,
113
+ PerspMode,
110
114
  ]
ncca/ngl/abstract_vao.py CHANGED
@@ -52,14 +52,10 @@ class AbstractVAO(abc.ABC):
52
52
  def remove_vao(self):
53
53
  raise NotImplementedError
54
54
 
55
- def set_vertex_attribute_pointer(
56
- self, id, size, type, stride, offset, normalize=False
57
- ):
55
+ def set_vertex_attribute_pointer(self, id, size, type, stride, offset, normalize=False):
58
56
  if not self.bound:
59
57
  logger.error("VAO not bound in set_vertex_attribute_pointer")
60
- gl.glVertexAttribPointer(
61
- id, size, type, normalize, stride, ctypes.c_void_p(offset)
62
- )
58
+ gl.glVertexAttribPointer(id, size, type, normalize, stride, ctypes.c_void_p(offset))
63
59
  gl.glEnableVertexAttribArray(id)
64
60
 
65
61
  def set_num_indices(self, count):
ncca/ngl/mat2.py CHANGED
@@ -45,7 +45,7 @@ class Mat2:
45
45
  Returns:
46
46
  list[float]: A flat list of floats.
47
47
  """
48
- return [item for sublist in zip(*self.m) for item in sublist]
48
+ return [item for sublist in zip(*self.m, strict=False) for item in sublist]
49
49
 
50
50
  def to_numpy(self):
51
51
  """
@@ -125,4 +125,14 @@ class Mat2:
125
125
  def to_list(self):
126
126
  "convert matrix to list in column-major order"
127
127
  # flatten to single array
128
- return [item for sublist in zip(*self.m) for item in sublist]
128
+ return [item for sublist in zip(*self.m, strict=False) for item in sublist]
129
+
130
+ def copy(self) -> "Mat2":
131
+ """Create a copy of the matrix.
132
+
133
+ Returns:
134
+ A new Mat2 instance with the same values.
135
+ """
136
+ new_mat = Mat2()
137
+ new_mat.m = copy.deepcopy(self.m)
138
+ return new_mat
ncca/ngl/mat3.py CHANGED
@@ -132,7 +132,7 @@ class Mat3:
132
132
 
133
133
  def transpose(self):
134
134
  """transpose this matrix"""
135
- self.m = [list(item) for item in zip(*self.m)]
135
+ self.m = [list(item) for item in zip(*self.m, strict=False)]
136
136
 
137
137
  def get_transpose(self):
138
138
  """return a new matrix as the transpose of ourself
@@ -143,7 +143,7 @@ class Mat3:
143
143
  The transpose of the current matrix
144
144
  """
145
145
  m = Mat3()
146
- m.m = [list(item) for item in zip(*self.m)]
146
+ m.m = [list(item) for item in zip(*self.m, strict=False)]
147
147
  return m
148
148
 
149
149
  @classmethod
@@ -360,7 +360,7 @@ class Mat3:
360
360
  "internal add function"
361
361
  temp = Mat3()
362
362
  for i in range(0, len(temp.m)):
363
- temp.m[i] = [a + b for a, b in zip(self.m[i], rhs.m[i])]
363
+ temp.m[i] = [a + b for a, b in zip(self.m[i], rhs.m[i], strict=False)]
364
364
  return temp
365
365
 
366
366
  def __add__(self, rhs):
@@ -375,7 +375,7 @@ class Mat3:
375
375
  "internal subtract function"
376
376
  temp = Mat3()
377
377
  for i in range(0, len(temp.m)):
378
- temp.m[i] = [a - b for a, b in zip(self.m[i], rhs.m[i])]
378
+ temp.m[i] = [a - b for a, b in zip(self.m[i], rhs.m[i], strict=False)]
379
379
  return temp
380
380
 
381
381
  def __sub__(self, rhs):
@@ -399,6 +399,16 @@ class Mat3:
399
399
  # flatten to single array
400
400
  return functools.reduce(operator.concat, self.m)
401
401
 
402
+ def copy(self) -> "Mat3":
403
+ """Create a copy of the matrix.
404
+
405
+ Returns:
406
+ A new Mat3 instance with the same values.
407
+ """
408
+ new_mat = Mat3()
409
+ new_mat.m = copy.deepcopy(self.m)
410
+ return new_mat
411
+
402
412
  def inverse(self):
403
413
  "Inverse of matrix raise MatrixError if not calculable"
404
414
  det = self.determinant()
@@ -406,35 +416,17 @@ class Mat3:
406
416
  invdet = 1 / det
407
417
  tmp = Mat3()
408
418
  # minor matrix + co-factor
409
- tmp.m[0][0] = (
410
- +(self.m[1][1] * self.m[2][2] - self.m[1][2] * self.m[2][1]) * invdet
411
- )
412
- tmp.m[1][0] = (
413
- -(self.m[1][0] * self.m[2][2] - self.m[1][2] * self.m[2][0]) * invdet
414
- )
415
- tmp.m[2][0] = (
416
- +(self.m[1][0] * self.m[2][1] - self.m[1][1] * self.m[2][0]) * invdet
417
- )
419
+ tmp.m[0][0] = +(self.m[1][1] * self.m[2][2] - self.m[1][2] * self.m[2][1]) * invdet
420
+ tmp.m[1][0] = -(self.m[1][0] * self.m[2][2] - self.m[1][2] * self.m[2][0]) * invdet
421
+ tmp.m[2][0] = +(self.m[1][0] * self.m[2][1] - self.m[1][1] * self.m[2][0]) * invdet
418
422
 
419
- tmp.m[0][1] = (
420
- -(self.m[0][1] * self.m[2][2] - self.m[0][2] * self.m[2][1]) * invdet
421
- )
422
- tmp.m[1][1] = (
423
- +(self.m[0][0] * self.m[2][2] - self.m[0][2] * self.m[2][0]) * invdet
424
- )
425
- tmp.m[2][1] = (
426
- -(self.m[0][0] * self.m[2][1] - self.m[0][1] * self.m[2][0]) * invdet
427
- )
423
+ tmp.m[0][1] = -(self.m[0][1] * self.m[2][2] - self.m[0][2] * self.m[2][1]) * invdet
424
+ tmp.m[1][1] = +(self.m[0][0] * self.m[2][2] - self.m[0][2] * self.m[2][0]) * invdet
425
+ tmp.m[2][1] = -(self.m[0][0] * self.m[2][1] - self.m[0][1] * self.m[2][0]) * invdet
428
426
 
429
- tmp.m[0][2] = (
430
- +(self.m[0][1] * self.m[1][2] - self.m[0][2] * self.m[1][1]) * invdet
431
- )
432
- tmp.m[1][2] = (
433
- -(self.m[0][0] * self.m[1][2] - self.m[0][2] * self.m[1][0]) * invdet
434
- )
435
- tmp.m[2][2] = (
436
- +(self.m[0][0] * self.m[1][1] - self.m[0][1] * self.m[1][0]) * invdet
437
- )
427
+ tmp.m[0][2] = +(self.m[0][1] * self.m[1][2] - self.m[0][2] * self.m[1][1]) * invdet
428
+ tmp.m[1][2] = -(self.m[0][0] * self.m[1][2] - self.m[0][2] * self.m[1][0]) * invdet
429
+ tmp.m[2][2] = +(self.m[0][0] * self.m[1][1] - self.m[0][1] * self.m[1][0]) * invdet
438
430
 
439
431
  return tmp
440
432
  except ZeroDivisionError:
@@ -451,16 +443,14 @@ class Mat3:
451
443
  @classmethod
452
444
  def from_mat4(cls, mat4):
453
445
  """Create a Mat3 from a Mat4"""
454
- return Mat3.from_list(
455
- [
456
- mat4.m[0][0],
457
- mat4.m[0][1],
458
- mat4.m[0][2],
459
- mat4.m[1][0],
460
- mat4.m[1][1],
461
- mat4.m[1][2],
462
- mat4.m[2][0],
463
- mat4.m[2][1],
464
- mat4.m[2][2],
465
- ]
466
- )
446
+ return Mat3.from_list([
447
+ mat4.m[0][0],
448
+ mat4.m[0][1],
449
+ mat4.m[0][2],
450
+ mat4.m[1][0],
451
+ mat4.m[1][1],
452
+ mat4.m[1][2],
453
+ mat4.m[2][0],
454
+ mat4.m[2][1],
455
+ mat4.m[2][2],
456
+ ])
ncca/ngl/mat4.py CHANGED
@@ -86,14 +86,24 @@ class Mat4:
86
86
  # flatten to single array
87
87
  return functools.reduce(operator.concat, self.m)
88
88
 
89
+ def copy(self) -> "Mat4":
90
+ """Create a copy of the matrix.
91
+
92
+ Returns:
93
+ A new Mat4 instance with the same values.
94
+ """
95
+ new_mat = Mat4()
96
+ new_mat.m = copy.deepcopy(self.m)
97
+ return new_mat
98
+
89
99
  def transpose(self):
90
100
  "transpose this matrix"
91
- self.m = [list(item) for item in zip(*self.m)]
101
+ self.m = [list(item) for item in zip(*self.m, strict=False)]
92
102
 
93
103
  def get_transpose(self):
94
104
  "return a new matrix as the transpose of ourself"
95
105
  m = Mat4()
96
- m.m = [list(item) for item in zip(*self.m)]
106
+ m.m = [list(item) for item in zip(*self.m, strict=False)]
97
107
  return m
98
108
 
99
109
  @classmethod
@@ -258,7 +268,7 @@ class Mat4:
258
268
  "internal add function"
259
269
  temp = Mat4()
260
270
  for i in range(0, len(temp.m)):
261
- temp.m[i] = [a + b for a, b in zip(self.m[i], rhs.m[i])]
271
+ temp.m[i] = [a + b for a, b in zip(self.m[i], rhs.m[i], strict=False)]
262
272
  return temp
263
273
 
264
274
  def __add__(self, rhs):
@@ -273,7 +283,7 @@ class Mat4:
273
283
  "internal sub function"
274
284
  temp = Mat4()
275
285
  for i in range(0, len(temp.m)):
276
- temp.m[i] = [a - b for a, b in zip(self.m[i], rhs.m[i])]
286
+ temp.m[i] = [a - b for a, b in zip(self.m[i], rhs.m[i], strict=False)]
277
287
  return temp
278
288
 
279
289
  def __sub__(self, rhs):
ncca/ngl/prim_data.py CHANGED
@@ -10,7 +10,7 @@ from .vec3 import Vec3
10
10
  class Prims(enum.Enum):
11
11
  """Enum for the default primitives that can be loaded."""
12
12
 
13
- BUDDAH = "buddah"
13
+ BUDDHA = "buddah"
14
14
  BUNNY = "bunny"
15
15
  CUBE = "cube"
16
16
  DODECAHEDRON = "dodecahedron"
ncca/ngl/quaternion.py CHANGED
@@ -10,6 +10,7 @@ Attributes:
10
10
  import math
11
11
 
12
12
  from .mat4 import Mat4
13
+ from .vec3 import Vec3
13
14
 
14
15
 
15
16
  class Quaternion:
@@ -75,9 +76,7 @@ class Quaternion:
75
76
  return Quaternion(s, x, y, z)
76
77
 
77
78
  def __add__(self, rhs):
78
- return Quaternion(
79
- self.s + rhs.s, self.x + rhs.x, self.y + rhs.y, self.z + rhs.z
80
- )
79
+ return Quaternion(self.s + rhs.s, self.x + rhs.x, self.y + rhs.y, self.z + rhs.z)
81
80
 
82
81
  def __iadd__(self, rhs):
83
82
  self.s += rhs.s
@@ -87,20 +86,57 @@ class Quaternion:
87
86
  return self
88
87
 
89
88
  def __sub__(self, rhs):
90
- return Quaternion(
91
- self.s - rhs.s, self.x - rhs.x, self.y - rhs.y, self.z - rhs.z
92
- )
89
+ return Quaternion(self.s - rhs.s, self.x - rhs.x, self.y - rhs.y, self.z - rhs.z)
93
90
 
94
91
  def __isub__(self, rhs):
95
92
  return self.__sub__(rhs)
96
93
 
94
+ # def __mul__(self, rhs):
95
+ # return Quaternion(
96
+ # self.s * rhs.s - self.x * rhs.x - self.y * rhs.y - self.z * rhs.z,
97
+ # self.s * rhs.x + self.x * rhs.s + self.y * rhs.z - self.z * rhs.y,
98
+ # self.s * rhs.y - self.x * rhs.z + self.y * rhs.s + self.z * rhs.x,
99
+ # self.s * rhs.z + self.x * rhs.y - self.y * rhs.x + self.z * rhs.s,
100
+ # )
101
+
97
102
  def __mul__(self, rhs):
98
- return Quaternion(
99
- self.s * rhs.s - self.x * rhs.x - self.y * rhs.y - self.z * rhs.z,
100
- self.s * rhs.x + self.x * rhs.s + self.y * rhs.z - self.z * rhs.y,
101
- self.s * rhs.y - self.x * rhs.z + self.y * rhs.s + self.z * rhs.x,
102
- self.s * rhs.z + self.x * rhs.y - self.y * rhs.x + self.z * rhs.s,
103
- )
103
+ if isinstance(rhs, Quaternion):
104
+ return Quaternion(
105
+ self.s * rhs.s - self.x * rhs.x - self.y * rhs.y - self.z * rhs.z,
106
+ self.s * rhs.x + self.x * rhs.s + self.y * rhs.z - self.z * rhs.y,
107
+ self.s * rhs.y - self.x * rhs.z + self.y * rhs.s + self.z * rhs.x,
108
+ self.s * rhs.z + self.x * rhs.y - self.y * rhs.x + self.z * rhs.s,
109
+ )
110
+ elif isinstance(rhs, Vec3):
111
+ qw = self.s
112
+ qx = self.x
113
+ qy = self.y
114
+ qz = self.z
115
+
116
+ vx = rhs.x
117
+ vy = rhs.y
118
+ vz = rhs.z
119
+
120
+ # pq
121
+ pw = -qx * vx - qy * vy - qz * vz
122
+ px = qw * vx + qy * vz - qz * vy
123
+ py = qw * vy - qx * vz + qz * vx
124
+ pz = qw * vz + qx * vy - qy * vx
125
+
126
+ # pqp*
127
+ return Vec3(
128
+ -pw * qx + px * qw - py * qz + pz * qy,
129
+ -pw * qy + px * qz + py * qw - pz * qx,
130
+ -pw * qz - px * qy + py * qx + pz * qw,
131
+ )
132
+
133
+ def normalize(self):
134
+ length = math.sqrt(self.s * self.s + self.x * self.x + self.y * self.y + self.z * self.z)
135
+ if length > 0:
136
+ self.s /= length
137
+ self.x /= length
138
+ self.y /= length
139
+ self.z /= length
104
140
 
105
141
  def __str__(self) -> str:
106
142
  """
ncca/ngl/vec2.py CHANGED
@@ -42,7 +42,7 @@ class Vec2:
42
42
  yield self.x
43
43
  yield self.y
44
44
 
45
- def clone(self) -> "Vec2":
45
+ def copy(self) -> "Vec2":
46
46
  """
47
47
  Create a copy of the vector.
48
48
  Returns:
@@ -305,9 +305,7 @@ class Vec2:
305
305
  if isinstance(rhs, (float, int)):
306
306
  return Vec2(self.x * rhs, self.y * rhs)
307
307
  else:
308
- raise ValueError(
309
- f"can only do piecewise multiplication with a scalar {rhs=}"
310
- )
308
+ raise ValueError(f"can only do piecewise multiplication with a scalar {rhs=}")
311
309
 
312
310
  def __rmul__(self, rhs):
313
311
  """
@@ -330,9 +328,8 @@ class Vec2:
330
328
  Vec2: A new vector that is the result of multiplying this vector by the matrix.
331
329
  """
332
330
  return Vec2(
333
- self.x * rhs.m[0][0] + self.y * rhs.m[1][0] + self.z * rhs.m[2][0],
334
- self.x * rhs.m[0][1] + self.y * rhs.m[1][1] + self.z * rhs.m[2][1],
335
- self.x * rhs.m[0][2] + self.y * rhs.m[1][2] + self.z * rhs.m[2][2],
331
+ self.x * rhs.m[0][0] + self.y * rhs.m[1][0],
332
+ self.x * rhs.m[0][1] + self.y * rhs.m[1][1],
336
333
  )
337
334
 
338
335
 
ncca/ngl/vec3.py CHANGED
@@ -78,9 +78,9 @@ class Vec3:
78
78
  else:
79
79
  setattr(self, name, v)
80
80
 
81
- def clone(self) -> "Vec3":
81
+ def copy(self) -> "Vec3":
82
82
  """
83
- Create a clone of the current vector.
83
+ Create a copy of the current vector.
84
84
  Returns:
85
85
  Vec3: A new instance of Vec3 with the same x, y, and z values.
86
86
  """
@@ -156,11 +156,7 @@ class Vec3:
156
156
 
157
157
  if not isinstance(rhs, Vec3):
158
158
  return NotImplemented
159
- return (
160
- math.isclose(self.x, rhs.x)
161
- and math.isclose(self.y, rhs.y)
162
- and math.isclose(self.z, rhs.z)
163
- )
159
+ return math.isclose(self.x, rhs.x) and math.isclose(self.y, rhs.y) and math.isclose(self.z, rhs.z)
164
160
 
165
161
  def __neq__(self, rhs):
166
162
  """
@@ -173,11 +169,7 @@ class Vec3:
173
169
  """
174
170
  if not isinstance(rhs, Vec3):
175
171
  return NotImplemented
176
- return not (
177
- math.isclose(self.x, rhs.x)
178
- and math.isclose(self.y, rhs.y)
179
- and math.isclose(self.z, rhs.z)
180
- )
172
+ return not (math.isclose(self.x, rhs.x) and math.isclose(self.y, rhs.y) and math.isclose(self.z, rhs.z))
181
173
 
182
174
  def __neg__(self):
183
175
  """
@@ -290,9 +282,7 @@ class Vec3:
290
282
  """
291
283
  d = self.dot(n)
292
284
  # I - 2.0 * dot(N, I) * N
293
- return Vec3(
294
- self.x - 2.0 * d * n.x, self.y - 2.0 * d * n.y, self.z - 2.0 * d * n.z
295
- )
285
+ return Vec3(self.x - 2.0 * d * n.x, self.y - 2.0 * d * n.y, self.z - 2.0 * d * n.z)
296
286
 
297
287
  def clamp(self, low, high):
298
288
  """
@@ -324,13 +314,11 @@ class Vec3:
324
314
  """
325
315
  from .mat3 import Mat3
326
316
 
327
- return Mat3.from_list(
328
- [
329
- [self.x * rhs.x, self.x * rhs.y, self.x * rhs.z],
330
- [self.y * rhs.x, self.y * rhs.y, self.y * rhs.z],
331
- [self.z * rhs.x, self.z * rhs.y, self.z * rhs.z],
332
- ]
333
- )
317
+ return Mat3.from_list([
318
+ [self.x * rhs.x, self.x * rhs.y, self.x * rhs.z],
319
+ [self.y * rhs.x, self.y * rhs.y, self.y * rhs.z],
320
+ [self.z * rhs.x, self.z * rhs.y, self.z * rhs.z],
321
+ ])
334
322
 
335
323
  def __mul__(self, rhs):
336
324
  """
@@ -345,9 +333,7 @@ class Vec3:
345
333
  if isinstance(rhs, (float, int)):
346
334
  return Vec3(self.x * rhs, self.y * rhs, self.z * rhs)
347
335
  else:
348
- raise ValueError(
349
- f"can only do piecewise multiplication with a scalar {rhs=}"
350
- )
336
+ raise ValueError(f"can only do piecewise multiplication with a scalar {rhs=}")
351
337
 
352
338
  def __rmul__(self, rhs):
353
339
  """
ncca/ngl/vec4.py CHANGED
@@ -65,7 +65,7 @@ class Vec4:
65
65
  except IndexError:
66
66
  raise IndexError("Index out of range. Valid indices are 0, 1, 2, and 3.")
67
67
 
68
- def clone(self) -> "Vec4":
68
+ def copy(self) -> "Vec4":
69
69
  """
70
70
  Create a copy of the vector.
71
71
  Returns:
@@ -192,22 +192,10 @@ class Vec4:
192
192
  def __matmul__(self, rhs):
193
193
  "Vec4 @ Mat4 matrix multiplication"
194
194
  return Vec4(
195
- self.x * rhs.m[0][0]
196
- + self.y * rhs.m[1][0]
197
- + self.z * rhs.m[2][0]
198
- + self.w * rhs.m[3][0],
199
- self.x * rhs.m[0][1]
200
- + self.y * rhs.m[1][1]
201
- + self.z * rhs.m[2][1]
202
- + self.w * rhs.m[3][1],
203
- self.x * rhs.m[0][2]
204
- + self.y * rhs.m[1][2]
205
- + self.z * rhs.m[2][2]
206
- + self.w * rhs.m[3][2],
207
- self.x * rhs.m[0][3]
208
- + self.y * rhs.m[1][3]
209
- + self.z * rhs.m[2][3]
210
- + self.w * rhs.m[3][3],
195
+ self.x * rhs.m[0][0] + self.y * rhs.m[1][0] + self.z * rhs.m[2][0] + self.w * rhs.m[3][0],
196
+ self.x * rhs.m[0][1] + self.y * rhs.m[1][1] + self.z * rhs.m[2][1] + self.w * rhs.m[3][1],
197
+ self.x * rhs.m[0][2] + self.y * rhs.m[1][2] + self.z * rhs.m[2][2] + self.w * rhs.m[3][2],
198
+ self.x * rhs.m[0][3] + self.y * rhs.m[1][3] + self.z * rhs.m[2][3] + self.w * rhs.m[3][3],
211
199
  )
212
200
 
213
201
  def __repr__(self):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: ncca-ngl
3
- Version: 0.2.2
3
+ Version: 0.2.4
4
4
  Summary: A Python version of the NGL graphics library.
5
5
  Author: Jon Macey
6
6
  Author-email: Jon Macey <jmacey@bournemouth.ac.uk>
@@ -15,8 +15,8 @@ ncca/ngl/PrimData/pack_arrays.py,sha256=aWShJX8QPHXKTj66C8yu1DskmD3VEzFXyaADcxw6
15
15
  ncca/ngl/PrimData/teapot.npy,sha256=fiOfYtB5SkegO7uTSitpjl_HmnS_iIy0sXAGfxCXXjY,1350560
16
16
  ncca/ngl/PrimData/tetrahedron.npy,sha256=_KCSpflFXhYB4gGVxFmF5Cv6pQyPHuUlCj9xfL2oyEM,512
17
17
  ncca/ngl/PrimData/troll.npy,sha256=ohgGgxLCJrmsFdNrlfRY2Rg9eJgcmvArf6IAspO2BKA,3505280
18
- ncca/ngl/__init__.py,sha256=tyDe5m-1jd51kIOU-f2m1kU0XU10mebwrQ3td0Wdhko,2543
19
- ncca/ngl/abstract_vao.py,sha256=VLKp3pmPYK_dQgEImMOAQ0DufAswK_0H4DR4r8flp2U,2104
18
+ ncca/ngl/__init__.py,sha256=2zCMEMQLSZNeWUTY1i7GnRZqhmerPy1F220NoFPfJB0,2640
19
+ ncca/ngl/abstract_vao.py,sha256=fi7-BIfw1jefcXe09Qj2gGmnqqA9kzJK-hAwfG14Hrc,2068
20
20
  ncca/ngl/base_mesh.py,sha256=2JmVT5_bvgLHra1VnwRld-mh-20IqqekgEu1dbGU1a4,5736
21
21
  ncca/ngl/base_mesh.pyi,sha256=kobLuNnCSZlRRobIgVopQaS7Bjg0tJ3m4M64WXt5I-M,173
22
22
  ncca/ngl/bbox.py,sha256=PylB6ju_bkdDUqQkzO1n2E-jsmxiviNkyBLY-sN59n8,6578
@@ -24,16 +24,16 @@ ncca/ngl/bezier_curve.py,sha256=A0aidWJ7c8Bh2KGCgCJ7aH8c8MakP8xrFFEFvCjva38,2297
24
24
  ncca/ngl/first_person_camera.py,sha256=Rrt3ibMh72K8gPBu6B8neIbYk5lnNZcDnvBB8mq5pz0,5890
25
25
  ncca/ngl/image.py,sha256=zpG8egzXWkUJKQxpRhXndpRxJDKOKHZkDjQuKSRXN2E,2692
26
26
  ncca/ngl/log.py,sha256=b7l-XNJIpP36VqcCGXBV_0XT5Nkd5eyuC7043lWegcw,1282
27
- ncca/ngl/mat2.py,sha256=algDowqqP_pQ3Crl-xiqkQqRaYohfpymfaZYxvbH0qc,3437
28
- ncca/ngl/mat3.py,sha256=imWKkMuPPWLctIpU2lDqKTu014bWHSq5eEpIj4E7MzE,12404
29
- ncca/ngl/mat4.py,sha256=eGvmLfw_wwKuuVh29wAKrvSZJB41jgmcYV5EufzyXbo,17273
27
+ ncca/ngl/mat2.py,sha256=kHyrxLWQ_zGBf5t6huKL6BDrjF5a1skU_9PpcyMFi0I,3710
28
+ ncca/ngl/mat3.py,sha256=k4kD9a5QqamxZZbnSECe4p0kQdVM6bEj5VaUBAf5AOs,12355
29
+ ncca/ngl/mat4.py,sha256=i6ZKnMpwJdh8ULTjcnWKPo9UK39ulU4WeUdoet4yZAE,17574
30
30
  ncca/ngl/multi_buffer_vao.py,sha256=cuNE6gSrqkNcYvfIOYOZp4MVnpCvChUgnzsf7b60pWg,1752
31
31
  ncca/ngl/obj.py,sha256=AGldNouHrkrDs2UhATClGkgo4dzr6lzArR4YeCxQKmo,13667
32
32
  ncca/ngl/plane.py,sha256=96WuGzexYKhoeRVevGP2pZcustt9fzyyAjuwJHT25tk,1299
33
- ncca/ngl/prim_data.py,sha256=sBynXeAfVtYXK7dkdLYELo0VIbN1lK1KZ8KMmCWzjBA,19047
33
+ ncca/ngl/prim_data.py,sha256=SmHoN1wpQlu3HSfZuLBqsR8jEnVGAqdXcwSq62Lepgg,19047
34
34
  ncca/ngl/primitives.py,sha256=pThdSWLv7jJa9weBVOXhRgTfVVH54AWCbsDFCEI1YLg,4841
35
35
  ncca/ngl/pyside_event_handling_mixin.py,sha256=L8obXeTp-g2Va2eXyd1hnmSp-sY7p4GX6EcFYRnH1F4,10588
36
- ncca/ngl/quaternion.py,sha256=agmbW8i125FyLOV2Z9SpTY5yQwmnnm0rxQawwHqq1YI,3858
36
+ ncca/ngl/quaternion.py,sha256=hvMoaV7uxx60boPg4cTqLJDyTpFZrEpUhikNqmNVTrU,5188
37
37
  ncca/ngl/random.py,sha256=wX1R2rMpb76TP4rk44NUp5XoVuMisH9d-eBG5kFBZsM,5579
38
38
  ncca/ngl/shader.py,sha256=fEz8R_itsQssIxQp1E8-PhY3aOaTdm7sXpyFYoARSic,7696
39
39
  ncca/ngl/shader_lib.py,sha256=YmF3EJM9roTEt5OI5sHonAVN_ydIseyiOUBFZTX4KdA,18627
@@ -54,12 +54,12 @@ ncca/ngl/texture.py,sha256=OgBBEItgUDohCsVWgmjEWcQWBJaXl9w070PTOOywPx4,2303
54
54
  ncca/ngl/transform.py,sha256=_PibgtFoU_exfvQUWucmts0WF5OreSTNbftvSa3zT8g,2938
55
55
  ncca/ngl/util.py,sha256=8jp5vTVuGfVHMSktFEubtoaQ8SvLIQtM2UNbUeMTOFk,4372
56
56
  ncca/ngl/vao_factory.py,sha256=v87VfrUMaoqcsE-CS9kM7h5Fyk_e0LGl_iA6xqaomPg,930
57
- ncca/ngl/vec2.py,sha256=3bhd03y5E3HRnBdXJZ4xMsTMMAte5IEr6u4qqWT_UL4,10361
57
+ ncca/ngl/vec2.py,sha256=XLDBdSS2uqJbDG4gl1bL2YR79fl77bQeu98OEMQMVCQ,10204
58
58
  ncca/ngl/vec2_array.py,sha256=7QRgXh75fORsmNnSnNxNQWk6_rnDgfmRX3tmJZ4ES9E,3420
59
- ncca/ngl/vec3.py,sha256=ntgqB3sc_jzcGO5vlHKgDqloOoMkykVcWPxpYdWFy5Q,12449
59
+ ncca/ngl/vec3.py,sha256=NAiwdosG5ONcdGBBQGCfnskMdj7MH3eGagavjaU1SyI,12263
60
60
  ncca/ngl/vec3_array.py,sha256=fLRC8k0TwcaU7CnR2GmJ0prud4dcvvUX0JTbQH_2W3Y,3535
61
- ncca/ngl/vec4.py,sha256=95b7yr82JtC3FqVDC8Hwn3wzPmVzSYTDCR1A6h_w9RM,6884
61
+ ncca/ngl/vec4.py,sha256=rkowZkxacU9l0piLnsEYdgMn94gdkYUzipcn4i8lES0,6739
62
62
  ncca/ngl/vec4_array.py,sha256=PSJXfG0g2AT4oQCLHiVAP6EC5n7vMXRQy0N1rGvv1iw,3426
63
- ncca_ngl-0.2.2.dist-info/WHEEL,sha256=eh7sammvW2TypMMMGKgsM83HyA_3qQ5Lgg3ynoecH3M,79
64
- ncca_ngl-0.2.2.dist-info/METADATA,sha256=7mdnns3adaYNydJ1fvfPeSO_alBW080SZQfnx6wGhGY,1596
65
- ncca_ngl-0.2.2.dist-info/RECORD,,
63
+ ncca_ngl-0.2.4.dist-info/WHEEL,sha256=eh7sammvW2TypMMMGKgsM83HyA_3qQ5Lgg3ynoecH3M,79
64
+ ncca_ngl-0.2.4.dist-info/METADATA,sha256=fl3kZoMULNeTS--RhNPD-hM6v3uWQ76LpLHm9fcO_9U,1596
65
+ ncca_ngl-0.2.4.dist-info/RECORD,,