Trebuchet
A counterweight trebuchet about 10 m tall at size 1: twin braced A-frames carry a 10 m beam with a hinged weight box on the short end and a rope sling on the long end. userData.tick drops the counterweight, whips the arm over toward +Z and winches it back down once per loop (arm and counterweight rotate on x; the weight box and sling stay hanging plumb).
- Size
- 5.5 × 6.4 × 10.8 m
- Triangles
- 1,004
- Kit
- Castle
Tune it
4 knobs: Wood, Counterweight, Wheels, Size.
Specs
- Size
- 5.5 × 6.4 × 10.8 m width × height × depth
- Triangles
- 1,004 of 6,000
- Draw calls
- 1 one vertex-colour material
- Loop clip
- 1 m of travel per cycle
- Moving parts
- 4 arm · rotate, counterweight · rotate, sling · rotate, winch · spin
- Knobs
- 4 3 presets
- Night lights
- 0 none
Passed the validator: real scale, rests on y = 0, front faces +Z, deterministic.
Use it
Code for the specimen as it is set up above; it follows your knobs.
import { createAsset } from 'https://gaitkit.com/cdn/trebuchet.mjs';
const trebuchet = createAsset();
scene.add(trebuchet); // rests on y = 0, front faces +Z
// 'arm' pivots on its hinge: -34.5° to 118° around x
trebuchet.getObjectByName('arm').rotation.x = THREE.MathUtils.degToRad(-34.5);import { useMemo } from 'react';
import { createAsset } from 'https://gaitkit.com/cdn/trebuchet.mjs';
export function Trebuchet() {
const model = useMemo(() => createAsset(), []);
return <primitive object={model} />;
}# Import trebuchet.glb (download below). Moving parts are separate nodes, pivoted on their hinge.
$Trebuchet/arm.rotation_degrees.x = -34.5// Import trebuchet.glb with glTFast (com.unity.cloud.gltfast).
transform.Find("arm").localEulerAngles = new Vector3(/* x: */ -34.5, 0, 0);Use the gaitkit MCP server: get_variant({ "id": "trebuchet", "want": "default look" })
then place the result.
# MCP endpoint
https://gaitkit.com/mcpKnobs
| Knob | Type | Values | Default | What it does |
|---|---|---|---|---|
wood | choice | oak pine weathered dark | oak | Timber tone: oak (warm brown), pine (light, freshly built), weathered (silver-grey), dark (tarred). |
weight | choice | crate basket | crate | crate (a timber box heaped with stones) or basket (a round wicker basket of rocks hung in rope). |
wheels | toggle | on / off | false | Six solid wheels under the base so it can be hauled into position. Off rests the base on the ground. |
size | range | 0.6 to 1.3, step 0.05 | 1 | Overall scale. 1 has the pivot 5 m up and a 10 m arm; 0.6 is a small field trebuchet, 1.3 a huge castle-breaker. |
Presets: castle breaker {"size":1.3,"wood":"dark"} · field trebuchet {"size":0.65,"weight":"basket","wheels":true,"wood":"pine"} · old warhorse {"wood":"weathered","weight":"basket"}
Files
| File | What |
|---|---|
| trebuchet.glb | GLB, default look · 152 KB |
| trebuchet.mjs | ES module, every knob live |
| trebuchet.obj | OBJ, static, no colour |
| trebuchet-params.json | knob schema, presets, night zones |
Licence
Use it in games, apps, renders and client work, commercially and without credit. Do not resell it as an asset or train a 3D generator on it. The full licence.