# Counterweight Trebuchet (Medieval Siege and Castle Defence)

Six metre counterweight trebuchet on a timber bed, with a rocking throwing arm, a hinged stone counterweight box and a windlass.

- **URL:** https://3dassets.dev/assets/medieval-siege-and-castle-defence-counterweight-trebuc-28bdf307
- **GLB (direct, CORS *, immutable):** https://cdn.3dassets.dev/assets/28848/v1/model.glb
- **Download (counted):** https://3dassets.dev/download/medieval-siege-and-castle-defence-counterweight-trebuc-28bdf307
- **Licence:** CC0 1.0 Universal: https://creativecommons.org/publicdomain/zero/1.0/ (no attribution required)
- **Contributor:** 3D Assets (@3dassets): https://3dassets.dev/u/3dassets
- **Category:** Props & Furniture
- **Tags:** Medieval, Low Poly, Exterior, Animated
- **Geometry:** 772 triangles, 2,316 vertices, 8 meshes, 5 materials, 0 textures
- **Size (m):** 4.036 × 4.899 × 6.723
- **Animations:** throw
- **File size:** 0.04 MB
- **Downloads:** 0
- **AI used (contributor-reported):** yes; model: Claude Fable 5.1

## About

The heavy engine of the siege. Two A-frames on a bedded timber sole carry an iron axle, and a single oak beam hangs on it with a hinged limestone counterweight box on the short arm and a loaded sling pouch at the long tip. The throw clip rocks the arm through the armed and the loosed extremes about its own axle. The sling and its release hook are a linkage that a rigid node transform cannot carry, so they are modelled loaded and left still; the armed and loosed variants bake the deeper poses. Dimensions 4.04 × 4.90 × 6.72 m (X × Y × Z). Ground-contact origin under the footprint. Metre units, +Y up, +Z forward. Kingdom limestone, ashlar, timber, oak, iron, cloth, slate and straw, the palette shared with the castle construction and faction building packs. Rigid node-transform clips throw turn named parts on their own pivots. No skinning, no skeleton, no collision or navigation data.

## Use with three.js

```js
import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'
import { AnimationMixer } from 'three'

let mixer

const loader = new GLTFLoader()
loader.load('https://cdn.3dassets.dev/assets/28848/v1/model.glb', (gltf) => {
  scene.add(gltf.scene)
  mixer = new AnimationMixer(gltf.scene)
  mixer.clipAction(gltf.animations[0]).play()
})

// Call from your render loop; deltaSeconds is time since the previous frame.
function updateAssetAnimation(deltaSeconds) {
  mixer?.update(deltaSeconds)
}
```

## React Three Fiber

```jsx
import { useGLTF, useAnimations } from '@react-three/drei'
import { useEffect } from 'react'

export function CounterweightTrebuchetMedievalSiegeAndCastleDefence(props) {
  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/28848/v1/model.glb')
  const { actions, names } = useAnimations(animations, scene)
  useEffect(() => {
    const action = actions[names[0]]
    action?.reset().play()
    return () => { action?.stop() }
  }, [actions, names])
  return <primitive object={scene} {...props} />
}
useGLTF.preload('https://cdn.3dassets.dev/assets/28848/v1/model.glb')
```

## <model-viewer>

```html
<model-viewer src="https://cdn.3dassets.dev/assets/28848/v1/model.glb" alt="Counterweight Trebuchet (Medieval Siege and Castle Defence)" camera-controls auto-rotate autoplay></model-viewer>
```

## Blender

```python
# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.
import bpy
bpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/28848/v1/model.glb
# Metres and +Y up are converted to Blender's Z-up scene automatically.
# Clips arrive as actions; play them from the Dope Sheet > Action Editor.
```

## Godot

```gdscript
# Godot 4: copy model.glb into res://models/ and the editor imports it as a scene.
var packed := load("res://models/model.glb") as PackedScene
var model := packed.instantiate()
add_child(model)
var player := model.find_child("AnimationPlayer", true, false) as AnimationPlayer
player.play(player.get_animation_list()[0])
```

## Unity

```csharp
// Unity: import model.glb with glTFast (Package Manager: com.unity.cloud.gltfast) and drag the prefab in,
// or load it at runtime straight from the CDN:
using GLTFast;
var gltf = new GltfImport();
if (await gltf.Load("https://cdn.3dassets.dev/assets/28848/v1/model.glb")) await gltf.InstantiateMainSceneAsync(transform);
// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first.
```

---
JSON: https://3dassets.dev/api/v1/assets/medieval-siege-and-castle-defence-counterweight-trebuc-28bdf307 · Loads with a plain GLTFLoader: no Draco/KTX2 loaders needed.