Repository navigation
Examples
examples/. Each example is one program that renders one image or animation into out/. make animation renders all of them except carla.mojo and carla_town.mojo.
Run one by hand:
mkdir -p out
.venv/bin/mojo run -I . examples/cubes.mojo out/cubes.png| Example | Output | Page |
|---|---|---|
triangle.mojo |
triangle.png |
The smallest program that draws. |
spin.mojo |
spin.png |
Image files |
cube.mojo |
cube.png |
Why a software rasterizer |
cubes.mojo |
cubes.png |
Scene graph |
uv.mojo |
uv.png |
Why interpolation is perspective-correct |
textured.mojo |
textured.png |
Textures |
glass.mojo |
glass.png |
Why transparency is sorted |
floor.mojo |
floor.png |
Why mipmaps |
photo.mojo |
photo.png |
A decoded PNG on a cube. The README figure. |
lamps.mojo |
lamps.png |
Lights |
first_scene.mojo |
first_scene.png |
Render your first scene |
lit_scene.mojo |
lit_scene.png |
Light, texture and animate |
rotations.mojo |
rotations.png |
Rotations |
ortho.mojo |
cameras.png |
Cameras |
stereo.mojo |
stereo.png |
Cameras |
geometry.mojo |
geometry.png |
Geometry |
instances.mojo |
instances.png |
Meshes and assets |
raycast.mojo |
raycast.png |
Raycasting |
curves.mojo |
curves.png |
Curves and paths |
lines.mojo |
lines.png |
Lines |
sprites.mojo |
sprites.png |
Points and sprites |
television.mojo |
television.png |
Textures |
mirror.mojo |
mirror.png |
Textures |
outlines.mojo |
helpers.png |
Helpers |
keyframes.mojo |
keyframes.png |
Animation |
skinning.mojo |
skinning.png |
Skinning |
phong.mojo |
phong.png |
Materials |
physical.mojo |
physical.png |
Materials |
fog.mojo |
fog.png |
Fog |
culling.mojo |
culling.png |
Renderer |
split.mojo |
split.png |
Renderer |
clipping.mojo |
clipping.png |
Rasterization |
gpu_backend.mojo |
gpu_backend.png |
GPU backend |
exposure.mojo |
exposure.png |
Render target and framebuffer |
model.mojo |
model.png |
Model files |
orbit.mojo |
math.png |
Math |
clock.mojo |
units.png |
Units |
chain.mojo |
chain.png |
Why the scene graph is an array |
additive.mojo |
additive.png |
Why color is linear |
normals.mojo |
normals.png |
Why a normal is not a color |
fragments.mojo |
fragments.png |
Why shading is per fragment |
edges.mojo |
coverage.png |
Why coverage uses fixed point |
shadows.mojo |
shadows.png |
Lights |
wide.mojo |
wide.png |
Lines |
bloom.mojo |
postprocessing.png |
Post-processing |
gizmo.mojo |
controls.png |
Windowing and controls |
json_scene.mojo |
scenejson.png |
Scene JSON |
reloaded.mojo |
exporters.png |
Exporters |
gem.mojo |
transmission.png |
Materials |
distance.mojo |
distance.png |
Materials |
unfogged.mojo |
unfogged.png |
Materials |
targets.mojo |
targets.png |
Render target and framebuffer |
layers.mojo |
layers.png |
Materials |
graph.mojo |
nodes.png |
Node materials |
basis.mojo |
ktx2.png |
Textures |
coats.mojo |
coats.png |
Materials |
skyjson.mojo |
environment.png |
Scene JSON |
daylight.mojo |
sky.png |
Scene objects |
faces.mojo |
faces.png |
Meshes and assets |
utah.mojo |
teapot.png |
Geometry addons |
blobs.mojo |
blobs.png |
Scene objects |
flipbook.mojo |
animated.png |
Animated objects |
ripples.mojo |
computation.png |
GPU computation |
baked.mojo |
lightmap.png |
Progressive light map |
diagram.mojo |
svg.png |
SVG renderer |
bricks.mojo |
models.png |
More model files |
terrain.mojo |
mathaddons.png |
Math addons |
override.mojo |
hooks.png |
Renderer hooks and material flags |
clay.mojo |
sculptor.png |
Sculptor |
cells.mojo |
tslfunctions.png |
TSL functions |
cloud.mojo |
gaussian.png |
Gaussian splats |
bounce.mojo |
vxgi.png |
Voxel global illumination |
sunlight.mojo |
lighting.png |
Lighting addons |
vase.mojo |
lofts.png |
Lofts and clipping groups |
sapling.mojo |
generators.png |
Procedural generators |
particles.mojo |
computenodes.png |
Compute nodes |
towers.mojo |
procedural-towers.png |
Procedural towers |
interiors.mojo |
floor-plans-and-interiors.png |
Floor plans and interiors |
room_cells.mojo |
building-topology.png |
Building topology |
building_model.mojo |
building-model.png |
Building model |
exchange.mojo |
ifc-exchange.png |
IFC exchange |
frame_modes.mojo |
frame-analysis.png |
Frame analysis |
plate.mojo |
shell-analysis.png |
Shell analysis |
heat.mojo |
building-energy.png |
Building energy |
spring_modes.mojo |
numerics.png |
Numerics |
audio_game_humanoid.mojo |
audio-character.glb |
Audio-aligned game faces |
carla_towns.mojo |
carla_towns.png |
CARLA rendering |
femur.mojo |
femur.png |
Femur |
tibia.mojo |
tibia.png |
Tibia |
fibula.mojo |
fibula.png |
Fibula |
patella.mojo |
patella.png |
Patella |
knee.mojo |
knee.png |
Knee |
muscles.mojo |
muscles.png |
Muscles |
leg.mojo |
leg.png |
Leg |
legs.mojo |
legs.png |
Leg |
foot.mojo |
foot.png |
Foot |
limb.mojo |
limb.png |
Leg |
vessels.mojo |
vessels.png |
Vessels |
lymph.mojo |
lymph.png |
Lymph |
nerves.mojo |
nerves.png |
Nerves |
integument.mojo |
integument.png |
Integument |
pelvis.mojo |
pelvis.png |
Pelvis |
torso.mojo |
torso.png |
Torso |
arm.mojo |
arm.png |
Arm |
hand.mojo |
hand.png |
Hand |
head.mojo |
head.png |
Head |
genomes.mojo |
genomes.png |
Genome |
family.mojo |
family.png |
Genome |
expressions.mojo |
expressions.png |
Head |
talking.mojo |
talking.png |
Head |
hairstyles.mojo |
hairstyles.png |
Head |
game_humanoid.mojo |
game_humanoid.png |
Game humanoid |
water.mojo |
water.png |
Water |
animals.mojo |
animals.png |
Animals |
walk.mojo |
walk.png |
Animals |
animal_anatomy.mojo |
animal_anatomy.png |
Animal anatomy |
carla.mojo |
carla.png |
CARLA |
carla_town.mojo |
carla_town.png |
CARLA rendering |
photo.mojo takes the image path first: examples/photo.mojo assets/brick.png out/photo.png.
pelvis.mojo, torso.mojo, arm.mojo, hand.mojo, head.mojo, genomes.mojo, family.mojo, expressions.mojo, talking.mojo and hairstyles.mojo take a mesh quality after the path: low, medium, high or xhigh. See Mesh quality.
.venv/bin/mojo run -I . examples/torso.mojo out/torso.png lowmake animation does not render the two CARLA examples. Run them by hand: mojo run -I . examples/carla.mojo out/carla.png and mojo run -I . examples/carla_town.mojo out/carla_town.png.
viewer.mojo writes no file. It opens a window in the terminal, and make viewer runs it. See Windowing and controls.
Animated outputs are APNG files. A browser or VS Code plays them. A viewer that does not know APNG shows the first frame.
tools/bench_examples.mojo times the catalog against three.js and, when installed, Mojo 1.0.
Benchmarks names every other CPU bench and records who wins.
The refresh command is in How to measure examples.
| Program | Shows |
|---|---|
tools/gpu_status.mojo |
Whether an accelerator is present. It needs MAX. |
tools/doc_lint.mojo |
Whether the documentation follows the writing rules. |
Tutorials
How-to
Reference
- Scene graph
- Rotations
- Cameras
- Geometry
- Geometry addons
- Lofts and clipping groups
- Sculptor
- Procedural generators
- Meshes and assets
- Lines
- Points and sprites
- Helpers
- Scene objects
- Animated objects
- Raycasting
- Curves and paths
- Animation
- Skinning
- Materials
- Node materials
- TSL functions
- Lights
- Lighting addons
- Fog
- Textures
- Renderer
- Renderer hooks and material flags
- Rasterization
- GPU backend
- Render target
- Post-processing
- GPU computation
- Compute nodes
- Progressive light map
- Gaussian splats
- Voxel global illumination
- SVG renderer
- Image files
- Image decode queue
- Model files
- More model files
- Exporters
- Scene JSON
- Windowing and controls
- Math
- Norm consumers
- Math addons
- Units
- Coverage tool
- Commands
- Examples
- Benchmarks
- Extensions
- Shared physics
- Physics query snapshots
- Continuous collision
- Tick force restoration
- Water
- Streamline
- Animals
- Buildings
- CARLA
- Femur
- Tibia
- Fibula
- Patella
- Knee
- Muscles
- Vessels
- Lymph
- Nerves
- Integument
- Leg
- Foot
- Pelvis
- Torso
- Arm
- Hand
- Head
- Genome
- Game humanoid
- Humanoid fidelity
- Audio-aligned game faces
- Converted assets
- Mesh quality
- Segment inertia
Explanation
- Software rasterizer
- Scene graph as an array
- Linear color
- Normals are not colors
- Perspective correction
- Fixed-point coverage
- Per-fragment shading
- Mipmaps
- Sorted transparency
- Types and checks
- Render hooks as a trait
- Shared CPU and GPU code
- Bands and threads
- PNG structure
- Extensions beside the port
- CUDA teardown hang
- Mojo compiler hang