3d Numpy array in -> Voxel world out
![image](https://private-user-images.githubusercontent.com/1865834/341840048-680dcde4-299e-4508-8cb7-1779831b1b98.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk1OTA5NzQsIm5iZiI6MTczOTU5MDY3NCwicGF0aCI6Ii8xODY1ODM0LzM0MTg0MDA0OC02ODBkY2RlNC0yOTllLTQ1MDgtOGNiNy0xNzc5ODMxYjFiOTgucG5nP1gtQW16LUFsZ29yaXRobT1BV1M0LUhNQUMtU0hBMjU2JlgtQW16LUNyZWRlbnRpYWw9QUtJQVZDT0RZTFNBNTNQUUs0WkElMkYyMDI1MDIxNSUyRnVzLWVhc3QtMSUyRnMzJTJGYXdzNF9yZXF1ZXN0JlgtQW16LURhdGU9MjAyNTAyMTVUMDMzNzU0WiZYLUFtei1FeHBpcmVzPTMwMCZYLUFtei1TaWduYXR1cmU9ZWMwMDIyYjNjMDQ4OWVhNjI5YzBiNDRkMDNhYWYzMjA4MTllYjg5MDJjYTdkZWEwMmMwOWY5MDBhZjBlZDk1NiZYLUFtei1TaWduZWRIZWFkZXJzPWhvc3QifQ.0GFEWnSEfLzy1mxpU9qNxcATll4gzrpfDiYnB5lFMK0)
pip3 install voxel_world
git clone https://github.com/jackparmer/VoxelWorld.git
cd VoxelWorld
python3 -m pip install .
from voxel_world import VoxelWorld
For physics simulation, computer vision, games, art, whatever
Features!
- Automatic GIF generation
- Simple! Numpy 3d ones array in -> Voxel world out
- Portable! Outputs images or standalone HTML files with Vixel
- Notebooks! Works well in the Jupyter notebook ecosystem
- Eye candy! Ambient occlusion, ray tracing from Vixel, etc
from voxel_world import Volume, Surface;
volume = Volume(Volume.purlin_matrix(32)); surf = Surface(volume)
surf.color = (255,0,0)
volume.add(surf).show()
![image](https://private-user-images.githubusercontent.com/1865834/346349636-4a9c5f99-4ff2-441b-9086-fac3c4e7132a.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk1OTA5NzQsIm5iZiI6MTczOTU5MDY3NCwicGF0aCI6Ii8xODY1ODM0LzM0NjM0OTYzNi00YTljNWY5OS00ZmYyLTQ0MWItOTA4Ni1mYWMzYzRlNzEzMmEucG5nP1gtQW16LUFsZ29yaXRobT1BV1M0LUhNQUMtU0hBMjU2JlgtQW16LUNyZWRlbnRpYWw9QUtJQVZDT0RZTFNBNTNQUUs0WkElMkYyMDI1MDIxNSUyRnVzLWVhc3QtMSUyRnMzJTJGYXdzNF9yZXF1ZXN0JlgtQW16LURhdGU9MjAyNTAyMTVUMDMzNzU0WiZYLUFtei1FeHBpcmVzPTMwMCZYLUFtei1TaWduYXR1cmU9Y2QwNWYwNTdiZDU5MWZlMTdlMmU3NWZlYzI5NmFlMDVjNjRjMmViYTUzYjM1Yjg1ZjE3NDZlNjg0ZjY4NzUyNyZYLUFtei1TaWduZWRIZWFkZXJzPWhvc3QifQ.w08MrRm0NAHmUrkvGNZDqNsquXpNrNY8sK3GxcHfuZs)
import random
from voxel_world import Volume
Volume(
Volume.purlin_matrix(16),
theme=random.choice(list(Volume.themes.keys())),
viewing_angle=(random.randint(0, 90), random.randint(0, 90)),
).render().show()
![image](https://private-user-images.githubusercontent.com/1865834/346349524-80ad3ed5-15f2-427f-9608-72a46b07e932.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk1OTA5NzQsIm5iZiI6MTczOTU5MDY3NCwicGF0aCI6Ii8xODY1ODM0LzM0NjM0OTUyNC04MGFkM2VkNS0xNWYyLTQyN2YtOTYwOC03MmE0NmIwN2U5MzIucG5nP1gtQW16LUFsZ29yaXRobT1BV1M0LUhNQUMtU0hBMjU2JlgtQW16LUNyZWRlbnRpYWw9QUtJQVZDT0RZTFNBNTNQUUs0WkElMkYyMDI1MDIxNSUyRnVzLWVhc3QtMSUyRnMzJTJGYXdzNF9yZXF1ZXN0JlgtQW16LURhdGU9MjAyNTAyMTVUMDMzNzU0WiZYLUFtei1FeHBpcmVzPTMwMCZYLUFtei1TaWduYXR1cmU9MWI4NDFkZTFmMWE5ZTQwYzk0NGYzNjQxYzE3NDJiYTgzY2M2OThiNzBkZDhiYTMxZGI5NDZiZTMzODM1ZTExMCZYLUFtei1TaWduZWRIZWFkZXJzPWhvc3QifQ.sPkM0SK6JHOnfkW-mXDcf36gDlaRcA8NXFg9Oi_e-pY)
from voxel_world import Volume, Vixel; vw = Volume(); vix = Vixel(vw); vix.html()
![image](https://private-user-images.githubusercontent.com/1865834/346349940-90826a0c-6d74-4956-acd1-fa230a79c9da.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk1OTA5NzQsIm5iZiI6MTczOTU5MDY3NCwicGF0aCI6Ii8xODY1ODM0LzM0NjM0OTk0MC05MDgyNmEwYy02ZDc0LTQ5NTYtYWNkMS1mYTIzMGE3OWM5ZGEucG5nP1gtQW16LUFsZ29yaXRobT1BV1M0LUhNQUMtU0hBMjU2JlgtQW16LUNyZWRlbnRpYWw9QUtJQVZDT0RZTFNBNTNQUUs0WkElMkYyMDI1MDIxNSUyRnVzLWVhc3QtMSUyRnMzJTJGYXdzNF9yZXF1ZXN0JlgtQW16LURhdGU9MjAyNTAyMTVUMDMzNzU0WiZYLUFtei1FeHBpcmVzPTMwMCZYLUFtei1TaWduYXR1cmU9ZWYzN2IyN2YzYmNiNzQxNDU4MTVkMDNkMjVlYzQwNGExNjJlZmIxZGJlMmJhZGNkNzBjZDgzNDQ5OTM1YWFlOSZYLUFtei1TaWduZWRIZWFkZXJzPWhvc3QifQ.Eh-XJomUbYoFrC5IlXBnW1zTPJkyfFIru-r7cMy6fpg)
from voxel_world import Volume, Surface, Agent, Sequence
volume = Volume(Volume.purlin_matrix(64));
surf = Surface(volume);
agents = [Agent(surf, mask) for mask in Sequence.snake(grid_size=64, num_steps=1000)];
seq = Sequence(agents);
seq2 = seq.apply_bg(volume)
seq2.save('voxel_animation64_v2.gif')
![image](https://private-user-images.githubusercontent.com/1865834/340759559-917f38ac-dd26-4419-9725-0693ca05aaa1.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk1OTA5NzQsIm5iZiI6MTczOTU5MDY3NCwicGF0aCI6Ii8xODY1ODM0LzM0MDc1OTU1OS05MTdmMzhhYy1kZDI2LTQ0MTktOTcyNS0wNjkzY2EwNWFhYTEucG5nP1gtQW16LUFsZ29yaXRobT1BV1M0LUhNQUMtU0hBMjU2JlgtQW16LUNyZWRlbnRpYWw9QUtJQVZDT0RZTFNBNTNQUUs0WkElMkYyMDI1MDIxNSUyRnVzLWVhc3QtMSUyRnMzJTJGYXdzNF9yZXF1ZXN0JlgtQW16LURhdGU9MjAyNTAyMTVUMDMzNzU0WiZYLUFtei1FeHBpcmVzPTMwMCZYLUFtei1TaWduYXR1cmU9MjMzZjQwYzc1NjMwYTdkZDZiOTEwNmQ3Y2M3NjAwODI2NTMwYWFkYzZmMjI5YWJiMGI5Y2UyMTEzMTIwMGEyYyZYLUFtei1TaWduZWRIZWFkZXJzPWhvc3QifQ.OdgZJOtftdObh_dji9pfaqeLDg3qN8Vd7duaCS7F0SU)
![image](https://private-user-images.githubusercontent.com/1865834/340432642-f2a61fae-5133-4e2c-8bf9-71e69c1d0948.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk1OTA5NzQsIm5iZiI6MTczOTU5MDY3NCwicGF0aCI6Ii8xODY1ODM0LzM0MDQzMjY0Mi1mMmE2MWZhZS01MTMzLTRlMmMtOGJmOS03MWU2OWMxZDA5NDgucG5nP1gtQW16LUFsZ29yaXRobT1BV1M0LUhNQUMtU0hBMjU2JlgtQW16LUNyZWRlbnRpYWw9QUtJQVZDT0RZTFNBNTNQUUs0WkElMkYyMDI1MDIxNSUyRnVzLWVhc3QtMSUyRnMzJTJGYXdzNF9yZXF1ZXN0JlgtQW16LURhdGU9MjAyNTAyMTVUMDMzNzU0WiZYLUFtei1FeHBpcmVzPTMwMCZYLUFtei1TaWduYXR1cmU9MzY3OGEwNmExZDdkYmRlOWQzZDczYTVmMTdlOWVjNDJkNzMzNDBhYTRhMGNiYzc3ZmM1NGVhM2ZiMjEzMzA3NiZYLUFtei1TaWduZWRIZWFkZXJzPWhvc3QifQ.pLCU_SormBK6cUXeeabSHLHavqCBOnZWCGs8fX0WgFM)
![image](https://private-user-images.githubusercontent.com/1865834/340433505-d86f3e6a-322a-4273-8260-fc41fb215eaf.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk1OTA5NzQsIm5iZiI6MTczOTU5MDY3NCwicGF0aCI6Ii8xODY1ODM0LzM0MDQzMzUwNS1kODZmM2U2YS0zMjJhLTQyNzMtODI2MC1mYzQxZmIyMTVlYWYucG5nP1gtQW16LUFsZ29yaXRobT1BV1M0LUhNQUMtU0hBMjU2JlgtQW16LUNyZWRlbnRpYWw9QUtJQVZDT0RZTFNBNTNQUUs0WkElMkYyMDI1MDIxNSUyRnVzLWVhc3QtMSUyRnMzJTJGYXdzNF9yZXF1ZXN0JlgtQW16LURhdGU9MjAyNTAyMTVUMDMzNzU0WiZYLUFtei1FeHBpcmVzPTMwMCZYLUFtei1TaWduYXR1cmU9NmQxODU0NmMxZjFhMmQ2ZmU1OWFmZDQ3M2I0MDk1YzVmZWMxZjJiNDVlYWM2MmZmNDVjYjcxZWEzODU1NGE1MiZYLUFtei1TaWduZWRIZWFkZXJzPWhvc3QifQ.KW0e1i7jYKVZtX9yFZPzTW505cSuZdqqh5yiWMh68Tg)
python3 -m build
python3 -m twine upload --repository-url https://upload.pypi.org/legacy/ dist/*