basilisk-engine 0.1.2__py3-none-any.whl → 0.1.3__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.

Potentially problematic release.


This version of basilisk-engine might be problematic. Click here for more details.

Files changed (82) hide show
  1. basilisk/__init__.py +11 -11
  2. basilisk/bsk_assets/cube.obj +48 -48
  3. basilisk/collisions/broad/broad_aabb.py +102 -102
  4. basilisk/collisions/broad/broad_bvh.py +137 -137
  5. basilisk/collisions/collider.py +95 -83
  6. basilisk/collisions/collider_handler.py +225 -228
  7. basilisk/collisions/narrow/contact_manifold.py +90 -90
  8. basilisk/collisions/narrow/dataclasses.py +33 -27
  9. basilisk/collisions/narrow/deprecated.py +46 -46
  10. basilisk/collisions/narrow/epa.py +91 -91
  11. basilisk/collisions/narrow/gjk.py +66 -66
  12. basilisk/collisions/narrow/graham_scan.py +24 -24
  13. basilisk/collisions/narrow/helper.py +29 -29
  14. basilisk/collisions/narrow/line_intersections.py +106 -106
  15. basilisk/collisions/narrow/sutherland_hodgman.py +75 -75
  16. basilisk/config.py +2 -2
  17. basilisk/draw/draw.py +100 -100
  18. basilisk/draw/draw_handler.py +180 -210
  19. basilisk/draw/font_renderer.py +28 -28
  20. basilisk/engine.py +195 -195
  21. basilisk/generic/abstract_bvh.py +15 -15
  22. basilisk/generic/abstract_custom.py +133 -133
  23. basilisk/generic/collisions.py +70 -70
  24. basilisk/generic/input_validation.py +67 -28
  25. basilisk/generic/math.py +6 -6
  26. basilisk/generic/matrices.py +33 -33
  27. basilisk/generic/meshes.py +72 -72
  28. basilisk/generic/quat.py +137 -137
  29. basilisk/generic/quat_methods.py +7 -7
  30. basilisk/generic/raycast_result.py +24 -0
  31. basilisk/generic/vec3.py +143 -143
  32. basilisk/input/mouse.py +61 -59
  33. basilisk/mesh/cube.py +33 -33
  34. basilisk/mesh/mesh.py +230 -230
  35. basilisk/mesh/mesh_from_data.py +132 -132
  36. basilisk/mesh/model.py +271 -271
  37. basilisk/mesh/narrow_aabb.py +89 -89
  38. basilisk/mesh/narrow_bvh.py +91 -91
  39. basilisk/mesh/narrow_primative.py +23 -23
  40. basilisk/nodes/helper.py +29 -0
  41. basilisk/nodes/node.py +681 -617
  42. basilisk/nodes/node_handler.py +95 -118
  43. basilisk/particles/particle_handler.py +63 -54
  44. basilisk/particles/particle_renderer.py +87 -87
  45. basilisk/physics/impulse.py +112 -112
  46. basilisk/physics/physics_body.py +43 -43
  47. basilisk/physics/physics_engine.py +35 -35
  48. basilisk/render/batch.py +86 -86
  49. basilisk/render/camera.py +204 -199
  50. basilisk/render/chunk.py +99 -99
  51. basilisk/render/chunk_handler.py +154 -154
  52. basilisk/render/frame.py +181 -181
  53. basilisk/render/image.py +75 -75
  54. basilisk/render/image_handler.py +122 -122
  55. basilisk/render/light.py +96 -96
  56. basilisk/render/light_handler.py +58 -58
  57. basilisk/render/material.py +219 -219
  58. basilisk/render/material_handler.py +135 -135
  59. basilisk/render/shader.py +109 -109
  60. basilisk/render/shader_handler.py +79 -79
  61. basilisk/render/sky.py +120 -120
  62. basilisk/scene.py +250 -210
  63. basilisk/shaders/batch.frag +276 -276
  64. basilisk/shaders/batch.vert +115 -115
  65. basilisk/shaders/draw.frag +21 -21
  66. basilisk/shaders/draw.vert +21 -21
  67. basilisk/shaders/filter.frag +22 -22
  68. basilisk/shaders/frame.frag +12 -12
  69. basilisk/shaders/frame.vert +13 -13
  70. basilisk/shaders/geometry.frag +8 -8
  71. basilisk/shaders/geometry.vert +41 -41
  72. basilisk/shaders/normal.frag +59 -59
  73. basilisk/shaders/normal.vert +96 -96
  74. basilisk/shaders/particle.frag +71 -71
  75. basilisk/shaders/particle.vert +84 -84
  76. basilisk/shaders/sky.frag +9 -9
  77. basilisk/shaders/sky.vert +13 -13
  78. {basilisk_engine-0.1.2.dist-info → basilisk_engine-0.1.3.dist-info}/METADATA +45 -38
  79. basilisk_engine-0.1.3.dist-info/RECORD +97 -0
  80. {basilisk_engine-0.1.2.dist-info → basilisk_engine-0.1.3.dist-info}/WHEEL +1 -1
  81. basilisk_engine-0.1.2.dist-info/RECORD +0 -95
  82. {basilisk_engine-0.1.2.dist-info → basilisk_engine-0.1.3.dist-info}/top_level.txt +0 -0
@@ -1,133 +1,133 @@
1
- import numpy as np
2
- from .model import Model
3
- import glm
4
-
5
- def from_data(data: np.ndarray) -> Model:
6
- """
7
- Converts data given to a format compatable with basilisk models
8
- """
9
-
10
- # Create an empty model
11
- model = Model()
12
- # Get the shape of the given data
13
-
14
- # Get the shape of the given data and check for a valid shape
15
- shape = data.shape
16
- if len(shape) == 2: pass
17
- elif len(shape) == 3: data = np.reshape(data, (shape[0] * 3, shape[1] * shape[2] // 3)); shape = data.shape
18
- else: raise ValueError(f"Could not find valid format for the given model data of shape {shape}")
19
-
20
- # Data to be retraived/generated
21
- positions = None
22
- uvs = None
23
- normals = None
24
- tangents = None
25
-
26
- if shape[1] == 3: # Just given position
27
- positions = data[:,:]
28
- uvs = get_uvs(positions)
29
- normals = get_normals(positions)
30
- tangents = get_tangents(normals)
31
-
32
- elif shape[1] == 5: # Given position and uv, but no normals
33
- positions = data[:,:3]
34
- uvs = data[:,3:5]
35
- normals = get_normals(positions)
36
- tangents = get_tangents(normals)
37
-
38
- elif shape[1] == 6: # Given position and normals, but no UV
39
- positions = data[:,:3]
40
- uvs = get_uvs(positions)
41
- normals = data[:,3:6]
42
- tangents = get_tangents(normals)
43
-
44
- elif shape[1] == 8: # Given position, normals and UV
45
- positions = data[:,:3]
46
- uvs = data[:,3:5]
47
- normals = data[:,5:8]
48
- tangents = get_tangents(normals)
49
-
50
- elif shape[1] == 14: #Given position, normals, UV, bitangents, and tangents, no change needed
51
- positions = data[:,:3]
52
- uvs = data[:,3:5]
53
- normals = data[:,5:8]
54
- tangents = data[:,8:14]
55
-
56
- else:
57
- raise ValueError(f"Could not find valid format for the given model data of shape {shape}")
58
-
59
- model.vertex_data = np.zeros(shape=(shape[0], 14))
60
- model.vertex_data[:,:3] = positions
61
- model.vertex_data[:,3:5] = uvs
62
- model.vertex_data[:,5:8] = normals
63
- model.vertex_data[:,8:14] = tangents
64
- model.vertex_points, model.point_indices = get_points_and_indices(positions)
65
-
66
- print(model.vertex_points, model.point_indices)
67
-
68
- return model
69
-
70
-
71
- def get_normals(positions: np.ndarray) -> np.ndarray:
72
- """
73
- Gets the normals from the position data
74
- Returns a numpy array
75
- """
76
-
77
- # Create empty array for the normals
78
- normals = np.zeros(shape=positions.shape, dtype='f4')
79
-
80
- # Loop through each triangle and calculate the normal of the surface
81
- for tri in range(positions.shape[0] // 3):
82
- v1 = glm.vec3(positions[tri * 3]) - glm.vec3(positions[tri * 3 + 1])
83
- v2 = glm.vec3(positions[tri * 3]) - glm.vec3(positions[tri * 3 + 2])
84
- normal = glm.normalize(glm.cross(v1, v2))
85
- normals[tri * 3 ] = list(normal.xyz)
86
- normals[tri * 3 + 1] = list(normal.xyz)
87
- normals[tri * 3 + 2] = list(normal.xyz)
88
-
89
- return normals
90
-
91
- def get_uvs(positions: np.ndarray) -> np.ndarray:
92
- """
93
- Gets the uvs from the position array.
94
- Currently assigns each triangle arbitrarily, since there is no standard
95
- """
96
- uvs = np.array([*[[0, 0], [0, 1], [1, 0]] * (positions.shape[0]//3)])
97
- return uvs
98
-
99
- def get_tangents(normals: np.array):
100
- """
101
- Gets the uvs from the normal array.
102
- Currently just fills with arbitrary data, since there is no standard
103
- """
104
-
105
- # Get linearly independent vectors
106
- tangent = np.cross(normals, [1, 1, 0])
107
- bitangent = np.cross(normals, tangent)
108
-
109
- # Combine to a single array
110
- all_tangents = np.hstack([tangent, bitangent], dtype='f4')
111
-
112
- return all_tangents
113
-
114
-
115
- def get_points_and_indices(positions: np.ndarray) -> tuple[np.ndarray]:
116
- """
117
- Gets the unique points and indices from the position data.
118
- Returns a tuple of numpy arrays: (points, indices)
119
- """
120
-
121
- points = {}
122
- indices = [[] for i in range(len(positions) // 3)]
123
-
124
- for i, point in enumerate(positions):
125
- point = tuple(point)
126
- if point not in points: points[point] = []
127
- points[point].append(i // 3)
128
-
129
- for i, index_mapping in enumerate(points.values()):
130
- for triangle in index_mapping:
131
- indices[triangle].append(i)
132
-
1
+ import numpy as np
2
+ from .model import Model
3
+ import glm
4
+
5
+ def from_data(data: np.ndarray) -> Model:
6
+ """
7
+ Converts data given to a format compatable with basilisk models
8
+ """
9
+
10
+ # Create an empty model
11
+ model = Model()
12
+ # Get the shape of the given data
13
+
14
+ # Get the shape of the given data and check for a valid shape
15
+ shape = data.shape
16
+ if len(shape) == 2: pass
17
+ elif len(shape) == 3: data = np.reshape(data, (shape[0] * 3, shape[1] * shape[2] // 3)); shape = data.shape
18
+ else: raise ValueError(f"Could not find valid format for the given model data of shape {shape}")
19
+
20
+ # Data to be retraived/generated
21
+ positions = None
22
+ uvs = None
23
+ normals = None
24
+ tangents = None
25
+
26
+ if shape[1] == 3: # Just given position
27
+ positions = data[:,:]
28
+ uvs = get_uvs(positions)
29
+ normals = get_normals(positions)
30
+ tangents = get_tangents(normals)
31
+
32
+ elif shape[1] == 5: # Given position and uv, but no normals
33
+ positions = data[:,:3]
34
+ uvs = data[:,3:5]
35
+ normals = get_normals(positions)
36
+ tangents = get_tangents(normals)
37
+
38
+ elif shape[1] == 6: # Given position and normals, but no UV
39
+ positions = data[:,:3]
40
+ uvs = get_uvs(positions)
41
+ normals = data[:,3:6]
42
+ tangents = get_tangents(normals)
43
+
44
+ elif shape[1] == 8: # Given position, normals and UV
45
+ positions = data[:,:3]
46
+ uvs = data[:,3:5]
47
+ normals = data[:,5:8]
48
+ tangents = get_tangents(normals)
49
+
50
+ elif shape[1] == 14: #Given position, normals, UV, bitangents, and tangents, no change needed
51
+ positions = data[:,:3]
52
+ uvs = data[:,3:5]
53
+ normals = data[:,5:8]
54
+ tangents = data[:,8:14]
55
+
56
+ else:
57
+ raise ValueError(f"Could not find valid format for the given model data of shape {shape}")
58
+
59
+ model.vertex_data = np.zeros(shape=(shape[0], 14))
60
+ model.vertex_data[:,:3] = positions
61
+ model.vertex_data[:,3:5] = uvs
62
+ model.vertex_data[:,5:8] = normals
63
+ model.vertex_data[:,8:14] = tangents
64
+ model.vertex_points, model.point_indices = get_points_and_indices(positions)
65
+
66
+ print(model.vertex_points, model.point_indices)
67
+
68
+ return model
69
+
70
+
71
+ def get_normals(positions: np.ndarray) -> np.ndarray:
72
+ """
73
+ Gets the normals from the position data
74
+ Returns a numpy array
75
+ """
76
+
77
+ # Create empty array for the normals
78
+ normals = np.zeros(shape=positions.shape, dtype='f4')
79
+
80
+ # Loop through each triangle and calculate the normal of the surface
81
+ for tri in range(positions.shape[0] // 3):
82
+ v1 = glm.vec3(positions[tri * 3]) - glm.vec3(positions[tri * 3 + 1])
83
+ v2 = glm.vec3(positions[tri * 3]) - glm.vec3(positions[tri * 3 + 2])
84
+ normal = glm.normalize(glm.cross(v1, v2))
85
+ normals[tri * 3 ] = list(normal.xyz)
86
+ normals[tri * 3 + 1] = list(normal.xyz)
87
+ normals[tri * 3 + 2] = list(normal.xyz)
88
+
89
+ return normals
90
+
91
+ def get_uvs(positions: np.ndarray) -> np.ndarray:
92
+ """
93
+ Gets the uvs from the position array.
94
+ Currently assigns each triangle arbitrarily, since there is no standard
95
+ """
96
+ uvs = np.array([*[[0, 0], [0, 1], [1, 0]] * (positions.shape[0]//3)])
97
+ return uvs
98
+
99
+ def get_tangents(normals: np.array):
100
+ """
101
+ Gets the uvs from the normal array.
102
+ Currently just fills with arbitrary data, since there is no standard
103
+ """
104
+
105
+ # Get linearly independent vectors
106
+ tangent = np.cross(normals, [1, 1, 0])
107
+ bitangent = np.cross(normals, tangent)
108
+
109
+ # Combine to a single array
110
+ all_tangents = np.hstack([tangent, bitangent], dtype='f4')
111
+
112
+ return all_tangents
113
+
114
+
115
+ def get_points_and_indices(positions: np.ndarray) -> tuple[np.ndarray]:
116
+ """
117
+ Gets the unique points and indices from the position data.
118
+ Returns a tuple of numpy arrays: (points, indices)
119
+ """
120
+
121
+ points = {}
122
+ indices = [[] for i in range(len(positions) // 3)]
123
+
124
+ for i, point in enumerate(positions):
125
+ point = tuple(point)
126
+ if point not in points: points[point] = []
127
+ points[point].append(i // 3)
128
+
129
+ for i, index_mapping in enumerate(points.values()):
130
+ for triangle in index_mapping:
131
+ indices[triangle].append(i)
132
+
133
133
  return np.array(list(points.keys()), dtype='f4'), np.array(indices, dtype='i')