ncca-ngl 0.5.0__tar.gz → 0.5.1__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 (105) hide show
  1. {ncca_ngl-0.5.0 → ncca_ngl-0.5.1}/PKG-INFO +1 -1
  2. {ncca_ngl-0.5.0 → ncca_ngl-0.5.1}/pyproject.toml +1 -1
  3. {ncca_ngl-0.5.0 → ncca_ngl-0.5.1}/src/ncca/ngl/__init__.py +2 -1
  4. {ncca_ngl-0.5.0 → ncca_ngl-0.5.1}/src/ncca/ngl/util.py +52 -0
  5. {ncca_ngl-0.5.0 → ncca_ngl-0.5.1}/src/ncca/ngl/vector_base.py +8 -2
  6. {ncca_ngl-0.5.0 → ncca_ngl-0.5.1}/src/ncca/ngl/webgpu/webgpu_constants.py +2 -0
  7. {ncca_ngl-0.5.0 → ncca_ngl-0.5.1}/LICENSE.txt +0 -0
  8. {ncca_ngl-0.5.0 → ncca_ngl-0.5.1}/src/ncca/ngl/.ruff_cache/.gitignore +0 -0
  9. {ncca_ngl-0.5.0 → ncca_ngl-0.5.1}/src/ncca/ngl/.ruff_cache/0.13.0/10564494386971134025 +0 -0
  10. {ncca_ngl-0.5.0 → ncca_ngl-0.5.1}/src/ncca/ngl/.ruff_cache/0.13.0/7783445477288392980 +0 -0
  11. {ncca_ngl-0.5.0 → ncca_ngl-0.5.1}/src/ncca/ngl/.ruff_cache/CACHEDIR.TAG +0 -0
  12. {ncca_ngl-0.5.0 → ncca_ngl-0.5.1}/src/ncca/ngl/PrimData/NGLDebug.log +0 -0
  13. {ncca_ngl-0.5.0 → ncca_ngl-0.5.1}/src/ncca/ngl/PrimData/Primitives.npz +0 -0
  14. {ncca_ngl-0.5.0 → ncca_ngl-0.5.1}/src/ncca/ngl/PrimData/buddah.npy +0 -0
  15. {ncca_ngl-0.5.0 → ncca_ngl-0.5.1}/src/ncca/ngl/PrimData/bunny.npy +0 -0
  16. {ncca_ngl-0.5.0 → ncca_ngl-0.5.1}/src/ncca/ngl/PrimData/cube.npy +0 -0
  17. {ncca_ngl-0.5.0 → ncca_ngl-0.5.1}/src/ncca/ngl/PrimData/dodecahedron.npy +0 -0
  18. {ncca_ngl-0.5.0 → ncca_ngl-0.5.1}/src/ncca/ngl/PrimData/dragon.npy +0 -0
  19. {ncca_ngl-0.5.0 → ncca_ngl-0.5.1}/src/ncca/ngl/PrimData/football.npy +0 -0
  20. {ncca_ngl-0.5.0 → ncca_ngl-0.5.1}/src/ncca/ngl/PrimData/icosahedron.npy +0 -0
  21. {ncca_ngl-0.5.0 → ncca_ngl-0.5.1}/src/ncca/ngl/PrimData/octahedron.npy +0 -0
  22. {ncca_ngl-0.5.0 → ncca_ngl-0.5.1}/src/ncca/ngl/PrimData/pack_arrays.py +0 -0
  23. {ncca_ngl-0.5.0 → ncca_ngl-0.5.1}/src/ncca/ngl/PrimData/teapot.npy +0 -0
  24. {ncca_ngl-0.5.0 → ncca_ngl-0.5.1}/src/ncca/ngl/PrimData/tetrahedron.npy +0 -0
  25. {ncca_ngl-0.5.0 → ncca_ngl-0.5.1}/src/ncca/ngl/PrimData/troll.npy +0 -0
  26. {ncca_ngl-0.5.0 → ncca_ngl-0.5.1}/src/ncca/ngl/abstract_vao.py +0 -0
  27. {ncca_ngl-0.5.0 → ncca_ngl-0.5.1}/src/ncca/ngl/base_mesh.py +0 -0
  28. {ncca_ngl-0.5.0 → ncca_ngl-0.5.1}/src/ncca/ngl/base_mesh.pyi +0 -0
  29. {ncca_ngl-0.5.0 → ncca_ngl-0.5.1}/src/ncca/ngl/bbox.py +0 -0
  30. {ncca_ngl-0.5.0 → ncca_ngl-0.5.1}/src/ncca/ngl/bezier_curve.py +0 -0
  31. {ncca_ngl-0.5.0 → ncca_ngl-0.5.1}/src/ncca/ngl/first_person_camera.py +0 -0
  32. {ncca_ngl-0.5.0 → ncca_ngl-0.5.1}/src/ncca/ngl/image.py +0 -0
  33. {ncca_ngl-0.5.0 → ncca_ngl-0.5.1}/src/ncca/ngl/log.py +0 -0
  34. {ncca_ngl-0.5.0 → ncca_ngl-0.5.1}/src/ncca/ngl/mat2.py +0 -0
  35. {ncca_ngl-0.5.0 → ncca_ngl-0.5.1}/src/ncca/ngl/mat3.py +0 -0
  36. {ncca_ngl-0.5.0 → ncca_ngl-0.5.1}/src/ncca/ngl/mat4.py +0 -0
  37. {ncca_ngl-0.5.0 → ncca_ngl-0.5.1}/src/ncca/ngl/multi_buffer_vao.py +0 -0
  38. {ncca_ngl-0.5.0 → ncca_ngl-0.5.1}/src/ncca/ngl/obj.py +0 -0
  39. {ncca_ngl-0.5.0 → ncca_ngl-0.5.1}/src/ncca/ngl/plane.py +0 -0
  40. {ncca_ngl-0.5.0 → ncca_ngl-0.5.1}/src/ncca/ngl/prim_data.py +0 -0
  41. {ncca_ngl-0.5.0 → ncca_ngl-0.5.1}/src/ncca/ngl/primitives.py +0 -0
  42. {ncca_ngl-0.5.0 → ncca_ngl-0.5.1}/src/ncca/ngl/pyside_event_handling_mixin.py +0 -0
  43. {ncca_ngl-0.5.0 → ncca_ngl-0.5.1}/src/ncca/ngl/quaternion.py +0 -0
  44. {ncca_ngl-0.5.0 → ncca_ngl-0.5.1}/src/ncca/ngl/random.py +0 -0
  45. {ncca_ngl-0.5.0 → ncca_ngl-0.5.1}/src/ncca/ngl/shader.py +0 -0
  46. {ncca_ngl-0.5.0 → ncca_ngl-0.5.1}/src/ncca/ngl/shader_lib.py +0 -0
  47. {ncca_ngl-0.5.0 → ncca_ngl-0.5.1}/src/ncca/ngl/shader_program.py +0 -0
  48. {ncca_ngl-0.5.0 → ncca_ngl-0.5.1}/src/ncca/ngl/shaders/checker_fragment.glsl +0 -0
  49. {ncca_ngl-0.5.0 → ncca_ngl-0.5.1}/src/ncca/ngl/shaders/checker_vertex.glsl +0 -0
  50. {ncca_ngl-0.5.0 → ncca_ngl-0.5.1}/src/ncca/ngl/shaders/colour_fragment.glsl +0 -0
  51. {ncca_ngl-0.5.0 → ncca_ngl-0.5.1}/src/ncca/ngl/shaders/colour_vertex.glsl +0 -0
  52. {ncca_ngl-0.5.0 → ncca_ngl-0.5.1}/src/ncca/ngl/shaders/diffuse_fragment.glsl +0 -0
  53. {ncca_ngl-0.5.0 → ncca_ngl-0.5.1}/src/ncca/ngl/shaders/diffuse_vertex.glsl +0 -0
  54. {ncca_ngl-0.5.0 → ncca_ngl-0.5.1}/src/ncca/ngl/shaders/text_fragment.glsl +0 -0
  55. {ncca_ngl-0.5.0 → ncca_ngl-0.5.1}/src/ncca/ngl/shaders/text_geometry.glsl +0 -0
  56. {ncca_ngl-0.5.0 → ncca_ngl-0.5.1}/src/ncca/ngl/shaders/text_vertex.glsl +0 -0
  57. {ncca_ngl-0.5.0 → ncca_ngl-0.5.1}/src/ncca/ngl/simple_index_vao.py +0 -0
  58. {ncca_ngl-0.5.0 → ncca_ngl-0.5.1}/src/ncca/ngl/simple_vao.py +0 -0
  59. {ncca_ngl-0.5.0 → ncca_ngl-0.5.1}/src/ncca/ngl/text.py +0 -0
  60. {ncca_ngl-0.5.0 → ncca_ngl-0.5.1}/src/ncca/ngl/texture.py +0 -0
  61. {ncca_ngl-0.5.0 → ncca_ngl-0.5.1}/src/ncca/ngl/transform.py +0 -0
  62. {ncca_ngl-0.5.0 → ncca_ngl-0.5.1}/src/ncca/ngl/vao_factory.py +0 -0
  63. {ncca_ngl-0.5.0 → ncca_ngl-0.5.1}/src/ncca/ngl/vec2.py +0 -0
  64. {ncca_ngl-0.5.0 → ncca_ngl-0.5.1}/src/ncca/ngl/vec2_array.py +0 -0
  65. {ncca_ngl-0.5.0 → ncca_ngl-0.5.1}/src/ncca/ngl/vec3.py +0 -0
  66. {ncca_ngl-0.5.0 → ncca_ngl-0.5.1}/src/ncca/ngl/vec3_array.py +0 -0
  67. {ncca_ngl-0.5.0 → ncca_ngl-0.5.1}/src/ncca/ngl/vec4.py +0 -0
  68. {ncca_ngl-0.5.0 → ncca_ngl-0.5.1}/src/ncca/ngl/vec4_array.py +0 -0
  69. {ncca_ngl-0.5.0 → ncca_ngl-0.5.1}/src/ncca/ngl/webgpu/__init__.py +0 -0
  70. {ncca_ngl-0.5.0 → ncca_ngl-0.5.1}/src/ncca/ngl/webgpu/__main__.py +0 -0
  71. {ncca_ngl-0.5.0 → ncca_ngl-0.5.1}/src/ncca/ngl/webgpu/__main__.py.backup +0 -0
  72. {ncca_ngl-0.5.0 → ncca_ngl-0.5.1}/src/ncca/ngl/webgpu/base_webgpu_pipeline.py +0 -0
  73. {ncca_ngl-0.5.0 → ncca_ngl-0.5.1}/src/ncca/ngl/webgpu/custom_shader_pipeline.py +0 -0
  74. {ncca_ngl-0.5.0 → ncca_ngl-0.5.1}/src/ncca/ngl/webgpu/instanced_geometry_pipeline.py +0 -0
  75. {ncca_ngl-0.5.0 → ncca_ngl-0.5.1}/src/ncca/ngl/webgpu/line_pipeline.py +0 -0
  76. {ncca_ngl-0.5.0 → ncca_ngl-0.5.1}/src/ncca/ngl/webgpu/pipeline_factory.py +0 -0
  77. {ncca_ngl-0.5.0 → ncca_ngl-0.5.1}/src/ncca/ngl/webgpu/pipeline_shaders.py +0 -0
  78. {ncca_ngl-0.5.0 → ncca_ngl-0.5.1}/src/ncca/ngl/webgpu/point_list_pipeline.py +0 -0
  79. {ncca_ngl-0.5.0 → ncca_ngl-0.5.1}/src/ncca/ngl/webgpu/point_pipeline.py +0 -0
  80. {ncca_ngl-0.5.0 → ncca_ngl-0.5.1}/src/ncca/ngl/webgpu/triangle_pipeline.py +0 -0
  81. {ncca_ngl-0.5.0 → ncca_ngl-0.5.1}/src/ncca/ngl/webgpu/webgpu_widget.py +0 -0
  82. {ncca_ngl-0.5.0 → ncca_ngl-0.5.1}/src/ncca/ngl/webgpu/wip/REFACTORING_SUMMARY.md +0 -0
  83. {ncca_ngl-0.5.0 → ncca_ngl-0.5.1}/src/ncca/ngl/webgpu/wip/UNIFIED_SYSTEM.md +0 -0
  84. {ncca_ngl-0.5.0 → ncca_ngl-0.5.1}/src/ncca/ngl/webgpu/wip/buffer_manager.py +0 -0
  85. {ncca_ngl-0.5.0 → ncca_ngl-0.5.1}/src/ncca/ngl/webgpu/wip/pipeline_config.py +0 -0
  86. {ncca_ngl-0.5.0 → ncca_ngl-0.5.1}/src/ncca/ngl/webgpu/wip/shader_constants.py +0 -0
  87. {ncca_ngl-0.5.0 → ncca_ngl-0.5.1}/src/ncca/ngl/webgpu/wip/shader_templates.py +0 -0
  88. {ncca_ngl-0.5.0 → ncca_ngl-0.5.1}/src/ncca/ngl/webgpu/wip/unified_examples.py +0 -0
  89. {ncca_ngl-0.5.0 → ncca_ngl-0.5.1}/src/ncca/ngl/webgpu/wip/unified_factory.py +0 -0
  90. {ncca_ngl-0.5.0 → ncca_ngl-0.5.1}/src/ncca/ngl/webgpu/wip/unified_pipeline.py +0 -0
  91. {ncca_ngl-0.5.0 → ncca_ngl-0.5.1}/src/ncca/ngl/widgets/NGLDebug.log +0 -0
  92. {ncca_ngl-0.5.0 → ncca_ngl-0.5.1}/src/ncca/ngl/widgets/__init__.py +0 -0
  93. {ncca_ngl-0.5.0 → ncca_ngl-0.5.1}/src/ncca/ngl/widgets/__main__.py +0 -0
  94. {ncca_ngl-0.5.0 → ncca_ngl-0.5.1}/src/ncca/ngl/widgets/glsl/phong.frag +0 -0
  95. {ncca_ngl-0.5.0 → ncca_ngl-0.5.1}/src/ncca/ngl/widgets/glsl/phong.vert +0 -0
  96. {ncca_ngl-0.5.0 → ncca_ngl-0.5.1}/src/ncca/ngl/widgets/glsl/picking.frag +0 -0
  97. {ncca_ngl-0.5.0 → ncca_ngl-0.5.1}/src/ncca/ngl/widgets/glsl/picking.vert +0 -0
  98. {ncca_ngl-0.5.0 → ncca_ngl-0.5.1}/src/ncca/ngl/widgets/lookatwidget.py +0 -0
  99. {ncca_ngl-0.5.0 → ncca_ngl-0.5.1}/src/ncca/ngl/widgets/mat4widget.py +0 -0
  100. {ncca_ngl-0.5.0 → ncca_ngl-0.5.1}/src/ncca/ngl/widgets/rgbacolourwidget.py +0 -0
  101. {ncca_ngl-0.5.0 → ncca_ngl-0.5.1}/src/ncca/ngl/widgets/rgbcolourwidget.py +0 -0
  102. {ncca_ngl-0.5.0 → ncca_ngl-0.5.1}/src/ncca/ngl/widgets/transformwidget.py +0 -0
  103. {ncca_ngl-0.5.0 → ncca_ngl-0.5.1}/src/ncca/ngl/widgets/vec2widget.py +0 -0
  104. {ncca_ngl-0.5.0 → ncca_ngl-0.5.1}/src/ncca/ngl/widgets/vec3widget.py +0 -0
  105. {ncca_ngl-0.5.0 → ncca_ngl-0.5.1}/src/ncca/ngl/widgets/vec4widget.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: ncca-ngl
3
- Version: 0.5.0
3
+ Version: 0.5.1
4
4
  Summary: A Python version of the NGL graphics library.
5
5
  Author: Jon Macey
6
6
  Author-email: Jon Macey <jmacey@bournemouth.ac.uk>
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "ncca-ngl"
3
- version = "0.5.0"
3
+ version = "0.5.1"
4
4
  description = "A Python version of the NGL graphics library."
5
5
  authors = [{ name = "Jon Macey", email = "jmacey@bournemouth.ac.uk" }]
6
6
  requires-python = ">=3.11"
@@ -40,7 +40,7 @@ from .simple_vao import SimpleVAO
40
40
  from .text import Text
41
41
  from .texture import Texture
42
42
  from .transform import Transform, TransformRotationOrder
43
- from .util import PerspMode, calc_normal, clamp, frustum, lerp, look_at, ortho, perspective
43
+ from .util import PerspMode, calc_normal, clamp, frustum, lerp, look_at, ortho, perspective, renderman_look_at
44
44
  from .vao_factory import VAOFactory, VAOType
45
45
  from .vec2 import Vec2
46
46
  from .vec2_array import Vec2Array
@@ -110,4 +110,5 @@ all = [
110
110
  FirstPersonCamera,
111
111
  PySideEventHandlingMixin,
112
112
  PerspMode,
113
+ renderman_look_at,
113
114
  ]
@@ -161,3 +161,55 @@ def hash_combine(seed, h):
161
161
  seed = (seed + 0x9E3779B9 + ((seed << 6) & 0xFFFFFFFFFFFFFFFF) + (seed >> 2)) & 0xFFFFFFFFFFFFFFFF
162
162
  seed ^= h
163
163
  return seed
164
+
165
+
166
+ def renderman_look_at(eye, look, up):
167
+ """
168
+ Calculate 4x4 matrix for RenderMan camera lookAt
169
+ Accounts for RenderMan's right-handed Y-down, Z-forward coordinate system
170
+
171
+ Args:
172
+ eye: Vec3 - camera position
173
+ look: Vec3 - point to look at
174
+ up: Vec3 - up vector (typically (0, 1, 0) in world space)
175
+
176
+ Returns:
177
+ Mat4 - 4x4 transformation matrix
178
+ """
179
+ # Calculate view direction (from eye to look point)
180
+ n = look - eye
181
+ n.normalize()
182
+
183
+ # Calculate right vector
184
+ v = n.cross(up)
185
+ v.normalize()
186
+
187
+ # Recalculate orthogonal up vector
188
+ u = v.cross(n)
189
+ u.normalize()
190
+
191
+ # Build the matrix for RenderMan's coordinate system
192
+ # RenderMan uses Y-down, Z-forward
193
+ result = Mat4.identity()
194
+
195
+ # Right vector (X-axis)
196
+ result.m[0][0] = v.x
197
+ result.m[1][0] = v.y
198
+ result.m[2][0] = v.z
199
+
200
+ # Up vector (Y-axis) - negated for Y-down convention
201
+ result.m[0][1] = -u.x
202
+ result.m[1][1] = -u.y
203
+ result.m[2][1] = -u.z
204
+
205
+ # Forward vector (Z-axis) - camera looks down +Z
206
+ result.m[0][2] = n.x
207
+ result.m[1][2] = n.y
208
+ result.m[2][2] = n.z
209
+
210
+ # Translation (camera position)
211
+ result.m[3][0] = -eye.dot(v)
212
+ result.m[3][1] = eye.dot(u) # Negated Y component
213
+ result.m[3][2] = -eye.dot(n)
214
+
215
+ return result
@@ -8,14 +8,20 @@ while allowing dimension-specific behavior through abstract methods.
8
8
  import ctypes
9
9
  import math
10
10
  from abc import ABC, abstractmethod
11
- from typing import Any, ClassVar, Self, Tuple
11
+ from typing import Any, ClassVar, Generic, Self, Tuple, TypeVar
12
12
 
13
13
  import numpy as np
14
14
 
15
15
  from .util import clamp, hash_combine
16
16
 
17
+ # Note this has been changed so I can use python 3.11
18
+ # as renderman want this. Once >3.11 is used we can get rid and just use
19
+ # class VectorBase[T](ABC):
17
20
 
18
- class VectorBase[T](ABC):
21
+ T = TypeVar("T", bound="VectorBase")
22
+
23
+
24
+ class VectorBase(ABC, Generic[T]):
19
25
  """
20
26
  Base class for all vector types providing common functionality.
21
27
 
@@ -2,6 +2,8 @@ from enum import IntEnum
2
2
 
3
3
  import numpy as np
4
4
 
5
+ import numpy as np
6
+
5
7
  from ncca.ngl import Mat2, Mat3, Mat4, Vec2, Vec3, Vec4
6
8
 
7
9
  FLOAT_SIZE = np.dtype(np.float32).itemsize
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes