Codels
2672 Tris1,96 × 1,73 × 5,18 m

Im Code verwenden

Im Editor remixen
Eigenständiges ES-Modul — hängt nur von three ab. Ruf die Factory auf und füge die Gruppe deiner Szene hinzu.
/**
 * Taxi Cab — Codels 3D model library
 * 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;

Bewertungen & Kommentare

—
Noch keine Bewertungen — gib die erste ab.
5
0
4
0
3
0
2
0
1
0

Melde dich an, um zu bewerten und zu kommentieren.

0 Kommentare

Noch keine Kommentare. Erzähl, wie du dieses Modell genutzt hast oder was besser sein könnte.

Ähnliche Modelle

Gleiche Kategorie oder ähnliche Tags