CANIM
C-based animation and rendering experiment with Lua scenes, GLFW output, stroke rendering and create/rotate/translate animations.
Technical demonstration
Context
CANIM is an experimental animation project inspired by Manim. The README describes a first goal: display SVG-like shapes and morph them, with quadratic and cubic Bezier curves documented.
Visible result
The repository contains Lua scenes that create circles and squares, set strokes and attach animations such as create, rotate and translate.
local s1 = square(200, 200, 100)
set_stroke(s1, "#ff0000", 10)
animate(s1, "rotate", {
start = 0,
duration = 5,
timing = "ease_in_out",
loop = "once",
fromA = 0,
toA = 5 * math.pi
})
Contribution
The public repository does not document collaborators or split work by person. I therefore present it as a personal technical experiment only where the repository itself supports that reading.
Technical difficulty
The engine has to bridge a Lua scene API to C structs, then render animated paths into a pixel buffer shown through GLFW. The path model includes line, quadratic and cubic segments, stroke colors, opacity and chained animations.
Technical choices
- C, GLFW and Lua bindings
- Scene functions exposed as
circle,square,set_strokeandanimate - Path segments for lines, quadratic Beziers and cubic Beziers
- Animation types for create, translate and rotate
Validation and limits
The project is experimental. No versioned benchmark, CI run or exported video was available in the repository, so the portfolio uses a local visual derived from the checked-in Lua scene rather than claiming measured rendering performance.