1. Change the default behaviour of `renderer/utils.py::transpose_for_display` which will flip vertically as well by default, so the origin of the resultant matrix will be (height, width, channels) and with the origin located at the top-left corner. The previous behaviour can be achieved by setting `flip_vertical=False`.
2. `Scene.add_cube` now accepts one number for `texture_scaling` to scale texture map equally in both x and y directions.
3. Fix some assert message issues (in `Scene.add_cube`).
4. `CameraParameters` now accepts `position`, `target` and `up` in Python's tuples of floats as well, along with `jnp.array`.
5. `Scene.set_object_orientation` and `Scene.set_object_local_scaling` supports tuple of floats as well as inputs, additional to `jnp.array`.
6. `Model` now has a convenient method `create` to create a Model with same face indices shared by `faces`, `faces_norm` and `faces_uv`, and a default `specular_map`. This is useful for creating a mesh where all vertices has its own normal and uv coordinate specified, under same order (thus same face indices).
7. Correctly support Python Sequence for `utils.build_texture_from_PyTinyrenderer` as texture.
8. `quaternion` function to create an orientation from axis and angle, and `quaternion_mul` to composite quaternion.
9. `rotation_matrix` function to create a rotation matrix from axis and angle. Also allows `Scene` to set object orientation directly using rotation matrix.
10. Move `Renderer.merge_objects` into `geometry.py`, and expose in `__init__.py`.
11. `batch_models` and `Renderer.create_buffers` convenient method to facilitate batch rendering of multiple models.