# Ventilator shaft run, 3 m (Botanical Glasshouse and Palm House)

Three metre length of ventilator line shaft on two cast iron hanger brackets, with a crank arm and a connecting link to the ridge lights, and a shaft that turns. Ports both ends so the line runs the length of a house.

- **URL:** https://3dassets.dev/assets/botanical-glasshouse-and-palm-house-botanical-glasshou-2a3e3df1
- **GLB (direct, CORS *, immutable):** https://cdn.3dassets.dev/assets/38548/v1/model.glb
- **Download (counted):** https://3dassets.dev/download/botanical-glasshouse-and-palm-house-botanical-glasshou-2a3e3df1
- **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:** Historical, Realistic, Interior, Modular, Animated
- **Geometry:** 128 triangles, 292 vertices, 3 meshes, 2 materials, 0 textures
- **Size (m):** 3 × 0.575 × 0.39
- **Animations:** shaft-spin
- **File size:** 0.01 MB
- **Downloads:** 0
- **AI used (contributor-reported):** yes; model: Claude Opus 5

## About

Three metre length of ventilator line shaft on two cast iron hanger brackets, with a crank arm and a connecting link to the ridge lights, and a shaft that turns. Ports both ends so the line runs the length of a house. Overall 3.00 by 0.57 by 0.39 m (X by Y by Z). Metre units, +Y up, the working face toward +Z, with a free origin as described below. The origin sits on the shaft centre line at the middle of the run, because the piece hangs from the roof structure rather than standing on anything; the brackets reach up to the purlin above. Rigid node-transform clips: shaft-spin. No skinning. No collision or navigation data. Original CC0 geometry: no botanic garden, palm house, horticultural society, nursery or seed house is named or depicted, no real building is reproduced, and every label, board and plate face is blank.

## 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/38548/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 VentilatorShaftRun3MBotanicalGlasshouseAndPalmHouse(props) {
  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/38548/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/38548/v1/model.glb')
```

## <model-viewer>

```html
<model-viewer src="https://cdn.3dassets.dev/assets/38548/v1/model.glb" alt="Ventilator shaft run, 3 m (Botanical Glasshouse and Palm House)" 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/38548/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/38548/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/botanical-glasshouse-and-palm-house-botanical-glasshou-2a3e3df1 · Loads with a plain GLTFLoader: no Draco/KTX2 loaders needed.