ncca-ngl 0.1.1__py3-none-any.whl → 0.1.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/.ruff_cache/.gitignore +2 -0
- ncca/ngl/.ruff_cache/0.13.0/10564494386971134025 +0 -0
- ncca/ngl/.ruff_cache/0.13.0/7783445477288392980 +0 -0
- ncca/ngl/.ruff_cache/CACHEDIR.TAG +1 -0
- ncca/ngl/PrimData/Primitives.npz +0 -0
- ncca/ngl/PrimData/buddah.npy +0 -0
- ncca/ngl/PrimData/bunny.npy +0 -0
- ncca/ngl/PrimData/cube.npy +0 -0
- ncca/ngl/PrimData/dodecahedron.npy +0 -0
- ncca/ngl/PrimData/dragon.npy +0 -0
- ncca/ngl/PrimData/football.npy +0 -0
- ncca/ngl/PrimData/icosahedron.npy +0 -0
- ncca/ngl/PrimData/octahedron.npy +0 -0
- ncca/ngl/PrimData/pack_arrays.py +20 -0
- ncca/ngl/PrimData/teapot.npy +0 -0
- ncca/ngl/PrimData/tetrahedron.npy +0 -0
- ncca/ngl/PrimData/troll.npy +0 -0
- ncca/ngl/__init__.py +100 -0
- ncca/ngl/abstract_vao.py +85 -0
- ncca/ngl/base_mesh.py +170 -0
- ncca/ngl/base_mesh.pyi +11 -0
- ncca/ngl/bbox.py +224 -0
- ncca/ngl/bezier_curve.py +75 -0
- ncca/ngl/first_person_camera.py +174 -0
- ncca/ngl/image.py +94 -0
- ncca/ngl/log.py +44 -0
- ncca/ngl/mat2.py +128 -0
- ncca/ngl/mat3.py +466 -0
- ncca/ngl/mat4.py +456 -0
- ncca/ngl/multi_buffer_vao.py +49 -0
- ncca/ngl/obj.py +416 -0
- ncca/ngl/plane.py +47 -0
- ncca/ngl/primitives.py +706 -0
- ncca/ngl/pyside_event_handling_mixin.py +318 -0
- ncca/ngl/quaternion.py +112 -0
- ncca/ngl/random.py +167 -0
- ncca/ngl/shader.py +229 -0
- ncca/ngl/shader_lib.py +536 -0
- ncca/ngl/shader_program.py +785 -0
- ncca/ngl/shaders/checker_fragment.glsl +35 -0
- ncca/ngl/shaders/checker_vertex.glsl +19 -0
- ncca/ngl/shaders/colour_fragment.glsl +8 -0
- ncca/ngl/shaders/colour_vertex.glsl +11 -0
- ncca/ngl/shaders/diffuse_fragment.glsl +21 -0
- ncca/ngl/shaders/diffuse_vertex.glsl +24 -0
- ncca/ngl/shaders/text_fragment.glsl +10 -0
- ncca/ngl/shaders/text_geometry.glsl +53 -0
- ncca/ngl/shaders/text_vertex.glsl +18 -0
- ncca/ngl/simple_index_vao.py +65 -0
- ncca/ngl/simple_vao.py +42 -0
- ncca/ngl/text.py +342 -0
- ncca/ngl/texture.py +75 -0
- ncca/ngl/transform.py +95 -0
- ncca/ngl/util.py +128 -0
- ncca/ngl/vao_factory.py +34 -0
- ncca/ngl/vec2.py +350 -0
- ncca/ngl/vec2_array.py +124 -0
- ncca/ngl/vec3.py +401 -0
- ncca/ngl/vec3_array.py +128 -0
- ncca/ngl/vec4.py +229 -0
- ncca/ngl/vec4_array.py +124 -0
- ncca_ngl-0.1.4.dist-info/METADATA +22 -0
- ncca_ngl-0.1.4.dist-info/RECORD +64 -0
- ncca_ngl-0.1.4.dist-info/WHEEL +4 -0
- ncca_ngl-0.1.1.dist-info/METADATA +0 -23
- ncca_ngl-0.1.1.dist-info/RECORD +0 -4
- ncca_ngl-0.1.1.dist-info/WHEEL +0 -4
- ncca_ngl-0.1.1.dist-info/licenses/LICENSE.txt +0 -7
ncca/ngl/vec4.py
ADDED
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Simple Float only Vec3 class for 3D graphics, very similar to the pyngl ones
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
import ctypes
|
|
6
|
+
import math
|
|
7
|
+
|
|
8
|
+
import numpy as np
|
|
9
|
+
|
|
10
|
+
from .log import logger
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class Vec4:
|
|
14
|
+
__slots__ = ["_x", "_y", "_z", "_w"]
|
|
15
|
+
"by using slots we fix our class attributes to x,y,z,w"
|
|
16
|
+
|
|
17
|
+
def __init__(self, x=0.0, y=0.0, z=0.0, w=1.0):
|
|
18
|
+
"""simple ctor"""
|
|
19
|
+
self._x = x # x component of vector : float
|
|
20
|
+
self._y = y # y component of vector : float
|
|
21
|
+
self._z = z # z component of vector : float
|
|
22
|
+
self._w = w # w component of vector : float
|
|
23
|
+
|
|
24
|
+
@classmethod
|
|
25
|
+
def sizeof(cls):
|
|
26
|
+
return 4 * ctypes.sizeof(ctypes.c_float)
|
|
27
|
+
|
|
28
|
+
def _validate_and_set(self, v, name):
|
|
29
|
+
"""
|
|
30
|
+
check if v is a float or int
|
|
31
|
+
Args:
|
|
32
|
+
v (number): The value to check.
|
|
33
|
+
Raises:
|
|
34
|
+
ValueError: If v is not a float or int.
|
|
35
|
+
"""
|
|
36
|
+
if not isinstance(v, (int, float)):
|
|
37
|
+
raise ValueError("need float or int")
|
|
38
|
+
else:
|
|
39
|
+
setattr(self, name, v)
|
|
40
|
+
|
|
41
|
+
def __iter__(self):
|
|
42
|
+
"""
|
|
43
|
+
Make the Vec3 class iterable.
|
|
44
|
+
Yields:
|
|
45
|
+
float: The x, y, and z components of the vector.
|
|
46
|
+
"""
|
|
47
|
+
yield self.x
|
|
48
|
+
yield self.y
|
|
49
|
+
yield self.z
|
|
50
|
+
yield self.w
|
|
51
|
+
|
|
52
|
+
def __getitem__(self, index):
|
|
53
|
+
"""
|
|
54
|
+
Get the component of the vector at the given index.
|
|
55
|
+
Args:
|
|
56
|
+
index (int): The index of the component (0 for x, 1 for y, 2 for z).
|
|
57
|
+
Returns:
|
|
58
|
+
float: The value of the component at the given index.
|
|
59
|
+
Raises:
|
|
60
|
+
IndexError: If the index is out of range.
|
|
61
|
+
"""
|
|
62
|
+
components = [self.x, self.y, self.z, self.w]
|
|
63
|
+
try:
|
|
64
|
+
return components[index]
|
|
65
|
+
except IndexError:
|
|
66
|
+
raise IndexError("Index out of range. Valid indices are 0, 1, 2, and 3.")
|
|
67
|
+
|
|
68
|
+
def clone(self) -> "Vec4":
|
|
69
|
+
"""
|
|
70
|
+
Create a copy of the vector.
|
|
71
|
+
Returns:
|
|
72
|
+
Vec4: A new Vec4 instance with the same values.
|
|
73
|
+
"""
|
|
74
|
+
return Vec4(self.x, self.y, self.z, self.w)
|
|
75
|
+
|
|
76
|
+
def __add__(self, rhs):
|
|
77
|
+
"return a+b vector addition"
|
|
78
|
+
r = Vec4()
|
|
79
|
+
r.x = self.x + rhs.x
|
|
80
|
+
r.y = self.y + rhs.y
|
|
81
|
+
r.z = self.z + rhs.z
|
|
82
|
+
r.w = self.w + rhs.w
|
|
83
|
+
return r
|
|
84
|
+
|
|
85
|
+
def __iadd__(self, rhs):
|
|
86
|
+
"return a+=b vector addition"
|
|
87
|
+
self.x += rhs.x
|
|
88
|
+
self.y += rhs.y
|
|
89
|
+
self.z += rhs.z
|
|
90
|
+
self.w += rhs.w
|
|
91
|
+
|
|
92
|
+
return self
|
|
93
|
+
|
|
94
|
+
def __sub__(self, rhs):
|
|
95
|
+
"return a+b vector addition"
|
|
96
|
+
r = Vec4()
|
|
97
|
+
r.x = self.x - rhs.x
|
|
98
|
+
r.y = self.y - rhs.y
|
|
99
|
+
r.z = self.z - rhs.z
|
|
100
|
+
r.w = self.w - rhs.w
|
|
101
|
+
return r
|
|
102
|
+
|
|
103
|
+
def __isub__(self, rhs):
|
|
104
|
+
"return a+=b vector addition"
|
|
105
|
+
self.x -= rhs.x
|
|
106
|
+
self.y -= rhs.y
|
|
107
|
+
self.z -= rhs.z
|
|
108
|
+
self.w -= rhs.w
|
|
109
|
+
return self
|
|
110
|
+
|
|
111
|
+
def set(self, x, y, z, w=1.0):
|
|
112
|
+
"set from x,y,z,w will convert to float an raise value error if problem"
|
|
113
|
+
try:
|
|
114
|
+
self.x = float(x)
|
|
115
|
+
self.y = float(y)
|
|
116
|
+
self.z = float(z)
|
|
117
|
+
self.w = float(w)
|
|
118
|
+
except ValueError:
|
|
119
|
+
logger.warning("need float values")
|
|
120
|
+
raise
|
|
121
|
+
|
|
122
|
+
def dot(self, rhs):
|
|
123
|
+
return (self.x * rhs.x) + (self.y * rhs.y) + (self.z * rhs.z) + (self.w * rhs.w)
|
|
124
|
+
|
|
125
|
+
def length(self):
|
|
126
|
+
"length of vector"
|
|
127
|
+
return math.sqrt(self.x**2 + self.y**2 + self.z**2 + self.w**2)
|
|
128
|
+
|
|
129
|
+
def length_squared(self):
|
|
130
|
+
"square length of vector"
|
|
131
|
+
return self.x**2 + self.y**2 + self.z**2 + self.w**2
|
|
132
|
+
|
|
133
|
+
def normalize(self):
|
|
134
|
+
"normalize this vector"
|
|
135
|
+
length = self.length()
|
|
136
|
+
try:
|
|
137
|
+
self.x /= length
|
|
138
|
+
self.y /= length
|
|
139
|
+
self.z /= length
|
|
140
|
+
self.w /= length
|
|
141
|
+
except ZeroDivisionError:
|
|
142
|
+
raise ZeroDivisionError("cannot normalize the zero vector")
|
|
143
|
+
return self
|
|
144
|
+
|
|
145
|
+
def __eq__(self, rhs):
|
|
146
|
+
"test a==b using math.isclose"
|
|
147
|
+
if not isinstance(rhs, Vec4):
|
|
148
|
+
return NotImplemented
|
|
149
|
+
return (
|
|
150
|
+
math.isclose(self.x, rhs.x)
|
|
151
|
+
and math.isclose(self.y, rhs.y)
|
|
152
|
+
and math.isclose(self.z, rhs.z)
|
|
153
|
+
and math.isclose(self.w, rhs.w)
|
|
154
|
+
)
|
|
155
|
+
|
|
156
|
+
def __neq__(self, rhs):
|
|
157
|
+
"test a!=b using math.isclose"
|
|
158
|
+
if not isinstance(rhs, Vec4):
|
|
159
|
+
return NotImplemented
|
|
160
|
+
return not (
|
|
161
|
+
math.isclose(self.x, rhs.x)
|
|
162
|
+
and math.isclose(self.y, rhs.y)
|
|
163
|
+
and math.isclose(self.z, rhs.z)
|
|
164
|
+
and math.isclose(self.w, rhs.w)
|
|
165
|
+
)
|
|
166
|
+
|
|
167
|
+
def __neg__(self):
|
|
168
|
+
self.x = -self.x
|
|
169
|
+
self.y = -self.y
|
|
170
|
+
self.z = -self.z
|
|
171
|
+
self.w = -self.w
|
|
172
|
+
return self
|
|
173
|
+
|
|
174
|
+
def __mul__(self, rhs):
|
|
175
|
+
if isinstance(rhs, (float, int)):
|
|
176
|
+
"Vec4 * scalar multiplication"
|
|
177
|
+
return Vec4(self.x * rhs, self.y * rhs, self.z * rhs, self.w * rhs)
|
|
178
|
+
else:
|
|
179
|
+
raise ValueError
|
|
180
|
+
|
|
181
|
+
def __rmul__(self, rhs):
|
|
182
|
+
return self * rhs
|
|
183
|
+
|
|
184
|
+
def __truediv__(self, rhs):
|
|
185
|
+
if isinstance(rhs, (float, int)):
|
|
186
|
+
return Vec4(self.x / rhs, self.y / rhs, self.z / rhs, self.w / rhs)
|
|
187
|
+
elif isinstance(rhs, Vec4):
|
|
188
|
+
return Vec4(self.x / rhs.x, self.y / rhs.y, self.z / rhs.z, self.w / rhs.w)
|
|
189
|
+
else:
|
|
190
|
+
raise ValueError(f"can only do piecewise division with a scalar {rhs=}")
|
|
191
|
+
|
|
192
|
+
def __matmul__(self, rhs):
|
|
193
|
+
"Vec4 @ Mat4 matrix multiplication"
|
|
194
|
+
return Vec4(
|
|
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],
|
|
199
|
+
)
|
|
200
|
+
|
|
201
|
+
def __repr__(self):
|
|
202
|
+
"repr for debugging purposes"
|
|
203
|
+
return f"Vec4 [{self.x},{self.y},{self.z},{self.w}]"
|
|
204
|
+
|
|
205
|
+
def __str__(self):
|
|
206
|
+
"print out the vector as a string"
|
|
207
|
+
return f"[{self.x},{self.y},{self.z},{self.w}]"
|
|
208
|
+
|
|
209
|
+
def to_list(self):
|
|
210
|
+
return [self.x, self.y, self.z, self.w]
|
|
211
|
+
|
|
212
|
+
def to_numpy(self):
|
|
213
|
+
return np.array([self.x, self.y, self.z, self.w])
|
|
214
|
+
|
|
215
|
+
|
|
216
|
+
# Helper function to create properties
|
|
217
|
+
def _create_property(attr_name):
|
|
218
|
+
def getter(self):
|
|
219
|
+
return getattr(self, f"_{attr_name}")
|
|
220
|
+
|
|
221
|
+
def setter(self, value):
|
|
222
|
+
self._validate_and_set(value, f"_{attr_name}")
|
|
223
|
+
|
|
224
|
+
return property(getter, setter)
|
|
225
|
+
|
|
226
|
+
|
|
227
|
+
# Dynamically add properties for x, y, z,w
|
|
228
|
+
for attr in ["x", "y", "z", "w"]:
|
|
229
|
+
setattr(Vec4, attr, _create_property(attr))
|
ncca/ngl/vec4_array.py
ADDED
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
"""
|
|
2
|
+
A container for ngl.Vec4 objects that mimics some of the behavior of a std::vector
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
import numpy as np
|
|
6
|
+
|
|
7
|
+
from .vec4 import Vec4
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class Vec4Array:
|
|
11
|
+
"""
|
|
12
|
+
A class to hold a list of Vec4 objects and perform operations on them.
|
|
13
|
+
"""
|
|
14
|
+
|
|
15
|
+
def __init__(self, values=None):
|
|
16
|
+
"""
|
|
17
|
+
Initializes the Vec3Array.
|
|
18
|
+
|
|
19
|
+
Args:
|
|
20
|
+
values (iterable | int, optional): An iterable of Vec4 objects or an integer.
|
|
21
|
+
If an integer, the array is initialized with that many default Vec3s.
|
|
22
|
+
If an iterable, it's initialized with the Vec3s from the iterable.
|
|
23
|
+
Defaults to None (an empty array).
|
|
24
|
+
"""
|
|
25
|
+
self._data = []
|
|
26
|
+
if values is not None:
|
|
27
|
+
if isinstance(values, int):
|
|
28
|
+
self._data = [Vec4() for _ in range(values)]
|
|
29
|
+
else:
|
|
30
|
+
for v in values:
|
|
31
|
+
if not isinstance(v, Vec4):
|
|
32
|
+
raise TypeError("All elements must be of type Vec4")
|
|
33
|
+
self._data.append(v)
|
|
34
|
+
|
|
35
|
+
def __getitem__(self, index):
|
|
36
|
+
"""
|
|
37
|
+
Get the Vec4 at the specified index.
|
|
38
|
+
|
|
39
|
+
Args:
|
|
40
|
+
index (int): The index of the element.
|
|
41
|
+
|
|
42
|
+
Returns:
|
|
43
|
+
Vec4: The Vec4 object at the given index.
|
|
44
|
+
"""
|
|
45
|
+
return self._data[index]
|
|
46
|
+
|
|
47
|
+
def __setitem__(self, index, value):
|
|
48
|
+
"""
|
|
49
|
+
Set the Vec3 at the specified index.
|
|
50
|
+
|
|
51
|
+
Args:
|
|
52
|
+
index (int): The index of the element to set.
|
|
53
|
+
value (Vec4): The new Vec3 object.
|
|
54
|
+
"""
|
|
55
|
+
if not isinstance(value, Vec4):
|
|
56
|
+
raise TypeError("Only Vec4 objects can be assigned")
|
|
57
|
+
self._data[index] = value
|
|
58
|
+
|
|
59
|
+
def __len__(self):
|
|
60
|
+
"""
|
|
61
|
+
Return the number of elements in the array.
|
|
62
|
+
"""
|
|
63
|
+
return len(self._data)
|
|
64
|
+
|
|
65
|
+
def __iter__(self):
|
|
66
|
+
"""
|
|
67
|
+
Return an iterator for the array.
|
|
68
|
+
"""
|
|
69
|
+
return iter(self._data)
|
|
70
|
+
|
|
71
|
+
def append(self, value):
|
|
72
|
+
"""
|
|
73
|
+
Append a Vec4 object to the array.
|
|
74
|
+
|
|
75
|
+
Args:
|
|
76
|
+
value (Vec4): The Vec4 object to append.
|
|
77
|
+
"""
|
|
78
|
+
if not isinstance(value, Vec4):
|
|
79
|
+
raise TypeError("Only Vec4 objects can be appended")
|
|
80
|
+
self._data.append(value)
|
|
81
|
+
|
|
82
|
+
def extend(self, values):
|
|
83
|
+
"""
|
|
84
|
+
Extend the array with a list of Vec4 objects.
|
|
85
|
+
|
|
86
|
+
Args:
|
|
87
|
+
values (list): A list of Vec4 objects to extend.
|
|
88
|
+
"""
|
|
89
|
+
if not all(isinstance(v, Vec4) for v in values):
|
|
90
|
+
raise TypeError("All elements must be of type Vec4")
|
|
91
|
+
self._data.extend(values)
|
|
92
|
+
|
|
93
|
+
def to_list(self):
|
|
94
|
+
"""
|
|
95
|
+
Convert the array of Vec4 objects to a single flat list of floats.
|
|
96
|
+
|
|
97
|
+
Returns:
|
|
98
|
+
list: A list of x, y, z, w components concatenated.
|
|
99
|
+
"""
|
|
100
|
+
return [comp for vec in self._data for comp in vec]
|
|
101
|
+
|
|
102
|
+
def to_numpy(self):
|
|
103
|
+
"""
|
|
104
|
+
Convert the array of Vec4 objects to a numpy array.
|
|
105
|
+
|
|
106
|
+
Returns:
|
|
107
|
+
numpy.ndarray: A numpy array of the vector data.
|
|
108
|
+
"""
|
|
109
|
+
return np.array(self.to_list(), dtype=np.float32)
|
|
110
|
+
|
|
111
|
+
def __repr__(self):
|
|
112
|
+
return f"Vec4Array({self._data!r})"
|
|
113
|
+
|
|
114
|
+
def __str__(self):
|
|
115
|
+
return str(self._data)
|
|
116
|
+
|
|
117
|
+
def sizeof(self):
|
|
118
|
+
"""
|
|
119
|
+
Return the size of the array in bytes.
|
|
120
|
+
|
|
121
|
+
Returns:
|
|
122
|
+
int: The size of the array in bytes.
|
|
123
|
+
"""
|
|
124
|
+
return len(self._data) * Vec4.sizeof()
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
Metadata-Version: 2.3
|
|
2
|
+
Name: ncca-ngl
|
|
3
|
+
Version: 0.1.4
|
|
4
|
+
Summary: A Python version of the NGL graphics library.
|
|
5
|
+
Author: Jon Macey
|
|
6
|
+
Author-email: Jon Macey <jmacey@bournemouth.ac.uk>
|
|
7
|
+
License: Copyright 2024 Jon Macey
|
|
8
|
+
|
|
9
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
10
|
+
|
|
11
|
+
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
12
|
+
|
|
13
|
+
THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
14
|
+
Requires-Dist: numpy>=2.3.3
|
|
15
|
+
Requires-Dist: pyopengl
|
|
16
|
+
Requires-Dist: pillow
|
|
17
|
+
Requires-Dist: glfw>=2.9.0
|
|
18
|
+
Requires-Dist: freetype-py>=2.5.1
|
|
19
|
+
Requires-Dist: pyside6>=6.9.2
|
|
20
|
+
Requires-Python: >=3.13
|
|
21
|
+
Project-URL: Homepage, https://github.com/NCCA/PyNGL
|
|
22
|
+
Project-URL: Issues, https://github.com/NCCA/PyNGL/issues
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
ncca/ngl/.ruff_cache/.gitignore,sha256=njpg8ebsSuYCFcEdVLFxOSdF7CXp3e1DPVvZITY68xY,35
|
|
2
|
+
ncca/ngl/.ruff_cache/0.13.0/10564494386971134025,sha256=cw-J0gIy5ofUkDLcl9l1KuyGeSnM8hZtj8urcZcsVJI,1210
|
|
3
|
+
ncca/ngl/.ruff_cache/0.13.0/7783445477288392980,sha256=eeVnGNALeos37aECRfh4CHPcV_ubWjMAfxMhg3IId5c,82
|
|
4
|
+
ncca/ngl/.ruff_cache/CACHEDIR.TAG,sha256=WVMVbX4MVkpCclExbq8m-IcOZIOuIZf5FrYw5Pk-Ma4,43
|
|
5
|
+
ncca/ngl/PrimData/Primitives.npz,sha256=8viufkX_FyT6afB4ZJR_ikv3D3tBG6IuHIXBdw0nE0o,15016264
|
|
6
|
+
ncca/ngl/PrimData/buddah.npy,sha256=D9fBmoqKJdynSqPq9_AWFlGIGFb983G8ZCfvUQogXkk,9600128
|
|
7
|
+
ncca/ngl/PrimData/bunny.npy,sha256=URHm_8eGdFjIzosEbYxVYr-YeQyuAz7fq-V0Ake4mcg,6688064
|
|
8
|
+
ncca/ngl/PrimData/cube.npy,sha256=2_Bim6hRXw0ocfylM9IZHotQbg4-4zIBd_L6Qy83kQM,1280
|
|
9
|
+
ncca/ngl/PrimData/dodecahedron.npy,sha256=o7SI6Thh1Gt_ngS3CUs7oNjKGAXF7KB6K1rXYiX_O7k,3584
|
|
10
|
+
ncca/ngl/PrimData/dragon.npy,sha256=ZVYY3wNlAzcdnycHgrEQNAaQE3uTadTqKNqP4me-Bsk,9600128
|
|
11
|
+
ncca/ngl/PrimData/football.npy,sha256=AQY4VU6ci2ipinNcaBkL1Z6fi5wWsZTzrw8Lk41LX6k,11264
|
|
12
|
+
ncca/ngl/PrimData/icosahedron.npy,sha256=z5CRCy7KMbOUiIOx54Wc8n0CvLlA0F1TIASoFThfb2w,2048
|
|
13
|
+
ncca/ngl/PrimData/octahedron.npy,sha256=Y9qEzBMFGeoB554Jl08zGQQg6NGs_J0ErhZXMQrTE8Q,896
|
|
14
|
+
ncca/ngl/PrimData/pack_arrays.py,sha256=aWShJX8QPHXKTj66C8yu1DskmD3VEzFXyaADcxw6YKs,362
|
|
15
|
+
ncca/ngl/PrimData/teapot.npy,sha256=fiOfYtB5SkegO7uTSitpjl_HmnS_iIy0sXAGfxCXXjY,1350560
|
|
16
|
+
ncca/ngl/PrimData/tetrahedron.npy,sha256=_KCSpflFXhYB4gGVxFmF5Cv6pQyPHuUlCj9xfL2oyEM,512
|
|
17
|
+
ncca/ngl/PrimData/troll.npy,sha256=ohgGgxLCJrmsFdNrlfRY2Rg9eJgcmvArf6IAspO2BKA,3505280
|
|
18
|
+
ncca/ngl/__init__.py,sha256=i01MBdh814MrDmPDvG4dPI6azBWZWTq212cfVNnKkR8,2308
|
|
19
|
+
ncca/ngl/abstract_vao.py,sha256=fi7-BIfw1jefcXe09Qj2gGmnqqA9kzJK-hAwfG14Hrc,2068
|
|
20
|
+
ncca/ngl/base_mesh.py,sha256=2JmVT5_bvgLHra1VnwRld-mh-20IqqekgEu1dbGU1a4,5736
|
|
21
|
+
ncca/ngl/base_mesh.pyi,sha256=kobLuNnCSZlRRobIgVopQaS7Bjg0tJ3m4M64WXt5I-M,173
|
|
22
|
+
ncca/ngl/bbox.py,sha256=PylB6ju_bkdDUqQkzO1n2E-jsmxiviNkyBLY-sN59n8,6578
|
|
23
|
+
ncca/ngl/bezier_curve.py,sha256=A0aidWJ7c8Bh2KGCgCJ7aH8c8MakP8xrFFEFvCjva38,2297
|
|
24
|
+
ncca/ngl/first_person_camera.py,sha256=Rrt3ibMh72K8gPBu6B8neIbYk5lnNZcDnvBB8mq5pz0,5890
|
|
25
|
+
ncca/ngl/image.py,sha256=zpG8egzXWkUJKQxpRhXndpRxJDKOKHZkDjQuKSRXN2E,2692
|
|
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
|
|
30
|
+
ncca/ngl/multi_buffer_vao.py,sha256=cuNE6gSrqkNcYvfIOYOZp4MVnpCvChUgnzsf7b60pWg,1752
|
|
31
|
+
ncca/ngl/obj.py,sha256=AGldNouHrkrDs2UhATClGkgo4dzr6lzArR4YeCxQKmo,13667
|
|
32
|
+
ncca/ngl/plane.py,sha256=96WuGzexYKhoeRVevGP2pZcustt9fzyyAjuwJHT25tk,1299
|
|
33
|
+
ncca/ngl/primitives.py,sha256=G4X5kPROgcO2hZf8YkYvviS5C2kPLXrlSerJUdD6Fog,22575
|
|
34
|
+
ncca/ngl/pyside_event_handling_mixin.py,sha256=L8obXeTp-g2Va2eXyd1hnmSp-sY7p4GX6EcFYRnH1F4,10588
|
|
35
|
+
ncca/ngl/quaternion.py,sha256=MeQ-oxufo96TJ1GusRdpaHJsjfD6hG1ADsqTiBbHxlM,3814
|
|
36
|
+
ncca/ngl/random.py,sha256=wX1R2rMpb76TP4rk44NUp5XoVuMisH9d-eBG5kFBZsM,5579
|
|
37
|
+
ncca/ngl/shader.py,sha256=fEz8R_itsQssIxQp1E8-PhY3aOaTdm7sXpyFYoARSic,7696
|
|
38
|
+
ncca/ngl/shader_lib.py,sha256=YmF3EJM9roTEt5OI5sHonAVN_ydIseyiOUBFZTX4KdA,18627
|
|
39
|
+
ncca/ngl/shader_program.py,sha256=Yuq7RMsa__MWWZWDFz1J7g9Z9Gi2CjTq9y2F0Qf9rhk,27959
|
|
40
|
+
ncca/ngl/shaders/checker_fragment.glsl,sha256=2hJH8yOJxLH5DdDdS15C3uom4o4YsiBle0fIYLkx9jI,640
|
|
41
|
+
ncca/ngl/shaders/checker_vertex.glsl,sha256=G90GDAY5yEsdYMHhpZhWTmFFx_jfpDUexam-vpuVrXo,411
|
|
42
|
+
ncca/ngl/shaders/colour_fragment.glsl,sha256=Y8CeWyDyQAK7u3-rQhURO6Ee3ibturZR3B75e5vcb2U,118
|
|
43
|
+
ncca/ngl/shaders/colour_vertex.glsl,sha256=moRuaWAmWbItzIgFlweDMz1dklQrJ_jZKNjw8SaXd9I,154
|
|
44
|
+
ncca/ngl/shaders/diffuse_fragment.glsl,sha256=vkKJ9R683yk5OlyUGUwdoqrLyOsvFz3CjZS-wRCuzaY,615
|
|
45
|
+
ncca/ngl/shaders/diffuse_vertex.glsl,sha256=j1t1Zv5iky0gsBG0HOQGOix6qyj09RHo7c_irMMJZHo,621
|
|
46
|
+
ncca/ngl/shaders/text_fragment.glsl,sha256=1jrKOSl5EjJOFonWdgj7dNiQtzFSbZy1QaZrUwUidNQ,220
|
|
47
|
+
ncca/ngl/shaders/text_geometry.glsl,sha256=OTLdn4pdZj2BOMh33rE6JBfQ9SHQ1L1e8qn3Hl3YV6w,1015
|
|
48
|
+
ncca/ngl/shaders/text_vertex.glsl,sha256=uPym1x87SJOd0E3zPN1Fx44warJ6IYfvhzPQEtLOO3w,289
|
|
49
|
+
ncca/ngl/simple_index_vao.py,sha256=1IVy1WQH4V8_viZbRoIMbDRJsiH7iAhw0GEWUV9KpAU,2338
|
|
50
|
+
ncca/ngl/simple_vao.py,sha256=jfU2O3yliaM6iWNvfcRbjQ6o2_IVSPrOR3GthDiul6Q,1419
|
|
51
|
+
ncca/ngl/text.py,sha256=6vIfMKuP3WWSehR9RDK7YF_jgxKz_istVv8dSlPMjYo,13550
|
|
52
|
+
ncca/ngl/texture.py,sha256=OgBBEItgUDohCsVWgmjEWcQWBJaXl9w070PTOOywPx4,2303
|
|
53
|
+
ncca/ngl/transform.py,sha256=_PibgtFoU_exfvQUWucmts0WF5OreSTNbftvSa3zT8g,2938
|
|
54
|
+
ncca/ngl/util.py,sha256=RLgGmxTq4gzlMKdAfLrO3gtV8VUSP5WtQK4hyLV6waQ,3558
|
|
55
|
+
ncca/ngl/vao_factory.py,sha256=v87VfrUMaoqcsE-CS9kM7h5Fyk_e0LGl_iA6xqaomPg,930
|
|
56
|
+
ncca/ngl/vec2.py,sha256=hJ0RWBxmeh-OOro_Y9lKocgiuu0f9vxp6L2_6vKfwUQ,10331
|
|
57
|
+
ncca/ngl/vec2_array.py,sha256=7QRgXh75fORsmNnSnNxNQWk6_rnDgfmRX3tmJZ4ES9E,3420
|
|
58
|
+
ncca/ngl/vec3.py,sha256=q4HI4y4Xk3lTdlB8YdF4T2mCdwK2jXRattjDHlJi7vg,12265
|
|
59
|
+
ncca/ngl/vec3_array.py,sha256=fLRC8k0TwcaU7CnR2GmJ0prud4dcvvUX0JTbQH_2W3Y,3535
|
|
60
|
+
ncca/ngl/vec4.py,sha256=zF0zw5EO4UE7EmqN30LPR3QQfaMcA1VcMID8CZALDiU,6740
|
|
61
|
+
ncca/ngl/vec4_array.py,sha256=PSJXfG0g2AT4oQCLHiVAP6EC5n7vMXRQy0N1rGvv1iw,3426
|
|
62
|
+
ncca_ngl-0.1.4.dist-info/WHEEL,sha256=NHRAbdxxzyL9K3IO2LjmlNqKSyPZnKv2BD16YYVKo18,79
|
|
63
|
+
ncca_ngl-0.1.4.dist-info/METADATA,sha256=KYfa9uhviMmF1MyM6yabGza0uQAuDpXm1N6BFSUKK1I,1596
|
|
64
|
+
ncca_ngl-0.1.4.dist-info/RECORD,,
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
Metadata-Version: 2.4
|
|
2
|
-
Name: ncca-ngl
|
|
3
|
-
Version: 0.1.1
|
|
4
|
-
Summary: A Python version of the NGL graphics library.
|
|
5
|
-
Project-URL: Homepage, https://github.com/NCCA/PyNGL
|
|
6
|
-
Project-URL: Issues, https://github.com/NCCA/PyNGL/issues
|
|
7
|
-
Author-email: Jon Macey <jmacey@bournemouth.ac.uk>
|
|
8
|
-
License: Copyright 2024 Jon Macey
|
|
9
|
-
|
|
10
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
11
|
-
|
|
12
|
-
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
13
|
-
|
|
14
|
-
THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
15
|
-
License-File: LICENSE.txt
|
|
16
|
-
Requires-Python: >=3.13
|
|
17
|
-
Requires-Dist: freetype-py>=2.5.1
|
|
18
|
-
Requires-Dist: glfw>=2.9.0
|
|
19
|
-
Requires-Dist: hatch>=1.14.2
|
|
20
|
-
Requires-Dist: numpy>=2.3.3
|
|
21
|
-
Requires-Dist: pillow
|
|
22
|
-
Requires-Dist: pyopengl
|
|
23
|
-
Requires-Dist: pyside6>=6.9.2
|
ncca_ngl-0.1.1.dist-info/RECORD
DELETED
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
ncca_ngl-0.1.1.dist-info/METADATA,sha256=_fyCyPk9fIsvOZ6JKwTYq_1eDM-gsu26f3sFMj1d-4k,1627
|
|
2
|
-
ncca_ngl-0.1.1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
3
|
-
ncca_ngl-0.1.1.dist-info/licenses/LICENSE.txt,sha256=WY4-vI3NTjw6HGwshZcyvEYhvAKBX3rpY7x9wMF_FhA,1056
|
|
4
|
-
ncca_ngl-0.1.1.dist-info/RECORD,,
|
ncca_ngl-0.1.1.dist-info/WHEEL
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
Copyright 2024 Jon Macey
|
|
2
|
-
|
|
3
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
4
|
-
|
|
5
|
-
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
6
|
-
|
|
7
|
-
THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|