# Taxi Cab

> A stylized full-size yellow taxi cab with a glowing TAXI roof sign, a black-and-white checker stripe along both sides, chrome grille, tinted windows and emissive head and tail lights. The four wheels are separate groups (wheelFL, wheelFR, wheelRL, wheelRR) with axles along X, ready to spin. Toggle the checker stripe and the sign light; great for city traffic, street scenes and driving games.

![Taxi Cab preview](https://codels.download/m/taxi.png)

Multi-view sheet (3/4, front, side, top): https://codels.download/m/taxi.sheet.png

## Facts

- Category: Vehicles › Cars & Trucks
- Size (W × H × D): 1.96 × 1.73 × 5.18 m — units are meters, +Y up, front faces +Z
- Origin: center of the base (y = 0)
- Triangles: 2,672 · Meshes: 210 · Materials: 10
- License: CC0-1.0 (Codels built-in)
- Tags: car, public-transport, sedan, taxi, traffic, low-poly, stylized, modern, city, road, city-builder, racing-game, vehicle, emissive, game-ready, parametric, color-gray, color-yellow, size-large, poly-medium
- Page: https://codels.download/models/taxi

## Files

| Format | URL |
|---|---|
| three.js ES module (`createTaxi()`) | https://codels.download/m/taxi.js |
| React Three Fiber component (`<Taxi />`) | https://codels.download/m/taxi.jsx |
| Instancing module (`createTaxiInstances(count, place)`, one draw call per material) | https://codels.download/m/taxi.instanced.js |
| Standalone HTML demo | https://codels.download/m/taxi.html |
| glTF binary | https://codels.download/m/taxi.glb |
| glTF binary, Meshopt-compressed (2–3× smaller; GLTFLoader needs `setMeshoptDecoder(MeshoptDecoder)`) | https://codels.download/m/taxi.glb?compress=meshopt |
| glTF JSON | https://codels.download/m/taxi.gltf |
| OBJ (vertex colors) + MTL | https://codels.download/m/taxi.obj · https://codels.download/m/taxi.mtl |
| STL | https://codels.download/m/taxi.stl |
| CodelSpec JSON | https://codels.download/m/taxi.json |

## Parameters

Append them as query parameters to any URL above to get a customized variant (e.g. `?bodyColor=...`).

| Param | Type | Range / options | Default | Current |
|---|---|---|---|---|
| `bodyColor` | color | #rrggbb | #f2c21b | #f2c21b |
| `checker` | boolean | true \| false | true | true |
| `signLit` | boolean | true \| false | true | true |

## Parts

- body (group)
  - lowerBody (extrude · paint)
  - chassis (box · trim)
  - cabin (extrude · paint)
  - windowFL (extrude · glass)
  - windowRL (extrude · glass)
  - windowFR (extrude · glass)
  - windowRR (extrude · glass)
  - windshield (box · glass)
  - rearWindow (box · glass)
  - headlightL (box · headlight)
  - indicatorL (box · amber)
  - taillightL (box · taillight)
  - mirrorL (box · paint)
  - skirtL (box · trim)
  - headlightR (box · headlight)
  - indicatorR (box · amber)
  - taillightR (box · taillight)
  - mirrorR (box · paint)
  - skirtR (box · trim)
  - grille (box · chrome)
  - bumperFront (box · trim)
  - bumperRear (box · trim)
  - plateFront (box · chrome)
  - plateRear (box · chrome)
  - roofSign (group)
    - signBase (box · trim)
    - signBox (extrude · sign)
    - signCap (box · paint)
  - checkerL (plane · white)
  - checkerR (plane · white)
- wheels (group)
  - wheelFL (group)
    - tire (lathe · trim)
    - rim (cylinder · steel)
    - hubcap (cylinder · chrome)
    - centerCap (cylinder · trim)
  - wheelFR (group)
    - tire (lathe · trim)
    - rim (cylinder · steel)

## How to use

Save the code below as `taxi.js`, then:

```js
import { createTaxi } from './taxi.js';
const model = createTaxi();
scene.add(model);
```

## Code

```js
/**
 * Taxi Cab — Codels 3D model library (https://codels.download/models/taxi)
 * License: CC0-1.0 · Units: meters · Y-up · Front: +Z · Origin: center of the base (y = 0)
 * Triangles: 2,672 · Size (W × H × D): 1.96 × 1.73 × 5.18 m
 *
 * Usage:
 *   import { createTaxi } from './taxi.js';
 *   
 *   const model = createTaxi();
 *   model.position.set(0, 0, 0);
 *   scene.add(model);
 */
import * as THREE from 'three';

const deg = THREE.MathUtils.degToRad;

// Revolve a 2D profile [[radius, y], ...] around the Y axis.
function lathe(points, segments, phiStart = 0, phiLength = Math.PI * 2) {
  return new THREE.LatheGeometry(points.map(([x, y]) => new THREE.Vector2(x, y)), segments, phiStart, phiLength);
}

// Extrude a 2D outline along Z (centered). bevel = [thickness, size, segments].
function extrude(outline, depth, holes = [], bevel = null) {
  const shape = new THREE.Shape(outline.map(([x, y]) => new THREE.Vector2(x, y)));
  for (const hole of holes) shape.holes.push(new THREE.Path(hole.map(([x, y]) => new THREE.Vector2(x, y))));
  const options = bevel
    ? { depth, bevelEnabled: true, bevelThickness: bevel[0], bevelSize: bevel[1], bevelSegments: bevel[2] }
    : { depth, bevelEnabled: false };
  return new THREE.ExtrudeGeometry(shape, options).translate(0, 0, -depth / 2);
}

export function createTaxi() {
  const root = new THREE.Group();
  root.name = 'Taxi';

  // Materials
  const paintMat = new THREE.MeshStandardMaterial({ name: 'paint', color: 0xf2c21b, roughness: 0.45, metalness: 0.12, flatShading: true });
  const glassMat = new THREE.MeshStandardMaterial({ name: 'glass', color: 0x2a3644, roughness: 0.2, metalness: 0.3, flatShading: true });
  const trimMat = new THREE.MeshStandardMaterial({ name: 'trim', color: 0x222428, roughness: 0.8, flatShading: true });
  const chromeMat = new THREE.MeshStandardMaterial({ name: 'chrome', color: 0xc9cdd3, roughness: 0.3, metalness: 0.65, flatShading: true });
  const steelMat = new THREE.MeshStandardMaterial({ name: 'steel', color: 0x5b6068, roughness: 0.55, metalness: 0.4, flatShading: true });
  const whiteMat = new THREE.MeshStandardMaterial({ name: 'white', color: 0xf2f2ee, roughness: 0.55, flatShading: true });
  const headlightMat = new THREE.MeshStandardMaterial({ name: 'headlight', color: 0xfff4d6, roughness: 0.3, emissive: 0xffe2a0, emissiveIntensity: 0.9, flatShading: true });
  const taillightMat = new THREE.MeshStandardMaterial({ name: 'taillight', color: 0xd81e28, roughness: 0.3, emissive: 0xff2020, emissiveIntensity: 0.7, flatShading: true });
  const amberMat = new THREE.MeshStandardMaterial({ name: 'amber', color: 0xf59a23, roughness: 0.3, emissive: 0xff8a10, emissiveIntensity: 0.6, flatShading: true });
  const signMat = new THREE.MeshStandardMaterial({ name: 'sign', color: 0xfff6c8, roughness: 0.4, emissive: 0xffe58a, emissiveIntensity: 0.85, flatShading: true });

  // Shared geometries
  const extrudeGeo = extrude([[0.8473, 1], [0.3964, 1.37], [-0.17, 1.37], [-0.17, 1]], 0.02);
  const extrudeGeo2 = extrude([[-0.27, 1], [-0.27, 1.37], [-0.8379, 1.37], [-1.2368, 1]], 0.02);
  const boxGeo = new THREE.BoxGeometry(0.38, 0.13, 0.05);
  const boxGeo2 = new THREE.BoxGeometry(0.12, 0.08, 0.05);
  const boxGeo3 = new THREE.BoxGeometry(0.42, 0.13, 0.05);
  const boxGeo4 = new THREE.BoxGeometry(0.13, 0.09, 0.15);
  const boxGeo5 = new THREE.BoxGeometry(0.006, 0.6, 0.014);
  const boxGeo6 = new THREE.BoxGeometry(0.02, 0.03, 0.14);
  const boxGeo7 = new THREE.BoxGeometry(0.05, 0.1, 1.95);
  const boxGeo8 = new THREE.BoxGeometry(0.7, 0.025, 0.02);
  const boxGeo9 = new THREE.BoxGeometry(1.96, 0.17, 0.24);
  const boxGeo10 = new THREE.BoxGeometry(0.36, 0.11, 0.02);
  const boxGeo11 = new THREE.BoxGeometry(0.085, 0.022, 0.008);
  const boxGeo12 = new THREE.BoxGeometry(0.022, 0.1, 0.008);
  const boxGeo13 = new THREE.BoxGeometry(0.022, 0.1048, 0.008);
  const boxGeo14 = new THREE.BoxGeometry(0.051, 0.022, 0.008);
  const boxGeo15 = new THREE.BoxGeometry(0.022, 0.1182, 0.008);
  const planeGeo = new THREE.PlaneGeometry(4.08, 0.12);
  const planeGeo2 = new THREE.PlaneGeometry(0.06, 0.06);
  const latheGeo = lathe([[0.2232, -0.095], [0.2232, -0.125], [0.3215, -0.125], [0.36, -0.07], [0.36, 0.07], [0.3215, 0.125], [0.2232, 0.125], [0.2232, 0.095]], 14, 0.2244, Math.PI * 2);
  const cylinderGeo = new THREE.CylinderGeometry(0.2232, 0.2232, 0.19, 14);
  const cylinderGeo2 = new THREE.CylinderGeometry(0.183, 0.2187, 0.03, 14);
  const cylinderGeo3 = new THREE.CylinderGeometry(0.0558, 0.0714, 0.03, 8);

  // Parts
  const body = new THREE.Group();
  body.name = 'body';
  root.add(body);
  const lowerBody = new THREE.Mesh(extrude([[2.36, 0.26], [2.44, 0.36], [2.45, 0.7], [2.38, 0.84], [1.9, 0.9], [1.1, 0.95], [-1.5, 0.96], [-2.3, 0.95], [-2.42, 0.86], [-2.45, 0.42], [-2.36, 0.26], [-1.8785, 0.26], [-1.8793, 0.4563], [-1.7947, 0.6335], [-1.6414, 0.7562], [-1.45, 0.8], [-1.2586, 0.7562], [-1.1053, 0.6335], [-1.0207, 0.4563], [-1.0215, 0.26], [1.0215, 0.26], [1.0207, 0.4563], [1.1053, 0.6335], [1.2586, 0.7562], [1.45, 0.8], [1.6414, 0.7562], [1.7947, 0.6335], [1.8793, 0.4563], [1.8785, 0.26]], 1.82, [], [0.04, 0.04, 2]), paintMat);
  lowerBody.name = 'lowerBody';
  lowerBody.rotation.set(0, deg(-90), 0);
  body.add(lowerBody);
  const chassis = new THREE.Mesh(new THREE.BoxGeometry(1.3, 0.5, 4.4), trimMat);
  chassis.name = 'chassis';
  chassis.position.set(0, 0.56, 0);
  body.add(chassis);
  const cabin = new THREE.Mesh(extrude([[1.1, 0.88], [0.4, 1.43], [-0.85, 1.43], [-1.45, 0.9]], 1.5, [], [0.05, 0.05, 2]), paintMat);
  cabin.name = 'cabin';
  cabin.rotation.set(0, deg(-90), 0);
  body.add(cabin);
  const windowFL = new THREE.Mesh(extrudeGeo, glassMat);
  windowFL.name = 'windowFL';
  windowFL.position.set(0.805, 0, 0);
  windowFL.rotation.set(0, deg(-90), 0);
  body.add(windowFL);
  const windowRL = new THREE.Mesh(extrudeGeo2, glassMat);
  windowRL.name = 'windowRL';
  windowRL.position.set(0.805, 0, 0);
  windowRL.rotation.set(0, deg(-90), 0);
  body.add(windowRL);
  const windowFR = new THREE.Mesh(extrudeGeo, glassMat);
  windowFR.name = 'windowFR';
  windowFR.position.set(-0.805, 0, 0);
  windowFR.rotation.set(0, deg(-90), 0);
  body.add(windowFR);
  const windowRR = new THREE.Mesh(extrudeGeo2, glassMat);
  windowRR.name = 'windowRR';
  windowRR.position.set(-0.805, 0, 0);
  windowRR.rotation.set(0, deg(-90), 0);
  body.add(windowRR);
  const windshield = new THREE.Mesh(new THREE.BoxGeometry(1.42, 0.02, 0.6636), glassMat);
  windshield.name = 'windshield';
  windshield.position.set(0, 1.2253, 0.7641);
  windshield.rotation.set(deg(-141.8428), 0, 0);
  body.add(windshield);
  const rearWindow = new THREE.Mesh(new THREE.BoxGeometry(1.42, 0.02, 0.5891), glassMat);
  rearWindow.name = 'rearWindow';
  rearWindow.position.set(0, 1.243, -1.1584);
  rearWindow.rotation.set(deg(138.5448), 0, 0);
  body.add(rearWindow);
  const headlightL = new THREE.Mesh(boxGeo, headlightMat);
  headlightL.name = 'headlightL';
  headlightL.position.set(0.64, 0.62, 2.49);
  body.add(headlightL);
  const indicatorL = new THREE.Mesh(boxGeo2, amberMat);
  indicatorL.name = 'indicatorL';
  indicatorL.position.set(0.86, 0.47, 2.47);
  body.add(indicatorL);
  const taillightL = new THREE.Mesh(boxGeo3, taillightMat);
  taillightL.name = 'taillightL';
  taillightL.position.set(0.6, 0.78, -2.49);
  body.add(taillightL);
  const mirrorL = new THREE.Mesh(boxGeo4, paintMat);
  mirrorL.name = 'mirrorL';
  mirrorL.position.set(0.88, 1.04, 0.8);
  body.add(mirrorL);
  const box15 = new THREE.Mesh(boxGeo5, trimMat);
  box15.position.set(0.953, 0.62, 1);
  body.add(box15);
  const box16 = new THREE.Mesh(boxGeo5, trimMat);
  box16.position.set(0.953, 0.62, -0.22);
  body.add(box16);
  const box17 = new THREE.Mesh(boxGeo5, trimMat);
  box17.position.set(0.953, 0.62, -1.05);
  body.add(box17);
  const box18 = new THREE.Mesh(boxGeo6, chromeMat);
  box18.position.set(0.96, 0.84, 0.42);
  body.add(box18);
  const box19 = new THREE.Mesh(boxGeo6, chromeMat);
  box19.position.set(0.96, 0.84, -0.62);
  body.add(box19);
  const skirtL = new THREE.Mesh(boxGeo7, trimMat);
  skirtL.name = 'skirtL';
  skirtL.position.set(0.94, 0.27, 0);
  body.add(skirtL);
  const headlightR = new THREE.Mesh(boxGeo, headlightMat);
  headlightR.name = 'headlightR';
  headlightR.position.set(-0.64, 0.62, 2.49);
  body.add(headlightR);
  const indicatorR = new THREE.Mesh(boxGeo2, amberMat);
  indicatorR.name = 'indicatorR';
  indicatorR.position.set(-0.86, 0.47, 2.47);
  body.add(indicatorR);
  const taillightR = new THREE.Mesh(boxGeo3, taillightMat);
  taillightR.name = 'taillightR';
  taillightR.position.set(-0.6, 0.78, -2.49);
  body.add(taillightR);
  const mirrorR = new THREE.Mesh(boxGeo4, paintMat);
  mirrorR.name = 'mirrorR';
  mirrorR.position.set(-0.88, 1.04, 0.8);
  body.add(mirrorR);
  const box25 = new THREE.Mesh(boxGeo5, trimMat);
  box25.position.set(-0.953, 0.62, 1);
  body.add(box25);
  const box26 = new THREE.Mesh(boxGeo5, trimMat);
  box26.position.set(-0.953, 0.62, -0.22);
  body.add(box26);
  const box27 = new THREE.Mesh(boxGeo5, trimMat);
  box27.position.set(-0.953, 0.62, -1.05);
  body.add(box27);
  const box28 = new THREE.Mesh(boxGeo6, chromeMat);
  box28.position.set(-0.96, 0.84, 0.42);
  body.add(box28);
  const box29 = new THREE.Mesh(boxGeo6, chromeMat);
  box29.position.set(-0.96, 0.84, -0.62);
  body.add(box29);
  const skirtR = new THREE.Mesh(boxGeo7, trimMat);
  skirtR.name = 'skirtR';
  skirtR.position.set(-0.94, 0.27, 0);
  body.add(skirtR);
  const grille = new THREE.Mesh(new THREE.BoxGeometry(0.78, 0.18, 0.04), chromeMat);
  grille.name = 'grille';
  grille.position.set(0, 0.6, 2.495);
  body.add(grille);
  const box32 = new THREE.Mesh(boxGeo8, trimMat);
  box32.position.set(0, 0.54, 2.52);
  body.add(box32);
  const box33 = new THREE.Mesh(boxGeo8, trimMat);
  box33.position.set(0, 0.6, 2.52);
  body.add(box33);
  const box34 = new THREE.Mesh(boxGeo8, trimMat);
  box34.position.set(0, 0.66, 2.52);
  body.add(box34);
  const bumperFront = new THREE.Mesh(boxGeo9, trimMat);
  bumperFront.name = 'bumperFront';
  bumperFront.position.set(0, 0.34, 2.46);
  body.add(bumperFront);
  const bumperRear = new THREE.Mesh(boxGeo9, trimMat);
  bumperRear.name = 'bumperRear';
  bumperRear.position.set(0, 0.36, -2.46);
  body.add(bumperRear);
  const plateFront = new THREE.Mesh(boxGeo10, chromeMat);
  plateFront.name = 'plateFront';
  plateFront.position.set(0, 0.34, 2.59);
  body.add(plateFront);
  const plateRear = new THREE.Mesh(boxGeo10, chromeMat);
  plateRear.name = 'plateRear';
  plateRear.position.set(0, 0.56, -2.502);
  body.add(plateRear);
  const roofSign = new THREE.Group();
  roofSign.name = 'roofSign';
  roofSign.position.set(0, 1.476, -0.22);
  body.add(roofSign);
  const signBase = new THREE.Mesh(new THREE.BoxGeometry(0.5, 0.04, 0.18), trimMat);
  signBase.name = 'signBase';
  signBase.position.set(0, 0.02, 0);
  roofSign.add(signBase);
  const signBox = new THREE.Mesh(extrude([[-0.33, 0], [0.33, 0], [0.27, 0.2], [-0.27, 0.2]], 0.2), signMat);
  signBox.name = 'signBox';
  signBox.position.set(0, 0.035, 0);
  roofSign.add(signBox);
  const signCap = new THREE.Mesh(new THREE.BoxGeometry(0.56, 0.02, 0.18), paintMat);
  signCap.name = 'signCap';
  signCap.position.set(0, 0.245, 0);
  roofSign.add(signCap);
  const box43 = new THREE.Mesh(boxGeo11, trimMat);
  box43.position.set(-0.1725, 0.174, 0.104);
  roofSign.add(box43);
  const box44 = new THREE.Mesh(boxGeo12, trimMat);
  box44.position.set(-0.1725, 0.135, 0.104);
  roofSign.add(box44);
  const box45 = new THREE.Mesh(boxGeo13, trimMat);
  box45.position.set(-0.0733, 0.135, 0.104);
  box45.rotation.set(0, 0, deg(-17.4844));
  roofSign.add(box45);
  const box46 = new THREE.Mesh(boxGeo13, trimMat);
  box46.position.set(-0.0417, 0.135, 0.104);
  box46.rotation.set(0, 0, deg(17.4844));
  roofSign.add(box46);
  const box47 = new THREE.Mesh(boxGeo14, trimMat);
  box47.position.set(-0.0575, 0.123, 0.104);
  roofSign.add(box47);
  const box48 = new THREE.Mesh(boxGeo15, trimMat);
  box48.position.set(0.0575, 0.135, 0.104);
  box48.rotation.set(0, 0, deg(32.2109));
  roofSign.add(box48);
  const box49 = new THREE.Mesh(boxGeo15, trimMat);
  box49.position.set(0.0575, 0.135, 0.104);
  box49.rotation.set(0, 0, deg(-32.2109));
  roofSign.add(box49);
  const box50 = new THREE.Mesh(boxGeo12, trimMat);
  box50.position.set(0.1725, 0.135, 0.104);
  roofSign.add(box50);
  const box51 = new THREE.Mesh(boxGeo11, trimMat);
  box51.position.set(0.1725, 0.174, -0.104);
  roofSign.add(box51);
  const box52 = new THREE.Mesh(boxGeo12, trimMat);
  box52.position.set(0.1725, 0.135, -0.104);
  roofSign.add(box52);
  const box53 = new THREE.Mesh(boxGeo13, trimMat);
  box53.position.set(0.0733, 0.135, -0.104);
  box53.rotation.set(0, 0, deg(17.4844));
  roofSign.add(box53);
  const box54 = new THREE.Mesh(boxGeo13, trimMat);
  box54.position.set(0.0418, 0.135, -0.104);
  box54.rotation.set(0, 0, deg(-17.4844));
  roofSign.add(box54);
  const box55 = new THREE.Mesh(boxGeo14, trimMat);
  box55.position.set(0.0575, 0.123, -0.104);
  roofSign.add(box55);
  const box56 = new THREE.Mesh(boxGeo15, trimMat);
  box56.position.set(-0.0575, 0.135, -0.104);
  box56.rotation.set(0, 0, deg(-32.2109));
  roofSign.add(box56);
  const box57 = new THREE.Mesh(boxGeo15, trimMat);
  box57.position.set(-0.0575, 0.135, -0.104);
  box57.rotation.set(0, 0, deg(32.2109));
  roofSign.add(box57);
  const box58 = new THREE.Mesh(boxGeo12, trimMat);
  box58.position.set(-0.1725, 0.135, -0.104);
  roofSign.add(box58);
  const checkerL = new THREE.Mesh(planeGeo, whiteMat);
  checkerL.name = 'checkerL';
  checkerL.position.set(0.952, 0.84, -0.18);
  checkerL.rotation.set(0, deg(90), 0);
  body.add(checkerL);
  const plane60 = new THREE.Mesh(planeGeo2, trimMat);
  plane60.position.set(0.954, 0.84, -2.19);
  plane60.rotation.set(0, deg(90), 0);
  body.add(plane60);
  const plane61 = new THREE.Mesh(planeGeo2, trimMat);
  plane61.position.set(0.954, 0.84, -2.07);
  plane61.rotation.set(0, deg(90), 0);
  body.add(plane61);
  const plane62 = new THREE.Mesh(planeGeo2, trimMat);
  plane62.position.set(0.954, 0.84, -1.95);
  plane62.rotation.set(0, deg(90), 0);
  body.add(plane62);
  const plane63 = new THREE.Mesh(planeGeo2, trimMat);
  plane63.position.set(0.954, 0.84, -1.83);
  plane63.rotation.set(0, deg(90), 0);
  body.add(plane63);
  const plane64 = new THREE.Mesh(planeGeo2, trimMat);
  plane64.position.set(0.954, 0.84, -1.71);
  plane64.rotation.set(0, deg(90), 0);
  body.add(plane64);
  const plane65 = new THREE.Mesh(planeGeo2, trimMat);
  plane65.position.set(0.954, 0.84, -1.59);
  plane65.rotation.set(0, deg(90), 0);
  body.add(plane65);
  const plane66 = new THREE.Mesh(planeGeo2, trimMat);
  plane66.position.set(0.954, 0.84, -1.47);
  plane66.rotation.set(0, deg(90), 0);
  body.add(plane66);
  const plane67 = new THREE.Mesh(planeGeo2, trimMat);
  plane67.position.set(0.954, 0.84, -1.35);
  plane67.rotation.set(0, deg(90), 0);
  body.add(plane67);
  const plane68 = new THREE.Mesh(planeGeo2, trimMat);
  plane68.position.set(0.954, 0.84, -1.23);
  plane68.rotation.set(0, deg(90), 0);
  body.add(plane68);
  const plane69 = new THREE.Mesh(planeGeo2, trimMat);
  plane69.position.set(0.954, 0.84, -1.11);
  plane69.rotation.set(0, deg(90), 0);
  body.add(plane69);
  const plane70 = new THREE.Mesh(planeGeo2, trimMat);
  plane70.position.set(0.954, 0.84, -0.99);
  plane70.rotation.set(0, deg(90), 0);
  body.add(plane70);
  const plane71 = new THREE.Mesh(planeGeo2, trimMat);
  plane71.position.set(0.954, 0.84, -0.87);
  plane71.rotation.set(0, deg(90), 0);
  body.add(plane71);
  const plane72 = new THREE.Mesh(planeGeo2, trimMat);
  plane72.position.set(0.954, 0.84, -0.75);
  plane72.rotation.set(0, deg(90), 0);
  body.add(plane72);
  const plane73 = new THREE.Mesh(planeGeo2, trimMat);
  plane73.position.set(0.954, 0.84, -0.63);
  plane73.rotation.set(0, deg(90), 0);
  body.add(plane73);
  const plane74 = new THREE.Mesh(planeGeo2, trimMat);
  plane74.position.set(0.954, 0.84, -0.51);
  plane74.rotation.set(0, deg(90), 0);
  body.add(plane74);
  const plane75 = new THREE.Mesh(planeGeo2, trimMat);
  plane75.position.set(0.954, 0.84, -0.39);
  plane75.rotation.set(0, deg(90), 0);
  body.add(plane75);
  const plane76 = new THREE.Mesh(planeGeo2, trimMat);
  plane76.position.set(0.954, 0.84, -0.27);
  plane76.rotation.set(0, deg(90), 0);
  body.add(plane76);
  const plane77 = new THREE.Mesh(planeGeo2, trimMat);
  plane77.position.set(0.954, 0.84, -0.15);
  plane77.rotation.set(0, deg(90), 0);
  body.add(plane77);
  const plane78 = new THREE.Mesh(planeGeo2, trimMat);
  plane78.position.set(0.954, 0.84, -0.03);
  plane78.rotation.set(0, deg(90), 0);
  body.add(plane78);
  const plane79 = new THREE.Mesh(planeGeo2, trimMat);
  plane79.position.set(0.954, 0.84, 0.09);
  plane79.rotation.set(0, deg(90), 0);
  body.add(plane79);
  const plane80 = new THREE.Mesh(planeGeo2, trimMat);
  plane80.position.set(0.954, 0.84, 0.21);
  plane80.rotation.set(0, deg(90), 0);
  body.add(plane80);
  const plane81 = new THREE.Mesh(planeGeo2, trimMat);
  plane81.position.set(0.954, 0.84, 0.33);
  plane81.rotation.set(0, deg(90), 0);
  body.add(plane81);
  const plane82 = new THREE.Mesh(planeGeo2, trimMat);
  plane82.position.set(0.954, 0.84, 0.45);
  plane82.rotation.set(0, deg(90), 0);
  body.add(plane82);
  const plane83 = new THREE.Mesh(planeGeo2, trimMat);
  plane83.position.set(0.954, 0.84, 0.57);
  plane83.rotation.set(0, deg(90), 0);
  body.add(plane83);
  const plane84 = new THREE.Mesh(planeGeo2, trimMat);
  plane84.position.set(0.954, 0.84, 0.69);
  plane84.rotation.set(0, deg(90), 0);
  body.add(plane84);
  const plane85 = new THREE.Mesh(planeGeo2, trimMat);
  plane85.position.set(0.954, 0.84, 0.81);
  plane85.rotation.set(0, deg(90), 0);
  body.add(plane85);
  const plane86 = new THREE.Mesh(planeGeo2, trimMat);
  plane86.position.set(0.954, 0.84, 0.93);
  plane86.rotation.set(0, deg(90), 0);
  body.add(plane86);
  const plane87 = new THREE.Mesh(planeGeo2, trimMat);
  plane87.position.set(0.954, 0.84, 1.05);
  plane87.rotation.set(0, deg(90), 0);
  body.add(plane87);
  const plane88 = new THREE.Mesh(planeGeo2, trimMat);
  plane88.position.set(0.954, 0.84, 1.17);
  plane88.rotation.set(0, deg(90), 0);
  body.add(plane88);
  const plane89 = new THREE.Mesh(planeGeo2, trimMat);
  plane89.position.set(0.954, 0.84, 1.29);
  plane89.rotation.set(0, deg(90), 0);
  body.add(plane89);
  const plane90 = new THREE.Mesh(planeGeo2, trimMat);
  plane90.position.set(0.954, 0.84, 1.41);
  plane90.rotation.set(0, deg(90), 0);
  body.add(plane90);
  const plane91 = new THREE.Mesh(planeGeo2, trimMat);
  plane91.position.set(0.954, 0.84, 1.53);
  plane91.rotation.set(0, deg(90), 0);
  body.add(plane91);
  const plane92 = new THREE.Mesh(planeGeo2, trimMat);
  plane92.position.set(0.954, 0.84, 1.65);
  plane92.rotation.set(0, deg(90), 0);
  body.add(plane92);
  const plane93 = new THREE.Mesh(planeGeo2, trimMat);
  plane93.position.set(0.954, 0.84, 1.77);
  plane93.rotation.set(0, deg(90), 0);
  body.add(plane93);
  const plane94 = new THREE.Mesh(planeGeo2, trimMat);
  plane94.position.set(0.954, 0.9, -2.13);
  plane94.rotation.set(0, deg(90), 0);
  body.add(plane94);
  const plane95 = new THREE.Mesh(planeGeo2, trimMat);
  plane95.position.set(0.954, 0.9, -2.01);
  plane95.rotation.set(0, deg(90), 0);
  body.add(plane95);
  const plane96 = new THREE.Mesh(planeGeo2, trimMat);
  plane96.position.set(0.954, 0.9, -1.89);
  plane96.rotation.set(0, deg(90), 0);
  body.add(plane96);
  const plane97 = new THREE.Mesh(planeGeo2, trimMat);
  plane97.position.set(0.954, 0.9, -1.77);
  plane97.rotation.set(0, deg(90), 0);
  body.add(plane97);
  const plane98 = new THREE.Mesh(planeGeo2, trimMat);
  plane98.position.set(0.954, 0.9, -1.65);
  plane98.rotation.set(0, deg(90), 0);
  body.add(plane98);
  const plane99 = new THREE.Mesh(planeGeo2, trimMat);
  plane99.position.set(0.954, 0.9, -1.53);
  plane99.rotation.set(0, deg(90), 0);
  body.add(plane99);
  const plane100 = new THREE.Mesh(planeGeo2, trimMat);
  plane100.position.set(0.954, 0.9, -1.41);
  plane100.rotation.set(0, deg(90), 0);
  body.add(plane100);
  const plane101 = new THREE.Mesh(planeGeo2, trimMat);
  plane101.position.set(0.954, 0.9, -1.29);
  plane101.rotation.set(0, deg(90), 0);
  body.add(plane101);
  const plane102 = new THREE.Mesh(planeGeo2, trimMat);
  plane102.position.set(0.954, 0.9, -1.17);
  plane102.rotation.set(0, deg(90), 0);
  body.add(plane102);
  const plane103 = new THREE.Mesh(planeGeo2, trimMat);
  plane103.position.set(0.954, 0.9, -1.05);
  plane103.rotation.set(0, deg(90), 0);
  body.add(plane103);
  const plane104 = new THREE.Mesh(planeGeo2, trimMat);
  plane104.position.set(0.954, 0.9, -0.93);
  plane104.rotation.set(0, deg(90), 0);
  body.add(plane104);
  const plane105 = new THREE.Mesh(planeGeo2, trimMat);
  plane105.position.set(0.954, 0.9, -0.81);
  plane105.rotation.set(0, deg(90), 0);
  body.add(plane105);
  const plane106 = new THREE.Mesh(planeGeo2, trimMat);
  plane106.position.set(0.954, 0.9, -0.69);
  plane106.rotation.set(0, deg(90), 0);
  body.add(plane106);
  const plane107 = new THREE.Mesh(planeGeo2, trimMat);
  plane107.position.set(0.954, 0.9, -0.57);
  plane107.rotation.set(0, deg(90), 0);
  body.add(plane107);
  const plane108 = new THREE.Mesh(planeGeo2, trimMat);
  plane108.position.set(0.954, 0.9, -0.45);
  plane108.rotation.set(0, deg(90), 0);
  body.add(plane108);
  const plane109 = new THREE.Mesh(planeGeo2, trimMat);
  plane109.position.set(0.954, 0.9, -0.33);
  plane109.rotation.set(0, deg(90), 0);
  body.add(plane109);
  const plane110 = new THREE.Mesh(planeGeo2, trimMat);
  plane110.position.set(0.954, 0.9, -0.21);
  plane110.rotation.set(0, deg(90), 0);
  body.add(plane110);
  const plane111 = new THREE.Mesh(planeGeo2, trimMat);
  plane111.position.set(0.954, 0.9, -0.09);
  plane111.rotation.set(0, deg(90), 0);
  body.add(plane111);
  const plane112 = new THREE.Mesh(planeGeo2, trimMat);
  plane112.position.set(0.954, 0.9, 0.03);
  plane112.rotation.set(0, deg(90), 0);
  body.add(plane112);
  const plane113 = new THREE.Mesh(planeGeo2, trimMat);
  plane113.position.set(0.954, 0.9, 0.15);
  plane113.rotation.set(0, deg(90), 0);
  body.add(plane113);
  const plane114 = new THREE.Mesh(planeGeo2, trimMat);
  plane114.position.set(0.954, 0.9, 0.27);
  plane114.rotation.set(0, deg(90), 0);
  body.add(plane114);
  const plane115 = new THREE.Mesh(planeGeo2, trimMat);
  plane115.position.set(0.954, 0.9, 0.39);
  plane115.rotation.set(0, deg(90), 0);
  body.add(plane115);
  const plane116 = new THREE.Mesh(planeGeo2, trimMat);
  plane116.position.set(0.954, 0.9, 0.51);
  plane116.rotation.set(0, deg(90), 0);
  body.add(plane116);
  const plane117 = new THREE.Mesh(planeGeo2, trimMat);
  plane117.position.set(0.954, 0.9, 0.63);
  plane117.rotation.set(0, deg(90), 0);
  body.add(plane117);
  const plane118 = new THREE.Mesh(planeGeo2, trimMat);
  plane118.position.set(0.954, 0.9, 0.75);
  plane118.rotation.set(0, deg(90), 0);
  body.add(plane118);
  const plane119 = new THREE.Mesh(planeGeo2, trimMat);
  plane119.position.set(0.954, 0.9, 0.87);
  plane119.rotation.set(0, deg(90), 0);
  body.add(plane119);
  const plane120 = new THREE.Mesh(planeGeo2, trimMat);
  plane120.position.set(0.954, 0.9, 0.99);
  plane120.rotation.set(0, deg(90), 0);
  body.add(plane120);
  const plane121 = new THREE.Mesh(planeGeo2, trimMat);
  plane121.position.set(0.954, 0.9, 1.11);
  plane121.rotation.set(0, deg(90), 0);
  body.add(plane121);
  const plane122 = new THREE.Mesh(planeGeo2, trimMat);
  plane122.position.set(0.954, 0.9, 1.23);
  plane122.rotation.set(0, deg(90), 0);
  body.add(plane122);
  const plane123 = new THREE.Mesh(planeGeo2, trimMat);
  plane123.position.set(0.954, 0.9, 1.35);
  plane123.rotation.set(0, deg(90), 0);
  body.add(plane123);
  const plane124 = new THREE.Mesh(planeGeo2, trimMat);
  plane124.position.set(0.954, 0.9, 1.47);
  plane124.rotation.set(0, deg(90), 0);
  body.add(plane124);
  const plane125 = new THREE.Mesh(planeGeo2, trimMat);
  plane125.position.set(0.954, 0.9, 1.59);
  plane125.rotation.set(0, deg(90), 0);
  body.add(plane125);
  const plane126 = new THREE.Mesh(planeGeo2, trimMat);
  plane126.position.set(0.954, 0.9, 1.71);
  plane126.rotation.set(0, deg(90), 0);
  body.add(plane126);
  const plane127 = new THREE.Mesh(planeGeo2, trimMat);
  plane127.position.set(0.954, 0.9, 1.83);
  plane127.rotation.set(0, deg(90), 0);
  body.add(plane127);
  const checkerR = new THREE.Mesh(planeGeo, whiteMat);
  checkerR.name = 'checkerR';
  checkerR.position.set(-0.952, 0.84, -0.18);
  checkerR.rotation.set(0, deg(-90), 0);
  body.add(checkerR);
  const plane129 = new THREE.Mesh(planeGeo2, trimMat);
  plane129.position.set(-0.954, 0.84, -2.19);
  plane129.rotation.set(0, deg(-90), 0);
  body.add(plane129);
  const plane130 = new THREE.Mesh(planeGeo2, trimMat);
  plane130.position.set(-0.954, 0.84, -2.07);
  plane130.rotation.set(0, deg(-90), 0);
  body.add(plane130);
  const plane131 = new THREE.Mesh(planeGeo2, trimMat);
  plane131.position.set(-0.954, 0.84, -1.95);
  plane131.rotation.set(0, deg(-90), 0);
  body.add(plane131);
  const plane132 = new THREE.Mesh(planeGeo2, trimMat);
  plane132.position.set(-0.954, 0.84, -1.83);
  plane132.rotation.set(0, deg(-90), 0);
  body.add(plane132);
  const plane133 = new THREE.Mesh(planeGeo2, trimMat);
  plane133.position.set(-0.954, 0.84, -1.71);
  plane133.rotation.set(0, deg(-90), 0);
  body.add(plane133);
  const plane134 = new THREE.Mesh(planeGeo2, trimMat);
  plane134.position.set(-0.954, 0.84, -1.59);
  plane134.rotation.set(0, deg(-90), 0);
  body.add(plane134);
  const plane135 = new THREE.Mesh(planeGeo2, trimMat);
  plane135.position.set(-0.954, 0.84, -1.47);
  plane135.rotation.set(0, deg(-90), 0);
  body.add(plane135);
  const plane136 = new THREE.Mesh(planeGeo2, trimMat);
  plane136.position.set(-0.954, 0.84, -1.35);
  plane136.rotation.set(0, deg(-90), 0);
  body.add(plane136);
  const plane137 = new THREE.Mesh(planeGeo2, trimMat);
  plane137.position.set(-0.954, 0.84, -1.23);
  plane137.rotation.set(0, deg(-90), 0);
  body.add(plane137);
  const plane138 = new THREE.Mesh(planeGeo2, trimMat);
  plane138.position.set(-0.954, 0.84, -1.11);
  plane138.rotation.set(0, deg(-90), 0);
  body.add(plane138);
  const plane139 = new THREE.Mesh(planeGeo2, trimMat);
  plane139.position.set(-0.954, 0.84, -0.99);
  plane139.rotation.set(0, deg(-90), 0);
  body.add(plane139);
  const plane140 = new THREE.Mesh(planeGeo2, trimMat);
  plane140.position.set(-0.954, 0.84, -0.87);
  plane140.rotation.set(0, deg(-90), 0);
  body.add(plane140);
  const plane141 = new THREE.Mesh(planeGeo2, trimMat);
  plane141.position.set(-0.954, 0.84, -0.75);
  plane141.rotation.set(0, deg(-90), 0);
  body.add(plane141);
  const plane142 = new THREE.Mesh(planeGeo2, trimMat);
  plane142.position.set(-0.954, 0.84, -0.63);
  plane142.rotation.set(0, deg(-90), 0);
  body.add(plane142);
  const plane143 = new THREE.Mesh(planeGeo2, trimMat);
  plane143.position.set(-0.954, 0.84, -0.51);
  plane143.rotation.set(0, deg(-90), 0);
  body.add(plane143);
  const plane144 = new THREE.Mesh(planeGeo2, trimMat);
  plane144.position.set(-0.954, 0.84, -0.39);
  plane144.rotation.set(0, deg(-90), 0);
  body.add(plane144);
  const plane145 = new THREE.Mesh(planeGeo2, trimMat);
  plane145.position.set(-0.954, 0.84, -0.27);
  plane145.rotation.set(0, deg(-90), 0);
  body.add(plane145);
  const plane146 = new THREE.Mesh(planeGeo2, trimMat);
  plane146.position.set(-0.954, 0.84, -0.15);
  plane146.rotation.set(0, deg(-90), 0);
  body.add(plane146);
  const plane147 = new THREE.Mesh(planeGeo2, trimMat);
  plane147.position.set(-0.954, 0.84, -0.03);
  plane147.rotation.set(0, deg(-90), 0);
  body.add(plane147);
  const plane148 = new THREE.Mesh(planeGeo2, trimMat);
  plane148.position.set(-0.954, 0.84, 0.09);
  plane148.rotation.set(0, deg(-90), 0);
  body.add(plane148);
  const plane149 = new THREE.Mesh(planeGeo2, trimMat);
  plane149.position.set(-0.954, 0.84, 0.21);
  plane149.rotation.set(0, deg(-90), 0);
  body.add(plane149);
  const plane150 = new THREE.Mesh(planeGeo2, trimMat);
  plane150.position.set(-0.954, 0.84, 0.33);
  plane150.rotation.set(0, deg(-90), 0);
  body.add(plane150);
  const plane151 = new THREE.Mesh(planeGeo2, trimMat);
  plane151.position.set(-0.954, 0.84, 0.45);
  plane151.rotation.set(0, deg(-90), 0);
  body.add(plane151);
  const plane152 = new THREE.Mesh(planeGeo2, trimMat);
  plane152.position.set(-0.954, 0.84, 0.57);
  plane152.rotation.set(0, deg(-90), 0);
  body.add(plane152);
  const plane153 = new THREE.Mesh(planeGeo2, trimMat);
  plane153.position.set(-0.954, 0.84, 0.69);
  plane153.rotation.set(0, deg(-90), 0);
  body.add(plane153);
  const plane154 = new THREE.Mesh(planeGeo2, trimMat);
  plane154.position.set(-0.954, 0.84, 0.81);
  plane154.rotation.set(0, deg(-90), 0);
  body.add(plane154);
  const plane155 = new THREE.Mesh(planeGeo2, trimMat);
  plane155.position.set(-0.954, 0.84, 0.93);
  plane155.rotation.set(0, deg(-90), 0);
  body.add(plane155);
  const plane156 = new THREE.Mesh(planeGeo2, trimMat);
  plane156.position.set(-0.954, 0.84, 1.05);
  plane156.rotation.set(0, deg(-90), 0);
  body.add(plane156);
  const plane157 = new THREE.Mesh(planeGeo2, trimMat);
  plane157.position.set(-0.954, 0.84, 1.17);
  plane157.rotation.set(0, deg(-90), 0);
  body.add(plane157);
  const plane158 = new THREE.Mesh(planeGeo2, trimMat);
  plane158.position.set(-0.954, 0.84, 1.29);
  plane158.rotation.set(0, deg(-90), 0);
  body.add(plane158);
  const plane159 = new THREE.Mesh(planeGeo2, trimMat);
  plane159.position.set(-0.954, 0.84, 1.41);
  plane159.rotation.set(0, deg(-90), 0);
  body.add(plane159);
  const plane160 = new THREE.Mesh(planeGeo2, trimMat);
  plane160.position.set(-0.954, 0.84, 1.53);
  plane160.rotation.set(0, deg(-90), 0);
  body.add(plane160);
  const plane161 = new THREE.Mesh(planeGeo2, trimMat);
  plane161.position.set(-0.954, 0.84, 1.65);
  plane161.rotation.set(0, deg(-90), 0);
  body.add(plane161);
  const plane162 = new THREE.Mesh(planeGeo2, trimMat);
  plane162.position.set(-0.954, 0.84, 1.77);
  plane162.rotation.set(0, deg(-90), 0);
  body.add(plane162);
  const plane163 = new THREE.Mesh(planeGeo2, trimMat);
  plane163.position.set(-0.954, 0.9, -2.13);
  plane163.rotation.set(0, deg(-90), 0);
  body.add(plane163);
  const plane164 = new THREE.Mesh(planeGeo2, trimMat);
  plane164.position.set(-0.954, 0.9, -2.01);
  plane164.rotation.set(0, deg(-90), 0);
  body.add(plane164);
  const plane165 = new THREE.Mesh(planeGeo2, trimMat);
  plane165.position.set(-0.954, 0.9, -1.89);
  plane165.rotation.set(0, deg(-90), 0);
  body.add(plane165);
  const plane166 = new THREE.Mesh(planeGeo2, trimMat);
  plane166.position.set(-0.954, 0.9, -1.77);
  plane166.rotation.set(0, deg(-90), 0);
  body.add(plane166);
  const plane167 = new THREE.Mesh(planeGeo2, trimMat);
  plane167.position.set(-0.954, 0.9, -1.65);
  plane167.rotation.set(0, deg(-90), 0);
  body.add(plane167);
  const plane168 = new THREE.Mesh(planeGeo2, trimMat);
  plane168.position.set(-0.954, 0.9, -1.53);
  plane168.rotation.set(0, deg(-90), 0);
  body.add(plane168);
  const plane169 = new THREE.Mesh(planeGeo2, trimMat);
  plane169.position.set(-0.954, 0.9, -1.41);
  plane169.rotation.set(0, deg(-90), 0);
  body.add(plane169);
  const plane170 = new THREE.Mesh(planeGeo2, trimMat);
  plane170.position.set(-0.954, 0.9, -1.29);
  plane170.rotation.set(0, deg(-90), 0);
  body.add(plane170);
  const plane171 = new THREE.Mesh(planeGeo2, trimMat);
  plane171.position.set(-0.954, 0.9, -1.17);
  plane171.rotation.set(0, deg(-90), 0);
  body.add(plane171);
  const plane172 = new THREE.Mesh(planeGeo2, trimMat);
  plane172.position.set(-0.954, 0.9, -1.05);
  plane172.rotation.set(0, deg(-90), 0);
  body.add(plane172);
  const plane173 = new THREE.Mesh(planeGeo2, trimMat);
  plane173.position.set(-0.954, 0.9, -0.93);
  plane173.rotation.set(0, deg(-90), 0);
  body.add(plane173);
  const plane174 = new THREE.Mesh(planeGeo2, trimMat);
  plane174.position.set(-0.954, 0.9, -0.81);
  plane174.rotation.set(0, deg(-90), 0);
  body.add(plane174);
  const plane175 = new THREE.Mesh(planeGeo2, trimMat);
  plane175.position.set(-0.954, 0.9, -0.69);
  plane175.rotation.set(0, deg(-90), 0);
  body.add(plane175);
  const plane176 = new THREE.Mesh(planeGeo2, trimMat);
  plane176.position.set(-0.954, 0.9, -0.57);
  plane176.rotation.set(0, deg(-90), 0);
  body.add(plane176);
  const plane177 = new THREE.Mesh(planeGeo2, trimMat);
  plane177.position.set(-0.954, 0.9, -0.45);
  plane177.rotation.set(0, deg(-90), 0);
  body.add(plane177);
  const plane178 = new THREE.Mesh(planeGeo2, trimMat);
  plane178.position.set(-0.954, 0.9, -0.33);
  plane178.rotation.set(0, deg(-90), 0);
  body.add(plane178);
  const plane179 = new THREE.Mesh(planeGeo2, trimMat);
  plane179.position.set(-0.954, 0.9, -0.21);
  plane179.rotation.set(0, deg(-90), 0);
  body.add(plane179);
  const plane180 = new THREE.Mesh(planeGeo2, trimMat);
  plane180.position.set(-0.954, 0.9, -0.09);
  plane180.rotation.set(0, deg(-90), 0);
  body.add(plane180);
  const plane181 = new THREE.Mesh(planeGeo2, trimMat);
  plane181.position.set(-0.954, 0.9, 0.03);
  plane181.rotation.set(0, deg(-90), 0);
  body.add(plane181);
  const plane182 = new THREE.Mesh(planeGeo2, trimMat);
  plane182.position.set(-0.954, 0.9, 0.15);
  plane182.rotation.set(0, deg(-90), 0);
  body.add(plane182);
  const plane183 = new THREE.Mesh(planeGeo2, trimMat);
  plane183.position.set(-0.954, 0.9, 0.27);
  plane183.rotation.set(0, deg(-90), 0);
  body.add(plane183);
  const plane184 = new THREE.Mesh(planeGeo2, trimMat);
  plane184.position.set(-0.954, 0.9, 0.39);
  plane184.rotation.set(0, deg(-90), 0);
  body.add(plane184);
  const plane185 = new THREE.Mesh(planeGeo2, trimMat);
  plane185.position.set(-0.954, 0.9, 0.51);
  plane185.rotation.set(0, deg(-90), 0);
  body.add(plane185);
  const plane186 = new THREE.Mesh(planeGeo2, trimMat);
  plane186.position.set(-0.954, 0.9, 0.63);
  plane186.rotation.set(0, deg(-90), 0);
  body.add(plane186);
  const plane187 = new THREE.Mesh(planeGeo2, trimMat);
  plane187.position.set(-0.954, 0.9, 0.75);
  plane187.rotation.set(0, deg(-90), 0);
  body.add(plane187);
  const plane188 = new THREE.Mesh(planeGeo2, trimMat);
  plane188.position.set(-0.954, 0.9, 0.87);
  plane188.rotation.set(0, deg(-90), 0);
  body.add(plane188);
  const plane189 = new THREE.Mesh(planeGeo2, trimMat);
  plane189.position.set(-0.954, 0.9, 0.99);
  plane189.rotation.set(0, deg(-90), 0);
  body.add(plane189);
  const plane190 = new THREE.Mesh(planeGeo2, trimMat);
  plane190.position.set(-0.954, 0.9, 1.11);
  plane190.rotation.set(0, deg(-90), 0);
  body.add(plane190);
  const plane191 = new THREE.Mesh(planeGeo2, trimMat);
  plane191.position.set(-0.954, 0.9, 1.23);
  plane191.rotation.set(0, deg(-90), 0);
  body.add(plane191);
  const plane192 = new THREE.Mesh(planeGeo2, trimMat);
  plane192.position.set(-0.954, 0.9, 1.35);
  plane192.rotation.set(0, deg(-90), 0);
  body.add(plane192);
  const plane193 = new THREE.Mesh(planeGeo2, trimMat);
  plane193.position.set(-0.954, 0.9, 1.47);
  plane193.rotation.set(0, deg(-90), 0);
  body.add(plane193);
  const plane194 = new THREE.Mesh(planeGeo2, trimMat);
  plane194.position.set(-0.954, 0.9, 1.59);
  plane194.rotation.set(0, deg(-90), 0);
  body.add(plane194);
  const plane195 = new THREE.Mesh(planeGeo2, trimMat);
  plane195.position.set(-0.954, 0.9, 1.71);
  plane195.rotation.set(0, deg(-90), 0);
  body.add(plane195);
  const plane196 = new THREE.Mesh(planeGeo2, trimMat);
  plane196.position.set(-0.954, 0.9, 1.83);
  plane196.rotation.set(0, deg(-90), 0);
  body.add(plane196);
  const wheels = new THREE.Group();
  wheels.name = 'wheels';
  root.add(wheels);
  const wheelFL = new THREE.Group();
  wheelFL.name = 'wheelFL';
  wheelFL.position.set(0.8, 0.36, 1.45);
  wheels.add(wheelFL);
  const tire = new THREE.Mesh(latheGeo, trimMat);
  tire.name = 'tire';
  tire.rotation.set(0, 0, deg(90));
  wheelFL.add(tire);
  const rim = new THREE.Mesh(cylinderGeo, steelMat);
  rim.name = 'rim';
  rim.rotation.set(0, 0, deg(90));
  wheelFL.add(rim);
  const hubcap = new THREE.Mesh(cylinderGeo2, chromeMat);
  hubcap.name = 'hubcap';
  hubcap.position.set(0.11, 0, 0);
  hubcap.rotation.set(0, 0, deg(-90));
  wheelFL.add(hubcap);
  const centerCap = new THREE.Mesh(cylinderGeo3, trimMat);
  centerCap.name = 'centerCap';
  centerCap.position.set(0.135, 0, 0);
  centerCap.rotation.set(0, 0, deg(-90));
  wheelFL.add(centerCap);
  const wheelFR = new THREE.Group();
  wheelFR.name = 'wheelFR';
  wheelFR.position.set(-0.8, 0.36, 1.45);
  wheels.add(wheelFR);
  const tire2 = new THREE.Mesh(latheGeo, trimMat);
  tire2.name = 'tire';
  tire2.rotation.set(0, 0, deg(90));
  wheelFR.add(tire2);
  const rim2 = new THREE.Mesh(cylinderGeo, steelMat);
  rim2.name = 'rim';
  rim2.rotation.set(0, 0, deg(90));
  wheelFR.add(rim2);
  const hubcap2 = new THREE.Mesh(cylinderGeo2, chromeMat);
  hubcap2.name = 'hubcap';
  hubcap2.position.set(-0.11, 0, 0);
  hubcap2.rotation.set(0, 0, deg(90));
  wheelFR.add(hubcap2);
  const centerCap2 = new THREE.Mesh(cylinderGeo3, trimMat);
  centerCap2.name = 'centerCap';
  centerCap2.position.set(-0.135, 0, 0);
  centerCap2.rotation.set(0, 0, deg(90));
  wheelFR.add(centerCap2);
  const wheelRL = new THREE.Group();
  wheelRL.name = 'wheelRL';
  wheelRL.position.set(0.8, 0.36, -1.45);
  wheels.add(wheelRL);
  const tire3 = new THREE.Mesh(latheGeo, trimMat);
  tire3.name = 'tire';
  tire3.rotation.set(0, 0, deg(90));
  wheelRL.add(tire3);
  const rim3 = new THREE.Mesh(cylinderGeo, steelMat);
  rim3.name = 'rim';
  rim3.rotation.set(0, 0, deg(90));
  wheelRL.add(rim3);
  const hubcap3 = new THREE.Mesh(cylinderGeo2, chromeMat);
  hubcap3.name = 'hubcap';
  hubcap3.position.set(0.11, 0, 0);
  hubcap3.rotation.set(0, 0, deg(-90));
  wheelRL.add(hubcap3);
  const centerCap3 = new THREE.Mesh(cylinderGeo3, trimMat);
  centerCap3.name = 'centerCap';
  centerCap3.position.set(0.135, 0, 0);
  centerCap3.rotation.set(0, 0, deg(-90));
  wheelRL.add(centerCap3);
  const wheelRR = new THREE.Group();
  wheelRR.name = 'wheelRR';
  wheelRR.position.set(-0.8, 0.36, -1.45);
  wheels.add(wheelRR);
  const tire4 = new THREE.Mesh(latheGeo, trimMat);
  tire4.name = 'tire';
  tire4.rotation.set(0, 0, deg(90));
  wheelRR.add(tire4);
  const rim4 = new THREE.Mesh(cylinderGeo, steelMat);
  rim4.name = 'rim';
  rim4.rotation.set(0, 0, deg(90));
  wheelRR.add(rim4);
  const hubcap4 = new THREE.Mesh(cylinderGeo2, chromeMat);
  hubcap4.name = 'hubcap';
  hubcap4.position.set(-0.11, 0, 0);
  hubcap4.rotation.set(0, 0, deg(90));
  wheelRR.add(hubcap4);
  const centerCap4 = new THREE.Mesh(cylinderGeo3, trimMat);
  centerCap4.name = 'centerCap';
  centerCap4.position.set(-0.135, 0, 0);
  centerCap4.rotation.set(0, 0, deg(90));
  wheelRR.add(centerCap4);

  root.traverse((o) => {
    if (o.isMesh) {
      o.castShadow = true;
      o.receiveShadow = true;
    }
  });
  return root;
}

export default createTaxi;
```

---
Codels — 3D models as code for three.js. Search more: https://codels.download/api/v1/models?q=<query> · Guide: https://codels.download/llms.txt
