삼각형 2.7천개1.96 × 1.73 × 5.18 m
코드에서 사용하기
에디터에서 리믹스taxi.js · 946줄
독립형 ES 모듈이에요 — three에만 의존해요. 팩토리 함수를 호출하고 그룹을 씬에 추가하세요.
/**
* 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;
평점 및 댓글
댓글 0개
아직 댓글이 없어요. 이 모델을 어떻게 사용했는지, 어떤 점이 더 나아질 수 있을지 공유해 주세요.
관련 모델
같은 카테고리 또는 비슷한 태그









