basilisk-engine 0.1.24__tar.gz → 0.1.26__tar.gz

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.
Files changed (149) hide show
  1. {basilisk_engine-0.1.24/basilisk_engine.egg-info → basilisk_engine-0.1.26}/PKG-INFO +1 -1
  2. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/basilisk/mesh/mesh.py +5 -2
  3. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/basilisk/mesh/mesh_from_data.py +23 -3
  4. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/basilisk/nodes/node.py +7 -4
  5. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/basilisk/render/batch.py +8 -10
  6. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/basilisk/render/camera.py +11 -8
  7. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/basilisk/render/chunk.py +5 -5
  8. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/basilisk/render/shader.py +12 -3
  9. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26/basilisk_engine.egg-info}/PKG-INFO +1 -1
  10. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/basilisk_engine.egg-info/SOURCES.txt +3 -1
  11. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/setup.py +1 -1
  12. basilisk_engine-0.1.26/tests/shaders/custom_format.frag +10 -0
  13. basilisk_engine-0.1.26/tests/shaders/custom_format.vert +55 -0
  14. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/MANIFEST.in +0 -0
  15. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/README.md +0 -0
  16. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/basilisk/__init__.py +0 -0
  17. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/basilisk/audio/__init__.py +0 -0
  18. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/basilisk/audio/sound.py +0 -0
  19. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/basilisk/bsk_assets/Roboto-Regular.ttf +0 -0
  20. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/basilisk/bsk_assets/__init__.py +0 -0
  21. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/basilisk/bsk_assets/basilisk.png +0 -0
  22. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/basilisk/bsk_assets/cube.obj +0 -0
  23. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/basilisk/bsk_assets/skybox.png +0 -0
  24. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/basilisk/collisions/__init__.py +0 -0
  25. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/basilisk/collisions/broad/__init__.py +0 -0
  26. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/basilisk/collisions/broad/broad_aabb.py +0 -0
  27. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/basilisk/collisions/broad/broad_bvh.py +0 -0
  28. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/basilisk/collisions/collider.py +0 -0
  29. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/basilisk/collisions/collider_handler.py +0 -0
  30. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/basilisk/collisions/narrow/__init__.py +0 -0
  31. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/basilisk/collisions/narrow/contact_manifold.py +0 -0
  32. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/basilisk/collisions/narrow/dataclasses.py +0 -0
  33. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/basilisk/collisions/narrow/deprecated.py +0 -0
  34. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/basilisk/collisions/narrow/epa.py +0 -0
  35. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/basilisk/collisions/narrow/gjk.py +0 -0
  36. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/basilisk/collisions/narrow/graham_scan.py +0 -0
  37. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/basilisk/collisions/narrow/helper.py +0 -0
  38. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/basilisk/collisions/narrow/line_intersections.py +0 -0
  39. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/basilisk/collisions/narrow/sutherland_hodgman.py +0 -0
  40. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/basilisk/config.py +0 -0
  41. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/basilisk/draw/__init__.py +0 -0
  42. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/basilisk/draw/draw.py +0 -0
  43. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/basilisk/draw/draw_handler.py +0 -0
  44. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/basilisk/draw/font_renderer.py +0 -0
  45. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/basilisk/engine.py +0 -0
  46. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/basilisk/generic/__init__.py +0 -0
  47. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/basilisk/generic/abstract_bvh.py +0 -0
  48. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/basilisk/generic/abstract_custom.py +0 -0
  49. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/basilisk/generic/collisions.py +0 -0
  50. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/basilisk/generic/input_validation.py +0 -0
  51. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/basilisk/generic/math.py +0 -0
  52. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/basilisk/generic/matrices.py +0 -0
  53. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/basilisk/generic/meshes.py +0 -0
  54. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/basilisk/generic/quat.py +0 -0
  55. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/basilisk/generic/quat_methods.py +0 -0
  56. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/basilisk/generic/raycast_result.py +0 -0
  57. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/basilisk/generic/vec3.py +0 -0
  58. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/basilisk/input_output/IO_handler.py +0 -0
  59. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/basilisk/input_output/__init__.py +0 -0
  60. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/basilisk/input_output/clock.py +0 -0
  61. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/basilisk/input_output/keys.py +0 -0
  62. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/basilisk/input_output/mouse.py +0 -0
  63. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/basilisk/input_output/path.py +0 -0
  64. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/basilisk/mesh/__init__.py +0 -0
  65. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/basilisk/mesh/cube.py +0 -0
  66. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/basilisk/mesh/model.py +0 -0
  67. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/basilisk/mesh/narrow_aabb.py +0 -0
  68. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/basilisk/mesh/narrow_bvh.py +0 -0
  69. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/basilisk/mesh/narrow_primative.py +0 -0
  70. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/basilisk/nodes/__init__.py +0 -0
  71. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/basilisk/nodes/helper.py +0 -0
  72. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/basilisk/nodes/node_handler.py +0 -0
  73. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/basilisk/particles/__init__.py +0 -0
  74. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/basilisk/particles/particle_handler.py +0 -0
  75. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/basilisk/particles/particle_renderer.py +0 -0
  76. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/basilisk/physics/__init__.py +0 -0
  77. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/basilisk/physics/impulse.py +0 -0
  78. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/basilisk/physics/physics_body.py +0 -0
  79. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/basilisk/physics/physics_engine.py +0 -0
  80. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/basilisk/render/__init__.py +0 -0
  81. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/basilisk/render/chunk_handler.py +0 -0
  82. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/basilisk/render/frame.py +0 -0
  83. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/basilisk/render/framebuffer.py +0 -0
  84. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/basilisk/render/image.py +0 -0
  85. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/basilisk/render/image_handler.py +0 -0
  86. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/basilisk/render/light.py +0 -0
  87. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/basilisk/render/light_handler.py +0 -0
  88. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/basilisk/render/material.py +0 -0
  89. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/basilisk/render/material_handler.py +0 -0
  90. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/basilisk/render/post_process.py +0 -0
  91. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/basilisk/render/shader_handler.py +0 -0
  92. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/basilisk/render/sky.py +0 -0
  93. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/basilisk/scene.py +0 -0
  94. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/basilisk/shaders/__init__.py +0 -0
  95. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/basilisk/shaders/batch.frag +0 -0
  96. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/basilisk/shaders/batch.vert +0 -0
  97. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/basilisk/shaders/crt.frag +0 -0
  98. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/basilisk/shaders/draw.frag +0 -0
  99. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/basilisk/shaders/draw.vert +0 -0
  100. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/basilisk/shaders/filter.frag +0 -0
  101. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/basilisk/shaders/frame.frag +0 -0
  102. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/basilisk/shaders/frame.vert +0 -0
  103. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/basilisk/shaders/geometry.frag +0 -0
  104. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/basilisk/shaders/geometry.vert +0 -0
  105. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/basilisk/shaders/normal.frag +0 -0
  106. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/basilisk/shaders/normal.vert +0 -0
  107. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/basilisk/shaders/particle.frag +0 -0
  108. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/basilisk/shaders/particle.vert +0 -0
  109. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/basilisk/shaders/sky.frag +0 -0
  110. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/basilisk/shaders/sky.vert +0 -0
  111. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/basilisk_engine.egg-info/dependency_links.txt +0 -0
  112. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/basilisk_engine.egg-info/requires.txt +0 -0
  113. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/basilisk_engine.egg-info/top_level.txt +0 -0
  114. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/docs/images/0_boilerplate.png +0 -0
  115. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/images/cloth.png +0 -0
  116. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/images/floor.png +0 -0
  117. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/images/foil.png +0 -0
  118. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/images/mud.png +0 -0
  119. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/setup.cfg +0 -0
  120. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/tests/SkySkybox.png +0 -0
  121. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/tests/brick.png +0 -0
  122. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/tests/brick_normal.png +0 -0
  123. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/tests/bunny.obj +0 -0
  124. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/tests/closet_001.obj +0 -0
  125. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/tests/cloth_albedo.png +0 -0
  126. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/tests/cloth_normal.png +0 -0
  127. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/tests/cube.obj +0 -0
  128. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/tests/cubemaps_skybox.png +0 -0
  129. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/tests/cylinder.obj +0 -0
  130. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/tests/demo_sphere.obj +0 -0
  131. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/tests/dirt.png +0 -0
  132. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/tests/floor_albedo.png +0 -0
  133. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/tests/floor_normal.png +0 -0
  134. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/tests/foil_normal.png +0 -0
  135. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/tests/fridge_001.obj +0 -0
  136. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/tests/grass.jpg +0 -0
  137. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/tests/grass_ao.jpg +0 -0
  138. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/tests/grass_block_side.png +0 -0
  139. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/tests/grass_block_top.png +0 -0
  140. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/tests/grass_normal.png +0 -0
  141. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/tests/grass_roughness.jpg +0 -0
  142. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/tests/image.png +0 -0
  143. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/tests/lucy.obj +0 -0
  144. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/tests/monkey.obj +0 -0
  145. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/tests/mud.png +0 -0
  146. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/tests/mud_normal.png +0 -0
  147. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/tests/oak_tree.obj +0 -0
  148. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/tests/skybox.png +0 -0
  149. {basilisk_engine-0.1.24 → basilisk_engine-0.1.26}/tests/sphere.obj +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: basilisk-engine
3
- Version: 0.1.24
3
+ Version: 0.1.26
4
4
  Summary: Python 3D Framework
5
5
  Home-page: https://basilisk-website.vercel.app/
6
6
  Author: Name
@@ -30,12 +30,14 @@ class Mesh():
30
30
  bvh: NarrowBVH
31
31
  """BVH for accessing triangle intersections with a line"""
32
32
 
33
- def __init__(self, data: str | os.PathLike | np.ndarray) -> None:
33
+ def __init__(self, data: str | os.PathLike | np.ndarray, custom_format:bool=False) -> None:
34
34
  """
35
35
  Mesh object containing all the data needed to render an object and perform physics/collisions on it
36
36
  Args:
37
37
  data: str
38
38
  path to the .obj file of the model or an array of the mesh data
39
+ custom_format: bool
40
+ makes expected changes to the given data if false. Leaves data as given if true
39
41
  """
40
42
 
41
43
  # Verify the path type
@@ -59,7 +61,7 @@ class Mesh():
59
61
  self.data = np.hstack([self.data, tangents])
60
62
 
61
63
  elif isinstance(data, np.ndarray):
62
- model = from_data(data)
64
+ model = from_data(data, custom_format)
63
65
  self.data = model.vertex_data
64
66
 
65
67
  else: # Invalid data type
@@ -70,6 +72,7 @@ class Mesh():
70
72
  self.indices = model.point_indices.copy()
71
73
 
72
74
  self.hash = hash(str(self.data))
75
+ self.custom = custom_format
73
76
 
74
77
  # generate edges from faces
75
78
  edges = [set() for _ in range(len(self.points))]
@@ -2,14 +2,20 @@ import numpy as np
2
2
  from .model import Model
3
3
  import glm
4
4
 
5
- def from_data(data: np.ndarray) -> Model:
5
+ def from_data(data: np.ndarray, custom_format:bool=False) -> Model:
6
6
  """
7
7
  Converts data given to a format compatable with basilisk models
8
+ Args:
9
+ data: np.ndarray
10
+ array of the mesh data
11
+ custom_format: bool
12
+ makes expected changes to the given data if false. Leaves data as given if true
8
13
  """
9
14
 
15
+ if custom_format: return format_raw(data)
16
+
10
17
  # Create an empty model
11
18
  model = Model()
12
- # Get the shape of the given data
13
19
 
14
20
  # Get the shape of the given data and check for a valid shape
15
21
  shape = data.shape
@@ -128,4 +134,18 @@ def get_points_and_indices(positions: np.ndarray) -> tuple[np.ndarray]:
128
134
  for triangle in index_mapping:
129
135
  indices[triangle].append(i)
130
136
 
131
- return np.array(list(points.keys()), dtype='f4'), np.array(indices, dtype='i')
137
+ return np.array(list(points.keys()), dtype='f4'), np.array(indices, dtype='i')
138
+
139
+ def format_raw(data: np.ndarray) -> np.ndarray:
140
+ # Create an empty model
141
+ model = Model()
142
+
143
+ # Get the needed data (assume position is in the first three positions)
144
+ model.vertex_data = np.array(data, dtype='f4')
145
+ if model.vertex_data.shape[1] >= 3:
146
+ model.vertex_points, model.point_indices = get_points_and_indices(model.vertex_data[:,:3])
147
+ else:
148
+ model.vertex_points = np.zeros(shape=(1, model.vertex_data.shape[1]))
149
+ model.point_indices = np.zeros(shape=(1, 3))
150
+
151
+ return model
@@ -371,13 +371,16 @@ class Node():
371
371
  if not per_vertex_mtl: node_data[-1] = self.material.index
372
372
 
373
373
  # Create an array to hold the node's data
374
- data = np.zeros(shape=(mesh_data.shape[0], 25), dtype='f4')
374
+ width = 25 if not self.mesh.custom else 11 + mesh_data.shape[1]
375
+ data = np.zeros(shape=(mesh_data.shape[0], width), dtype='f4')
375
376
 
376
377
 
377
- data[:,:14] = mesh_data
378
- data[:,14:] = node_data
378
+ data[:,:mesh_data.shape[1]] = mesh_data
379
+ data[:,mesh_data.shape[1]:] = node_data
379
380
 
380
- if per_vertex_mtl: data[:,24] = self.material
381
+ if per_vertex_mtl: data[:,-1] = self.material
382
+
383
+ if self.shader and not self.mesh.custom: data = np.take(data, self.shader.attribute_indices, axis=1)
381
384
 
382
385
  return data
383
386
 
@@ -1,14 +1,14 @@
1
1
  import numpy as np
2
2
  import moderngl as mgl
3
-
3
+ from .shader import Shader
4
4
 
5
5
  class Batch():
6
6
  chunk: ...
7
7
  """Reference to the parent chunk of the batch"""
8
8
  ctx: mgl.Context
9
9
  """Reference to the context of the parent engine"""
10
- program: mgl.Program
11
- """Reference to the program used by batches"""
10
+ shader: Shader
11
+ """Reference to the bsk.Shader used by batches"""
12
12
  vao: mgl.VertexArray
13
13
  """The vertex array of the batch. Used for rendering"""
14
14
  vbo: mgl.Buffer
@@ -23,7 +23,7 @@ class Batch():
23
23
  # Back references
24
24
  self.chunk = chunk
25
25
  self.ctx = chunk.chunk_handler.engine.ctx
26
- self.program = self.chunk.get_program()
26
+ self.shader = self.chunk.get_shader()
27
27
 
28
28
  # Set intial values
29
29
  self.vbo = None
@@ -35,7 +35,7 @@ class Batch():
35
35
  Returns True if batch was successful.
36
36
  """
37
37
 
38
- self.program = self.chunk.get_program()
38
+ self.shader = self.chunk.get_shader()
39
39
 
40
40
  # Empty list to contain all vertex data of models in the chunk
41
41
  batch_data = []
@@ -68,11 +68,9 @@ class Batch():
68
68
 
69
69
  # Create the vbo and the vao from mesh data
70
70
  self.vbo = self.ctx.buffer(batch_data)
71
- self.vao = self.ctx.vertex_array(self.program, [(self.vbo,
72
- '3f 2f 3f 3f 3f 3f 4f 3f 1f',
73
- *['in_position', 'in_uv', 'in_normal', 'in_tangent', 'in_bitangent', 'obj_position', 'obj_rotation', 'obj_scale', 'obj_material'])],
74
- skip_errors=True)
75
-
71
+ self.vao = self.ctx.vertex_array(self.shader.program, [(self.vbo, self.shader.fmt, *self.shader.attributes)], skip_errors=True)
72
+
73
+
76
74
  return True
77
75
 
78
76
  def swap_shader(self, shader):
@@ -10,10 +10,6 @@ FOV = 50 # Degrees
10
10
  NEAR = 0.1
11
11
  FAR = 350
12
12
 
13
- # Camera movement constants
14
- SPEED = 10
15
- SENSITIVITY = 0.15/180
16
-
17
13
  class Camera:
18
14
  engine: ...
19
15
  """Back reference to the parent engine"""
@@ -23,8 +19,12 @@ class Camera:
23
19
  """Aspect ratio of the engine window"""
24
20
  position: glm.vec3
25
21
  """Location of the camera (maters)"""
22
+ speed: float
23
+ """The speed that the camera moves in space"""
24
+ sensitivity: float
25
+ """The speed at which the camera turns"""
26
26
 
27
- def __init__(self, position=(0, 0, 20), rotation=(1, 0, 0, 0)) -> None:
27
+ def __init__(self, position=(0, 0, 20), rotation=(1, 0, 0, 0), speed: float=10, sensitivity: float=2) -> None:
28
28
  """
29
29
  Camera object to get view and projection matricies. Movement built in
30
30
  """
@@ -43,6 +43,9 @@ class Camera:
43
43
  self.m_view = self.get_view_matrix()
44
44
  # Projection matrix
45
45
  self.m_proj = self.get_projection_matrix()
46
+ # Movement attributes
47
+ self.speed = speed
48
+ self.sensitivity = sensitivity
46
49
 
47
50
  def update(self) -> None:
48
51
  """
@@ -191,8 +194,8 @@ class FreeCamera(Camera):
191
194
  """
192
195
  rel_x, rel_y = self.engine.mouse.relative
193
196
 
194
- yaw_rotation = glm.angleAxis(SENSITIVITY * rel_x, -self.UP)
195
- pitch_rotation = glm.angleAxis(SENSITIVITY * rel_y, -self.right)
197
+ yaw_rotation = glm.angleAxis(self.sensitivity / 1000 * rel_x, -self.UP)
198
+ pitch_rotation = glm.angleAxis(self.sensitivity / 1000 * rel_y, -self.right)
196
199
  new_rotation = yaw_rotation * pitch_rotation * self.rotation
197
200
 
198
201
  v_new = new_rotation * self.UP
@@ -203,7 +206,7 @@ class FreeCamera(Camera):
203
206
  """
204
207
  Checks for button presses and updates vectors accordingly.
205
208
  """
206
- velocity = (SPEED + self.engine.keys[pg.K_CAPSLOCK] * 10) * self.engine.delta_time
209
+ velocity = (self.speed + self.engine.keys[pg.K_CAPSLOCK] * 10) * self.engine.delta_time
207
210
  keys = self.engine.keys
208
211
  if keys[pg.K_w]:
209
212
  self.position += glm.normalize(glm.vec3(self.forward.x, 0, self.forward.z)) * velocity
@@ -55,7 +55,7 @@ class Chunk():
55
55
  if not self.batch.vbo: return
56
56
 
57
57
  data = node.get_data()
58
- self.batch.vbo.write(data, node.data_index * 25 * 4)
58
+ self.batch.vbo.write(data, node.data_index * data.shape[1] * 4)
59
59
 
60
60
  def add(self, node):
61
61
  """
@@ -79,15 +79,15 @@ class Chunk():
79
79
 
80
80
  return node
81
81
 
82
- def get_program(self):
82
+ def get_shader(self):
83
83
  """
84
- Gets the program of the chunks nodes' shader
84
+ Gets the bsk.Shader of the chunks nodes' shader
85
85
  """
86
86
 
87
87
  shader = self.shader
88
88
 
89
- if shader: return shader.program
90
- return self.chunk_handler.engine.shader.program
89
+ if shader: return shader
90
+ return self.chunk_handler.engine.shader
91
91
 
92
92
  def swap_shader(self, shader):
93
93
  """
@@ -80,10 +80,19 @@ class Shader:
80
80
  if tokens[0] == 'layout' and len(tokens) > 2 and 'in' in line:
81
81
  self.attributes.append(tokens[-1][:-1])
82
82
 
83
- if tokens[-1][:-1] not in attribute_mappings: continue
84
- indices = attribute_mappings[tokens[-1][:-1]]
83
+ # Get the number of flots the attribute takes
84
+ if any(list(map(lambda x: x in tokens, ['float', 'int']))): n = 1
85
+ elif any(list(map(lambda x: x in tokens, ['vec2']))): n = 2
86
+ elif any(list(map(lambda x: x in tokens, ['vec3']))): n = 3
87
+ elif any(list(map(lambda x: x in tokens, ['vec4']))): n = 4
88
+ else: n = 1
89
+ self.fmt += f'{n}f '
90
+
91
+ if tokens[-1][:-1] in attribute_mappings:
92
+ indices = attribute_mappings[tokens[-1][:-1]]
93
+ else:
94
+ indices = [0 for i in range(n)]
85
95
  self.attribute_indices.extend(indices)
86
- self.fmt += f'{len(indices)}f '
87
96
 
88
97
  # Create a program with shaders
89
98
  self.program = self.ctx.program(vertex_shader=self.vertex_shader, fragment_shader=self.fragment_shader)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: basilisk-engine
3
- Version: 0.1.24
3
+ Version: 0.1.26
4
4
  Summary: Python 3D Framework
5
5
  Home-page: https://basilisk-website.vercel.app/
6
6
  Author: Name
@@ -142,4 +142,6 @@ tests/mud.png
142
142
  tests/mud_normal.png
143
143
  tests/oak_tree.obj
144
144
  tests/skybox.png
145
- tests/sphere.obj
145
+ tests/sphere.obj
146
+ tests/shaders/custom_format.frag
147
+ tests/shaders/custom_format.vert
@@ -7,7 +7,7 @@ with open(path.join(working_directory, 'README.md'), encoding='utf-8') as f:
7
7
 
8
8
  setup(
9
9
  name = 'basilisk-engine', # Name of folder containing scripts and __init__
10
- version = '0.1.24',
10
+ version = '0.1.26',
11
11
  url = 'https://basilisk-website.vercel.app/',
12
12
  author = 'Name',
13
13
  author_email = 'basiliskengine@gmail.com',
@@ -0,0 +1,10 @@
1
+ #version 330 core
2
+
3
+ out vec4 fragColor;
4
+
5
+ in vec3 color;
6
+
7
+ void main()
8
+ {
9
+ fragColor = vec4(color, 1.0);
10
+ }
@@ -0,0 +1,55 @@
1
+ #version 330 core
2
+
3
+ layout (location = 0) in vec3 in_position;
4
+ layout (location = 1) in float in_custom_val;
5
+
6
+ layout (location = 2) in vec3 obj_position;
7
+ layout (location = 3) in vec4 obj_rotation;
8
+ layout (location = 4) in vec3 obj_scale;
9
+ layout (location = 5) in float obj_material;
10
+
11
+
12
+ out vec3 color;
13
+
14
+
15
+ // Uniforms
16
+ uniform mat4 projectionMatrix;
17
+ uniform mat4 viewMatrix;
18
+
19
+ // Function to get the model matrix from node position, rotation, and scale
20
+ mat4 getModelMatrix(vec3 pos, vec4 rot, vec3 scl) {
21
+ mat4 translation = mat4(
22
+ 1 , 0 , 0 , 0,
23
+ 0 , 1 , 0 , 0,
24
+ 0 , 0 , 1 , 0,
25
+ pos.x, pos.y, pos.z, 1
26
+ );
27
+ mat4 rotation = mat4(
28
+ 1 - 2 * (rot.z * rot.z + rot.w * rot.w), 2 * (rot.y * rot.z - rot.w * rot.x), 2 * (rot.y * rot.w + rot.z * rot.x), 0,
29
+ 2 * (rot.y * rot.z + rot.w * rot.x), 1 - 2 * (rot.y * rot.y + rot.w * rot.w), 2 * (rot.z * rot.w - rot.y * rot.x), 0,
30
+ 2 * (rot.y * rot.w - rot.z * rot.x), 2 * (rot.z * rot.w + rot.y * rot.x), 1 - 2 * (rot.y * rot.y + rot.z * rot.z), 0,
31
+ 0, 0, 0, 1
32
+ );
33
+ mat4 scale = mat4(
34
+ scl.x, 0 , 0 , 0,
35
+ 0 , scl.y, 0 , 0,
36
+ 0 , 0 , scl.z, 0,
37
+ 0 , 0 , 0 , 1
38
+ );
39
+ return translation * rotation * scale;
40
+ }
41
+
42
+ void main() {
43
+ // Set the model matrix
44
+ mat4 modelMatrix = getModelMatrix(obj_position, obj_rotation, obj_scale);
45
+
46
+ if (round(in_custom_val) == 1) {
47
+ color = vec3(1, 0, 0);
48
+ }
49
+ else {
50
+ color = vec3(0, 1, 0);
51
+ }
52
+
53
+ // Set the fragment position
54
+ gl_Position = projectionMatrix * viewMatrix * modelMatrix * vec4(in_position, 1.0);
55
+ }