captures/luft-portraits.lisp
The canvas loop owns another thread, so configure its global
renderer state before it starts rather than dynamically binding
these specials around start-viewer.
Material plates isolate the solid renderer. A lighting plate deliberately keeps the separate SDF player pass.
Frame the sanctuary's ridge-beacon tower at one luft bevel width.
Capture the #xCD wall termination at the normal chamfer width. #L7N4MO
At this yaw/pitch the camera lies backward from the motivating vertex (12,8,3), placing that exact join at frame centre.
The traveler. Both plates hold the animation clock still: a character recipe that cannot ask for the same pose twice is not a recipe. #TR4VLR
Aim camera at the world-space point X/Y/Z without changing its lens.
Film the real walking wizard crossing the authored sanctuary bridge.
Movement remains camera-relative in play. Keep its authored +Y bridge direction independent of the filming camera.
A parallel dolly keeps the wizard readable while successive arches, piers, and finally the gate move through the frame.
The streamed highlands. These two cameras retain the regional read and the citadel-scale read that caught the old sine terrain's repetition. #H1GHLD
Film a slow highland traverse that crosses streaming chunk boundaries.
(name (&key figure kind extension (description "") (layout :landscape))
(pathname) &body body)Define one inspectable wiki capture recipe. NAME is its command-line identity. FIGURE is the stable six-character wiki figure ID; KIND is :IMAGE or :VIDEO; EXTENSION is the generated file suffix. LAYOUT is :LANDSCAPE by default or :PORTRAIT for uncropped 9:16 presentation. BODY is an ordinary named renderer function…
Either :PERSPECTIVE or :ISOMETRIC. An isometric picture has no vanishing point, so two chamfers the same width are the same width on screen wherever they sit. That is what makes it the projection to judge a shape rule in.
How many world units of height an isometric frame spans.
Global construction-edge strength. The atelier toggles it between 0 and 1.
Whether a ray hit gets a blueprint reticle and local triangle-edge lens.
(&key
(solid (make-mountain-sanctuary-scene))
(bevel-width 2)
bevel-profile
surface-mesh
(camera (make-fly-camera))
(title "LUFT — click to walk · scroll to zoom · M orbit")
(width 1100) (height 800)
fullscreen-p
(inspector-p nil)
(frames-per-second 60)
(provider *gpu-provider*))Open the indexed-instanced LUFT renderer as a McCLIM atelier. BEVEL-PROFILE enables the experimental material-selected width cohorts for a non-streaming scene. BEVEL-WIDTH remains the camera/inspection reference and the uniform fallback. SURFACE-MESH supplies an already constructed diagnostic mesh while retaining…
()Build the wall-side stepped mountain used to judge mixed miters. #Z5NDTA The two L-shaped terraces retain five-, six-, and seven-cell vertex stars in one architectural context. Their back edges meet a continuous wall so the same view also retains the truncated wall miter preserved by #DJK8HW.
Default bevel width in eighth-cell integer ticks (one quarter cell).
(&key (position
(vec3:make-vec3 (+ 70.0 +sanctuary-origin-x+)
(+ -18.0 +sanctuary-origin-y+) 50.0))
(yaw 2.2455373) (pitch -0.5165006)
(field-of-view 0.9599311))(x y z)(pathname &optional (viewer *viewer*)
&key (inspector-p (viewer-inspector-p viewer)))Render one native-resolution VIEWER frame offscreen into PATHNAME. INSPECTOR-P defaults to VIEWER's inspector setting. A source-defined evidence capture may override it when the subject is the geometry rather than the atelier UI.
(&optional (viewer *viewer*))Stop VIEWER exactly once and publish one result to every caller. Native canvas-thread handlers use REQUEST-VIEWER-QUIT instead: a synchronous owner or waiter is rejected there because teardown crosses a frame boundary.
(pathname position isometric-height title
&key (yaw 2.2455373) (pitch -0.5165006) player-p bevel-profile solid
surface-mesh (bevel-width luft:+mesh-bevel-width+) (wireframe 0.0)
inspection-ink-p)One authored solid and its vocabulary-closed material-placement field. The solid remains LUFT's topological truth. The sparse authored field stores only dense vocabulary offsets; semantic material objects remain at the scene boundary rather than being allocated per cell.
Logical disjunction of tests and raw truth values.
(&key (beacon-placement *beacon-material-placement*)
(stair-boundary :low-wall))A broad Lonely-Mountains world carrying a bridge and walled sanctuary. This is the old Holm's architectural sentence with its material menagerie removed: rolling approaches, a channel and rising high rock; a diagonal processional way; a two-arched stone bridge; a gate, curtain wall, paired turrets, an arcaded hall…
(&key (terrain-width 4) (architecture-width 1) (contact-width 2))(pathname bevel-width title)(pathname boundary wireframe title)(pathname width title)(source &key stock-function chamfer-stock-function
(bevel-width luft:+mesh-bevel-width+))(mesh)Return MESH's exact triangles with every primitive edge marked visible. The geometry, stock, ambient value, primitive class, and winding are retained. Only the three construction-mask bits change. This diagnostic realization exposes connectivity that the ordinary semantic edge mask intentionally hides; it must not…
(pathname wireframe title
&key (contract-t-junctions-p t)
(position (luv.arithmetic.lisp.vec3:make-vec3 9.5 -0.5 6.5))
(isometric-height 2.5) split-neighborhood-p)()Build the five-cell medial T-junction regression. #WSEK3C Two ascending architectural columns meet the corner of a two-cell terrain column. Widths one, two, and four occur in one tiny surface; the width-four medial collapse leaves exactly one long-edge/short-edge T-junction for the site-local contraction pass to…
(scene profile &key (contract-t-junctions-p t))Build one watertight mesh with a semantic material width at each site. The ordinary width-one mesher supplies one exact topology witness. PROFILE is compiled after that build into a dense stock-to-material-mask lane. Each canonical lattice vertex ORs the masks of all incident stocks: terrain-only,…
(mesh split)Return only the triangles incident to the three points in SPLIT. SPLIT is (LEFT MIDDLE RIGHT), as reported in the :CANDIDATE-SPLITS bevel diagnostic. A triangle is retained when two or more of its vertices are split points, so the result is the smallest actual mesh patch that contrasts one long edge with its two…
(pathname wireframe title)()Three isolated singular-star fixtures for the manifold-sheet spike. The plots exercise an edge-touching pair, a corner-touching pair, and the four-sheet parity star. Nothing else in the scene can hide their junctions. #WSEK3C
(pathname wireframe title)(pathname &key (character-time 0.5) (yaw 2.2455373) (pitch -0.5165006)
(isometric-height 5.0) (aim-height 15.2) (distance 24.0)
(scene-maker #'luft.render:make-traveler-study-scene)
(title "LUFT traveler study") (width 900) (height 900))()A bare limestone dais under the traveler, clear from every direction. The sanctuary is the scene he belongs in, but it is also a scene in which half the useful camera angles look through a parapet. This fixture keeps his exact world position and his exact deck height and removes everything else, so a turnaround can…
Animation clock, in seconds, to hold the traveler at, or NIL to run free. A character plate needs the same pose every time it is rendered. The viewer otherwise derives the clock from its own frame counter, which no capture can predict.
Multiplication and scalar scaling.
Addition over compatible quantities.
Subtraction or unary negation.
(camera x y z)The componentwise square root of a raw value.
(pathname &key (seconds 8) (frame-rate 24))Division of two represented quantities.
(&key
(position
(vec3:make-vec3 (+ +sanctuary-origin-x+ 29.5)
(+ +sanctuary-origin-y+ 24.5) 14.0))
(heading-x 0.0) (heading-y 1.0) (speed +walking-player-speed+))(viewer pathname
&key (seconds 8) (frame-rate 30) before-frame)Film VIEWER offscreen into an MP4 at PATHNAME. BEFORE-FRAME, when supplied, receives the frame index before streaming and rendering that frame. Recording is paced in real time so asynchronous chunk production gets the same opportunity to publish as it does in the window.
An explicitly owned AVFrame.
(player)(player source camera forward right seconds &key maximum-distance)Test whether two compatible scalars are equal.
Logical conjunction of tests and raw truth values.
Test whether one compatible scalar is less than another.
The non-negative remainder of integer division.
(pathname position yaw pitch title)(&key (horizontal-bits 9) (seed 121) (streaming-p t))Make a large varied landscape with mountain chains and sparse ruins. The default 512 by 512 world spans sixty-four LUFT chunks. STREAMING-P wraps it in a seven-by-seven camera-driven window: full bevel nearby, medial terrain in the middle ring, and exact coplanar compression in the outer ring.
(pathname &key (seconds 8) (frame-rate 24))The maximum of compatible quantities.
Convert one scalar float or unsigned value to a 32-bit float.
The shared-point rule of #RUAWR5 is compact and watertight, but it gives every incident chamfer strip only one place to end at a mixed vertex. At the wall-side step this truncates a strip which should continue around the meeting: the long miter collapses into a narrow triangular fighter shape. That is the coherent…
images/luft-arcade.png A cube world's reputation for making only boxes is a reputation for having no vocabulary. A round-headed opening is a column of cleared cells whose height follows a circle; a tower is a disc repeated up Z; a corbel is a course that oversails the one below. Each is a dozen lines…
images/luft-clay-pillow.png The one survivor of #A7BV7E, kept as the :clay style (luft/render/clay.lisp), because it meets the standard the classified field failed: the field is its definition. Every solid cell is a rounded box -- the cell's box shrunk by the radius, its distance lowered by the radius -- and the…
The miter study of #Z5NDTA retains the exact #xCD wall termination alongside five-, six-, and seven-cell junctions. Two named captures use the production renderer, the normal 0.11-cell chamfer width, one camera, and construction ink as the only changed variable. They are diagnostic fixtures, not approved goldens.
Reproducible
luftplates and short upright cuts. Still images own the exact scene and camera being studied; films keep motion and cleanup inluft's existing film owners. #Z5NDTA #SY26PO #2TQEBB