basilisk-engine 0.1.6__py3-none-any.whl → 0.1.7__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 (86) hide show
  1. basilisk/__init__.py +14 -13
  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 -95
  6. basilisk/collisions/collider_handler.py +224 -224
  7. basilisk/collisions/narrow/contact_manifold.py +95 -95
  8. basilisk/collisions/narrow/dataclasses.py +34 -34
  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 +179 -179
  19. basilisk/draw/font_renderer.py +28 -28
  20. basilisk/engine.py +202 -200
  21. basilisk/generic/abstract_bvh.py +15 -15
  22. basilisk/generic/abstract_custom.py +133 -133
  23. basilisk/generic/collisions.py +72 -72
  24. basilisk/generic/input_validation.py +66 -66
  25. basilisk/generic/math.py +6 -6
  26. basilisk/generic/matrices.py +35 -35
  27. basilisk/generic/meshes.py +72 -72
  28. basilisk/generic/quat.py +142 -142
  29. basilisk/generic/quat_methods.py +7 -7
  30. basilisk/generic/raycast_result.py +23 -23
  31. basilisk/generic/vec3.py +143 -143
  32. basilisk/input/mouse.py +61 -61
  33. basilisk/input/path.py +14 -14
  34. basilisk/mesh/cube.py +33 -33
  35. basilisk/mesh/mesh.py +230 -230
  36. basilisk/mesh/mesh_from_data.py +130 -130
  37. basilisk/mesh/model.py +271 -271
  38. basilisk/mesh/narrow_aabb.py +89 -89
  39. basilisk/mesh/narrow_bvh.py +91 -91
  40. basilisk/mesh/narrow_primative.py +23 -23
  41. basilisk/nodes/helper.py +28 -28
  42. basilisk/nodes/node.py +682 -682
  43. basilisk/nodes/node_handler.py +95 -95
  44. basilisk/particles/particle_handler.py +63 -63
  45. basilisk/particles/particle_renderer.py +87 -87
  46. basilisk/physics/impulse.py +112 -112
  47. basilisk/physics/physics_body.py +43 -43
  48. basilisk/physics/physics_engine.py +35 -35
  49. basilisk/render/batch.py +86 -86
  50. basilisk/render/camera.py +206 -206
  51. basilisk/render/chunk.py +99 -99
  52. basilisk/render/chunk_handler.py +154 -154
  53. basilisk/render/frame.py +101 -99
  54. basilisk/render/framebuffer.py +130 -105
  55. basilisk/render/image.py +87 -87
  56. basilisk/render/image_handler.py +122 -122
  57. basilisk/render/light.py +96 -96
  58. basilisk/render/light_handler.py +58 -58
  59. basilisk/render/material.py +219 -219
  60. basilisk/render/material_handler.py +135 -135
  61. basilisk/render/post_process.py +132 -132
  62. basilisk/render/shader.py +109 -109
  63. basilisk/render/shader_handler.py +79 -79
  64. basilisk/render/sky.py +120 -120
  65. basilisk/scene.py +264 -256
  66. basilisk/shaders/batch.frag +276 -276
  67. basilisk/shaders/batch.vert +115 -115
  68. basilisk/shaders/crt.frag +31 -31
  69. basilisk/shaders/draw.frag +21 -21
  70. basilisk/shaders/draw.vert +21 -21
  71. basilisk/shaders/filter.frag +22 -22
  72. basilisk/shaders/frame.frag +12 -12
  73. basilisk/shaders/frame.vert +13 -13
  74. basilisk/shaders/geometry.frag +8 -8
  75. basilisk/shaders/geometry.vert +41 -41
  76. basilisk/shaders/normal.frag +59 -59
  77. basilisk/shaders/normal.vert +96 -96
  78. basilisk/shaders/particle.frag +71 -71
  79. basilisk/shaders/particle.vert +84 -84
  80. basilisk/shaders/sky.frag +9 -9
  81. basilisk/shaders/sky.vert +13 -13
  82. {basilisk_engine-0.1.6.dist-info → basilisk_engine-0.1.7.dist-info}/METADATA +39 -45
  83. basilisk_engine-0.1.7.dist-info/RECORD +101 -0
  84. {basilisk_engine-0.1.6.dist-info → basilisk_engine-0.1.7.dist-info}/WHEEL +1 -1
  85. basilisk_engine-0.1.6.dist-info/RECORD +0 -101
  86. {basilisk_engine-0.1.6.dist-info → basilisk_engine-0.1.7.dist-info}/top_level.txt +0 -0
@@ -1,131 +1,131 @@
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
- return model
67
-
68
-
69
- def get_normals(positions: np.ndarray) -> np.ndarray:
70
- """
71
- Gets the normals from the position data
72
- Returns a numpy array
73
- """
74
-
75
- # Create empty array for the normals
76
- normals = np.zeros(shape=positions.shape, dtype='f4')
77
-
78
- # Loop through each triangle and calculate the normal of the surface
79
- for tri in range(positions.shape[0] // 3):
80
- v1 = glm.vec3(positions[tri * 3]) - glm.vec3(positions[tri * 3 + 1])
81
- v2 = glm.vec3(positions[tri * 3]) - glm.vec3(positions[tri * 3 + 2])
82
- normal = glm.normalize(glm.cross(v1, v2))
83
- normals[tri * 3 ] = list(normal.xyz)
84
- normals[tri * 3 + 1] = list(normal.xyz)
85
- normals[tri * 3 + 2] = list(normal.xyz)
86
-
87
- return normals
88
-
89
- def get_uvs(positions: np.ndarray) -> np.ndarray:
90
- """
91
- Gets the uvs from the position array.
92
- Currently assigns each triangle arbitrarily, since there is no standard
93
- """
94
- uvs = np.array([*[[0, 0], [0, 1], [1, 0]] * (positions.shape[0]//3)])
95
- return uvs
96
-
97
- def get_tangents(normals: np.array):
98
- """
99
- Gets the uvs from the normal array.
100
- Currently just fills with arbitrary data, since there is no standard
101
- """
102
-
103
- # Get linearly independent vectors
104
- tangent = np.cross(normals, [1, 1, 0])
105
- bitangent = np.cross(normals, tangent)
106
-
107
- # Combine to a single array
108
- all_tangents = np.hstack([tangent, bitangent], dtype='f4')
109
-
110
- return all_tangents
111
-
112
-
113
- def get_points_and_indices(positions: np.ndarray) -> tuple[np.ndarray]:
114
- """
115
- Gets the unique points and indices from the position data.
116
- Returns a tuple of numpy arrays: (points, indices)
117
- """
118
-
119
- points = {}
120
- indices = [[] for i in range(len(positions) // 3)]
121
-
122
- for i, point in enumerate(positions):
123
- point = tuple(point)
124
- if point not in points: points[point] = []
125
- points[point].append(i // 3)
126
-
127
- for i, index_mapping in enumerate(points.values()):
128
- for triangle in index_mapping:
129
- indices[triangle].append(i)
130
-
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
+ return model
67
+
68
+
69
+ def get_normals(positions: np.ndarray) -> np.ndarray:
70
+ """
71
+ Gets the normals from the position data
72
+ Returns a numpy array
73
+ """
74
+
75
+ # Create empty array for the normals
76
+ normals = np.zeros(shape=positions.shape, dtype='f4')
77
+
78
+ # Loop through each triangle and calculate the normal of the surface
79
+ for tri in range(positions.shape[0] // 3):
80
+ v1 = glm.vec3(positions[tri * 3]) - glm.vec3(positions[tri * 3 + 1])
81
+ v2 = glm.vec3(positions[tri * 3]) - glm.vec3(positions[tri * 3 + 2])
82
+ normal = glm.normalize(glm.cross(v1, v2))
83
+ normals[tri * 3 ] = list(normal.xyz)
84
+ normals[tri * 3 + 1] = list(normal.xyz)
85
+ normals[tri * 3 + 2] = list(normal.xyz)
86
+
87
+ return normals
88
+
89
+ def get_uvs(positions: np.ndarray) -> np.ndarray:
90
+ """
91
+ Gets the uvs from the position array.
92
+ Currently assigns each triangle arbitrarily, since there is no standard
93
+ """
94
+ uvs = np.array([*[[0, 0], [0, 1], [1, 0]] * (positions.shape[0]//3)])
95
+ return uvs
96
+
97
+ def get_tangents(normals: np.array):
98
+ """
99
+ Gets the uvs from the normal array.
100
+ Currently just fills with arbitrary data, since there is no standard
101
+ """
102
+
103
+ # Get linearly independent vectors
104
+ tangent = np.cross(normals, [1, 1, 0])
105
+ bitangent = np.cross(normals, tangent)
106
+
107
+ # Combine to a single array
108
+ all_tangents = np.hstack([tangent, bitangent], dtype='f4')
109
+
110
+ return all_tangents
111
+
112
+
113
+ def get_points_and_indices(positions: np.ndarray) -> tuple[np.ndarray]:
114
+ """
115
+ Gets the unique points and indices from the position data.
116
+ Returns a tuple of numpy arrays: (points, indices)
117
+ """
118
+
119
+ points = {}
120
+ indices = [[] for i in range(len(positions) // 3)]
121
+
122
+ for i, point in enumerate(positions):
123
+ point = tuple(point)
124
+ if point not in points: points[point] = []
125
+ points[point].append(i // 3)
126
+
127
+ for i, index_mapping in enumerate(points.values()):
128
+ for triangle in index_mapping:
129
+ indices[triangle].append(i)
130
+
131
131
  return np.array(list(points.keys()), dtype='f4'), np.array(indices, dtype='i')