basilisk-engine 0.1.3__py3-none-any.whl → 0.1.5__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 +13 -12
  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 +225 -225
  7. basilisk/collisions/narrow/contact_manifold.py +90 -90
  8. basilisk/collisions/narrow/dataclasses.py +32 -32
  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 +200 -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 +66 -66
  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 +23 -23
  31. basilisk/generic/vec3.py +143 -143
  32. basilisk/input/mouse.py +61 -61
  33. basilisk/input/path.py +14 -0
  34. basilisk/mesh/cube.py +33 -33
  35. basilisk/mesh/mesh.py +230 -230
  36. basilisk/mesh/mesh_from_data.py +130 -132
  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 +680 -680
  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 +204 -204
  51. basilisk/render/chunk.py +99 -99
  52. basilisk/render/chunk_handler.py +154 -154
  53. basilisk/render/frame.py +99 -182
  54. basilisk/render/framebuffer.py +106 -0
  55. basilisk/render/image.py +87 -75
  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 +133 -0
  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 +256 -250
  66. basilisk/shaders/batch.frag +276 -276
  67. basilisk/shaders/batch.vert +115 -115
  68. basilisk/shaders/crt.frag +32 -0
  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.3.dist-info → basilisk_engine-0.1.5.dist-info}/METADATA +38 -45
  83. basilisk_engine-0.1.5.dist-info/RECORD +101 -0
  84. {basilisk_engine-0.1.3.dist-info → basilisk_engine-0.1.5.dist-info}/WHEEL +1 -1
  85. basilisk_engine-0.1.3.dist-info/RECORD +0 -97
  86. {basilisk_engine-0.1.3.dist-info → basilisk_engine-0.1.5.dist-info}/top_level.txt +0 -0
@@ -1,133 +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
- 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
+ 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
+
133
131
  return np.array(list(points.keys()), dtype='f4'), np.array(indices, dtype='i')