3.9K tris3.10 × 3.47 × 4.87 m
Use it in code
Remix in the editormonster-truck.js · 729 lines
Self-contained ES module — only depends on three. Call the factory and add the group to your scene.
/**
* Monster Truck — Codels 3D model library
* License: CC0-1.0 · Units: meters · Y-up · Front: +Z · Origin: center of the base (y = 0)
* Triangles: 3,856 · Size (W × H × D): 3.10 × 3.47 × 4.87 m
*
* Usage:
* import { createMonsterTruck } from './monster-truck.js';
*
* const model = createMonsterTruck();
* 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 createMonsterTruck() {
const root = new THREE.Group();
root.name = 'MonsterTruck';
// Materials
const paintMat = new THREE.MeshStandardMaterial({ name: 'paint', color: 0x2f6fd6, roughness: 0.35, metalness: 0.2, flatShading: true });
const accentMat = new THREE.MeshStandardMaterial({ name: 'accent', color: 0xf6c425, roughness: 0.4, metalness: 0.2, 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: 0x222327, roughness: 0.85, flatShading: true });
const metalMat = new THREE.MeshStandardMaterial({ name: 'metal', color: 0xa3a8ae, roughness: 0.35, metalness: 0.6, flatShading: true });
const flameMat = new THREE.MeshStandardMaterial({ name: 'flame', color: 0xff6a1a, roughness: 0.45, 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 });
// Shared geometries
const extrudeGeo = extrude([[0.6516, 0.8], [0.4194, 1.14], [-0.34, 1.14], [-0.34, 0.8]], 0.02);
const cylinderGeo = new THREE.CylinderGeometry(0.07, 0.07, 0.1, 8);
const circleGeo = new THREE.CircleGeometry(0.06, 8);
const boxGeo = new THREE.BoxGeometry(1.2, 0.03, 0.02);
const boxGeo2 = new THREE.BoxGeometry(0.3, 0.16, 0.05);
const boxGeo3 = new THREE.BoxGeometry(0.1, 0.26, 0.05);
const boxGeo4 = new THREE.BoxGeometry(0.12, 0.1, 0.12);
const boxGeo5 = new THREE.BoxGeometry(0.006, 0.5, 0.014);
const boxGeo6 = new THREE.BoxGeometry(0.02, 0.03, 0.13);
const boxGeo7 = new THREE.BoxGeometry(0.1, 0.16, 4.5);
const boxGeo8 = new THREE.BoxGeometry(1.1, 0.1, 0.1);
const cylinderGeo2 = new THREE.CylinderGeometry(0.08, 0.08, 2, 8);
const sphereGeo = new THREE.SphereGeometry(0.22, 8, 6);
const cylinderGeo3 = new THREE.CylinderGeometry(0.04, 0.04, 1.3068, 6);
const cylinderGeo4 = new THREE.CylinderGeometry(0.035, 0.035, 1.0452, 6);
const cylinderGeo5 = new THREE.CylinderGeometry(0.025, 0.025, 1.0179, 6);
const cylinderGeo6 = new THREE.CylinderGeometry(0.075, 0.075, 0.6311, 8);
const cylinderGeo7 = new THREE.CylinderGeometry(0.05, 0.05, 0.1222, 6);
const latheGeo = lathe([[0.416, -0.32], [0.416, -0.37], [0.737, -0.37], [0.8, -0.28], [0.8, 0.28], [0.737, 0.37], [0.416, 0.37], [0.416, 0.32]], 14, 0.2244, Math.PI * 2);
const cylinderGeo8 = new THREE.CylinderGeometry(0.416, 0.416, 0.64, 14);
const cylinderGeo9 = new THREE.CylinderGeometry(0.1747, 0.208, 0.05, 8);
const cylinderGeo10 = new THREE.CylinderGeometry(0.0832, 0.1082, 0.04, 6);
const boxGeo9 = new THREE.BoxGeometry(0.37, 0.078, 0.1795);
// Parts
const body = new THREE.Group();
body.name = 'body';
body.position.set(0, 2, 0);
root.add(body);
const lowerBody = new THREE.Mesh(extrude([[2.3, 0], [2.38, 0.14], [2.38, 0.5], [2.22, 0.62], [0.95, 0.68], [-0.5, 0.68], [-0.52, 0.36], [-2.32, 0.36], [-2.36, 0.1], [-2.28, 0]], 1.82, [], [0.04, 0.04, 2]), paintMat);
lowerBody.name = 'lowerBody';
lowerBody.rotation.set(0, deg(-90), 0);
body.add(lowerBody);
const cab = new THREE.Mesh(extrude([[0.9, 0.6], [0.44, 1.22], [-0.42, 1.22], [-0.48, 0.6]], 1.62, [], [0.05, 0.05, 2]), paintMat);
cab.name = 'cab';
cab.rotation.set(0, deg(-90), 0);
body.add(cab);
const windshield = new THREE.Mesh(new THREE.BoxGeometry(1.5, 0.02, 0.4732), glassMat);
windshield.name = 'windshield';
windshield.position.set(0, 1.0081, 0.6769);
windshield.rotation.set(deg(-126.573), 0, 0);
body.add(windshield);
const rearWindow = new THREE.Mesh(new THREE.BoxGeometry(1.5, 0.34, 0.02), glassMat);
rearWindow.name = 'rearWindow';
rearWindow.position.set(0, 0.98, -0.54);
body.add(rearWindow);
const windowL = new THREE.Mesh(extrudeGeo, glassMat);
windowL.name = 'windowL';
windowL.position.set(0.865, 0, 0);
windowL.rotation.set(0, deg(-90), 0);
body.add(windowL);
const windowR = new THREE.Mesh(extrudeGeo, glassMat);
windowR.name = 'windowR';
windowR.position.set(-0.865, 0, 0);
windowR.rotation.set(0, deg(-90), 0);
body.add(windowR);
const bed = new THREE.Mesh(extrude([[-0.91, -2.3], [0.91, -2.3], [0.91, -0.58], [-0.91, -0.58]], 0.34, [[[-0.84, -2.23], [0.84, -2.23], [0.84, -0.65], [-0.84, -0.65]]]), paintMat);
bed.name = 'bed';
bed.position.set(0, 0.53, 0);
bed.rotation.set(deg(90), 0, 0);
body.add(bed);
const lightBar = new THREE.Mesh(new THREE.BoxGeometry(1.3, 0.06, 0.12), trimMat);
lightBar.name = 'lightBar';
lightBar.position.set(0, 1.3, 0.22);
body.add(lightBar);
const cylinder10 = new THREE.Mesh(cylinderGeo, trimMat);
cylinder10.position.set(-0.52, 1.4, 0.24);
cylinder10.rotation.set(deg(90), 0, 0);
body.add(cylinder10);
const roofLight1 = new THREE.Mesh(circleGeo, headlightMat);
roofLight1.name = 'roofLight1';
roofLight1.position.set(-0.52, 1.4, 0.292);
body.add(roofLight1);
const cylinder12 = new THREE.Mesh(cylinderGeo, trimMat);
cylinder12.position.set(-0.26, 1.4, 0.24);
cylinder12.rotation.set(deg(90), 0, 0);
body.add(cylinder12);
const roofLight2 = new THREE.Mesh(circleGeo, headlightMat);
roofLight2.name = 'roofLight2';
roofLight2.position.set(-0.26, 1.4, 0.292);
body.add(roofLight2);
const cylinder14 = new THREE.Mesh(cylinderGeo, trimMat);
cylinder14.position.set(0, 1.4, 0.24);
cylinder14.rotation.set(deg(90), 0, 0);
body.add(cylinder14);
const roofLight3 = new THREE.Mesh(circleGeo, headlightMat);
roofLight3.name = 'roofLight3';
roofLight3.position.set(0, 1.4, 0.292);
body.add(roofLight3);
const cylinder16 = new THREE.Mesh(cylinderGeo, trimMat);
cylinder16.position.set(0.26, 1.4, 0.24);
cylinder16.rotation.set(deg(90), 0, 0);
body.add(cylinder16);
const roofLight4 = new THREE.Mesh(circleGeo, headlightMat);
roofLight4.name = 'roofLight4';
roofLight4.position.set(0.26, 1.4, 0.292);
body.add(roofLight4);
const cylinder18 = new THREE.Mesh(cylinderGeo, trimMat);
cylinder18.position.set(0.52, 1.4, 0.24);
cylinder18.rotation.set(deg(90), 0, 0);
body.add(cylinder18);
const roofLight5 = new THREE.Mesh(circleGeo, headlightMat);
roofLight5.name = 'roofLight5';
roofLight5.position.set(0.52, 1.4, 0.292);
body.add(roofLight5);
const grille = new THREE.Mesh(new THREE.BoxGeometry(1.3, 0.24, 0.04), trimMat);
grille.name = 'grille';
grille.position.set(0, 0.34, 2.42);
body.add(grille);
const box21 = new THREE.Mesh(boxGeo, metalMat);
box21.position.set(0, 0.27, 2.445);
body.add(box21);
const box22 = new THREE.Mesh(boxGeo, metalMat);
box22.position.set(0, 0.34, 2.445);
body.add(box22);
const box23 = new THREE.Mesh(boxGeo, metalMat);
box23.position.set(0, 0.41, 2.445);
body.add(box23);
const headlightL = new THREE.Mesh(boxGeo2, headlightMat);
headlightL.name = 'headlightL';
headlightL.position.set(0.74, 0.36, 2.41);
body.add(headlightL);
const taillightL = new THREE.Mesh(boxGeo3, taillightMat);
taillightL.name = 'taillightL';
taillightL.position.set(0.82, 0.5, -2.31);
body.add(taillightL);
const mirrorL = new THREE.Mesh(boxGeo4, trimMat);
mirrorL.name = 'mirrorL';
mirrorL.position.set(0.93, 0.82, 0.66);
body.add(mirrorL);
const box27 = new THREE.Mesh(boxGeo5, trimMat);
box27.position.set(0.953, 0.38, -0.45);
body.add(box27);
const box28 = new THREE.Mesh(boxGeo6, trimMat);
box28.position.set(0.96, 0.56, -0.25);
body.add(box28);
const flamesL = new THREE.Mesh(extrude([[0, 0.06], [0, 0.34], [0.75, 0.42], [0.5, 0.3], [1.1, 0.3], [0.75, 0.2], [1.35, 0.16], [0.8, 0.1], [1, 0], [0.3, 0.02]], 0.01), flameMat);
flamesL.name = 'flamesL';
flamesL.position.set(0.956, 0.08, 2.25);
flamesL.rotation.set(0, deg(90), 0);
body.add(flamesL);
const extrude30 = new THREE.Mesh(extrude([[0, 0.12], [0, 0.26], [0.45, 0.3], [0.3, 0.22], [0.7, 0.2], [0.35, 0.12], [0.55, 0.06]], 0.01), accentMat);
extrude30.position.set(0.962, 0.08, 2.25);
extrude30.rotation.set(0, deg(90), 0);
body.add(extrude30);
const headlightR = new THREE.Mesh(boxGeo2, headlightMat);
headlightR.name = 'headlightR';
headlightR.position.set(-0.74, 0.36, 2.41);
body.add(headlightR);
const taillightR = new THREE.Mesh(boxGeo3, taillightMat);
taillightR.name = 'taillightR';
taillightR.position.set(-0.82, 0.5, -2.31);
body.add(taillightR);
const mirrorR = new THREE.Mesh(boxGeo4, trimMat);
mirrorR.name = 'mirrorR';
mirrorR.position.set(-0.93, 0.82, 0.66);
body.add(mirrorR);
const box34 = new THREE.Mesh(boxGeo5, trimMat);
box34.position.set(-0.953, 0.38, -0.45);
body.add(box34);
const box35 = new THREE.Mesh(boxGeo6, trimMat);
box35.position.set(-0.96, 0.56, -0.25);
body.add(box35);
const flamesR = new THREE.Mesh(extrude([[0, 0.06], [0, 0.34], [-0.75, 0.42], [-0.5, 0.3], [-1.1, 0.3], [-0.75, 0.2], [-1.35, 0.16], [-0.8, 0.1], [-1, 0], [-0.3, 0.02]], 0.01), flameMat);
flamesR.name = 'flamesR';
flamesR.position.set(-0.956, 0.08, 2.25);
flamesR.rotation.set(0, deg(-90), 0);
body.add(flamesR);
const extrude37 = new THREE.Mesh(extrude([[0, 0.12], [0, 0.26], [-0.45, 0.3], [-0.3, 0.22], [-0.7, 0.2], [-0.35, 0.12], [-0.55, 0.06]], 0.01), accentMat);
extrude37.position.set(-0.962, 0.08, 2.25);
extrude37.rotation.set(0, deg(-90), 0);
body.add(extrude37);
const rearBumper = new THREE.Mesh(new THREE.BoxGeometry(1.7, 0.1, 0.12), trimMat);
rearBumper.name = 'rearBumper';
rearBumper.position.set(0, 0.08, -2.34);
body.add(rearBumper);
const suspension = new THREE.Group();
suspension.name = 'suspension';
root.add(suspension);
const frameRailL = new THREE.Mesh(boxGeo7, trimMat);
frameRailL.name = 'frameRailL';
frameRailL.position.set(0.5, 1.88, 0);
suspension.add(frameRailL);
const frameRailR = new THREE.Mesh(boxGeo7, trimMat);
frameRailR.name = 'frameRailR';
frameRailR.position.set(-0.5, 1.88, 0);
suspension.add(frameRailR);
const box42 = new THREE.Mesh(boxGeo8, trimMat);
box42.position.set(0, 1.88, 2.1);
suspension.add(box42);
const box43 = new THREE.Mesh(boxGeo8, trimMat);
box43.position.set(0, 1.88, 2);
suspension.add(box43);
const box44 = new THREE.Mesh(boxGeo8, trimMat);
box44.position.set(0, 1.88, 0);
suspension.add(box44);
const box45 = new THREE.Mesh(boxGeo8, trimMat);
box45.position.set(0, 1.88, -2);
suspension.add(box45);
const box46 = new THREE.Mesh(boxGeo8, trimMat);
box46.position.set(0, 1.88, -2.1);
suspension.add(box46);
const transmission = new THREE.Mesh(new THREE.BoxGeometry(0.5, 0.4, 1.1), trimMat);
transmission.name = 'transmission';
transmission.position.set(0, 1.73, 0.55);
suspension.add(transmission);
const frontAxle = new THREE.Mesh(cylinderGeo2, metalMat);
frontAxle.name = 'frontAxle';
frontAxle.position.set(0, 0.87, 1.55);
frontAxle.rotation.set(0, 0, deg(90));
suspension.add(frontAxle);
const frontDiff = new THREE.Mesh(sphereGeo, metalMat);
frontDiff.name = 'frontDiff';
frontDiff.position.set(0.18, 0.87, 1.55);
suspension.add(frontDiff);
const cylinder50 = new THREE.Mesh(new THREE.CylinderGeometry(0.045, 0.045, 0.8346, 6), metalMat);
cylinder50.position.set(0.09, 1.275, 1.15);
cylinder50.rotation.set(deg(-28.6881), deg(-3.2019), deg(12.4753));
suspension.add(cylinder50);
const cylinder51 = new THREE.Mesh(cylinderGeo3, trimMat);
cylinder51.position.set(0.435, 1.285, 1.1238);
cylinder51.rotation.set(deg(-40.7209), deg(0.4882), deg(-1.3155));
suspension.add(cylinder51);
const cylinder52 = new THREE.Mesh(cylinderGeo4, trimMat);
cylinder52.position.set(0.275, 1.41, 1.24);
cylinder52.rotation.set(deg(-36.3877), deg(0.9014), deg(-2.7422));
suspension.add(cylinder52);
const cylinder53 = new THREE.Mesh(cylinderGeo5, metalMat);
cylinder53.position.set(0.6, 1.415, 1.922);
cylinder53.rotation.set(deg(15.0347), deg(1.1961), deg(9.0453));
suspension.add(cylinder53);
const cylinder54 = new THREE.Mesh(cylinderGeo6, accentMat);
cylinder54.position.set(0.5824, 1.5217, 1.951);
cylinder54.rotation.set(deg(15.0347), deg(1.1961), deg(9.0453));
suspension.add(cylinder54);
const cylinder55 = new THREE.Mesh(cylinderGeo7, trimMat);
cylinder55.position.set(0.5296, 1.8418, 2.0382);
cylinder55.rotation.set(deg(15.0347), deg(1.1961), deg(9.0453));
suspension.add(cylinder55);
const cylinder56 = new THREE.Mesh(cylinderGeo5, metalMat);
cylinder56.position.set(0.6, 1.415, 1.178);
cylinder56.rotation.set(deg(-15.0347), deg(-1.1961), deg(9.0453));
suspension.add(cylinder56);
const cylinder57 = new THREE.Mesh(cylinderGeo6, accentMat);
cylinder57.position.set(0.5824, 1.5217, 1.149);
cylinder57.rotation.set(deg(-15.0347), deg(-1.1961), deg(9.0453));
suspension.add(cylinder57);
const cylinder58 = new THREE.Mesh(cylinderGeo7, trimMat);
cylinder58.position.set(0.5296, 1.8418, 1.0618);
cylinder58.rotation.set(deg(-15.0347), deg(-1.1961), deg(9.0453));
suspension.add(cylinder58);
const cylinder59 = new THREE.Mesh(cylinderGeo3, trimMat);
cylinder59.position.set(-0.435, 1.285, 1.1238);
cylinder59.rotation.set(deg(-40.7209), deg(-0.4882), deg(1.3155));
suspension.add(cylinder59);
const cylinder60 = new THREE.Mesh(cylinderGeo4, trimMat);
cylinder60.position.set(-0.275, 1.41, 1.24);
cylinder60.rotation.set(deg(-36.3877), deg(-0.9014), deg(2.7422));
suspension.add(cylinder60);
const cylinder61 = new THREE.Mesh(cylinderGeo5, metalMat);
cylinder61.position.set(-0.6, 1.415, 1.922);
cylinder61.rotation.set(deg(15.0347), deg(-1.1961), deg(-9.0453));
suspension.add(cylinder61);
const cylinder62 = new THREE.Mesh(cylinderGeo6, accentMat);
cylinder62.position.set(-0.5824, 1.5217, 1.951);
cylinder62.rotation.set(deg(15.0347), deg(-1.1961), deg(-9.0453));
suspension.add(cylinder62);
const cylinder63 = new THREE.Mesh(cylinderGeo7, trimMat);
cylinder63.position.set(-0.5296, 1.8418, 2.0382);
cylinder63.rotation.set(deg(15.0347), deg(-1.1961), deg(-9.0453));
suspension.add(cylinder63);
const cylinder64 = new THREE.Mesh(cylinderGeo5, metalMat);
cylinder64.position.set(-0.6, 1.415, 1.178);
cylinder64.rotation.set(deg(-15.0347), deg(1.1961), deg(-9.0453));
suspension.add(cylinder64);
const cylinder65 = new THREE.Mesh(cylinderGeo6, accentMat);
cylinder65.position.set(-0.5824, 1.5217, 1.149);
cylinder65.rotation.set(deg(-15.0347), deg(1.1961), deg(-9.0453));
suspension.add(cylinder65);
const cylinder66 = new THREE.Mesh(cylinderGeo7, trimMat);
cylinder66.position.set(-0.5296, 1.8418, 1.0618);
cylinder66.rotation.set(deg(-15.0347), deg(1.1961), deg(-9.0453));
suspension.add(cylinder66);
const rearAxle = new THREE.Mesh(cylinderGeo2, metalMat);
rearAxle.name = 'rearAxle';
rearAxle.position.set(0, 0.87, -1.55);
rearAxle.rotation.set(0, 0, deg(90));
suspension.add(rearAxle);
const rearDiff = new THREE.Mesh(sphereGeo, metalMat);
rearDiff.name = 'rearDiff';
rearDiff.position.set(0.18, 0.87, -1.55);
suspension.add(rearDiff);
const cylinder69 = new THREE.Mesh(new THREE.CylinderGeometry(0.045, 0.045, 1.1996, 6), metalMat);
cylinder69.position.set(0.09, 1.275, -0.875);
cylinder69.rotation.set(deg(52.5758), deg(4.2811), deg(8.6543));
suspension.add(cylinder69);
const cylinder70 = new THREE.Mesh(cylinderGeo3, trimMat);
cylinder70.position.set(0.435, 1.285, -1.1237);
cylinder70.rotation.set(deg(40.7209), deg(-0.4882), deg(-1.3155));
suspension.add(cylinder70);
const cylinder71 = new THREE.Mesh(cylinderGeo4, trimMat);
cylinder71.position.set(0.275, 1.41, -1.24);
cylinder71.rotation.set(deg(36.3877), deg(-0.9014), deg(-2.7422));
suspension.add(cylinder71);
const cylinder72 = new THREE.Mesh(cylinderGeo5, metalMat);
cylinder72.position.set(0.6, 1.415, -1.178);
cylinder72.rotation.set(deg(15.0347), deg(1.1961), deg(9.0453));
suspension.add(cylinder72);
const cylinder73 = new THREE.Mesh(cylinderGeo6, accentMat);
cylinder73.position.set(0.5824, 1.5217, -1.149);
cylinder73.rotation.set(deg(15.0347), deg(1.1961), deg(9.0453));
suspension.add(cylinder73);
const cylinder74 = new THREE.Mesh(cylinderGeo7, trimMat);
cylinder74.position.set(0.5296, 1.8418, -1.0618);
cylinder74.rotation.set(deg(15.0347), deg(1.1961), deg(9.0453));
suspension.add(cylinder74);
const cylinder75 = new THREE.Mesh(cylinderGeo5, metalMat);
cylinder75.position.set(0.6, 1.415, -1.922);
cylinder75.rotation.set(deg(-15.0347), deg(-1.1961), deg(9.0453));
suspension.add(cylinder75);
const cylinder76 = new THREE.Mesh(cylinderGeo6, accentMat);
cylinder76.position.set(0.5824, 1.5217, -1.951);
cylinder76.rotation.set(deg(-15.0347), deg(-1.1961), deg(9.0453));
suspension.add(cylinder76);
const cylinder77 = new THREE.Mesh(cylinderGeo7, trimMat);
cylinder77.position.set(0.5296, 1.8418, -2.0382);
cylinder77.rotation.set(deg(-15.0347), deg(-1.1961), deg(9.0453));
suspension.add(cylinder77);
const cylinder78 = new THREE.Mesh(cylinderGeo3, trimMat);
cylinder78.position.set(-0.435, 1.285, -1.1237);
cylinder78.rotation.set(deg(40.7209), deg(0.4882), deg(1.3155));
suspension.add(cylinder78);
const cylinder79 = new THREE.Mesh(cylinderGeo4, trimMat);
cylinder79.position.set(-0.275, 1.41, -1.24);
cylinder79.rotation.set(deg(36.3877), deg(0.9014), deg(2.7422));
suspension.add(cylinder79);
const cylinder80 = new THREE.Mesh(cylinderGeo5, metalMat);
cylinder80.position.set(-0.6, 1.415, -1.178);
cylinder80.rotation.set(deg(15.0347), deg(-1.1961), deg(-9.0453));
suspension.add(cylinder80);
const cylinder81 = new THREE.Mesh(cylinderGeo6, accentMat);
cylinder81.position.set(-0.5824, 1.5217, -1.149);
cylinder81.rotation.set(deg(15.0347), deg(-1.1961), deg(-9.0453));
suspension.add(cylinder81);
const cylinder82 = new THREE.Mesh(cylinderGeo7, trimMat);
cylinder82.position.set(-0.5296, 1.8418, -1.0618);
cylinder82.rotation.set(deg(15.0347), deg(-1.1961), deg(-9.0453));
suspension.add(cylinder82);
const cylinder83 = new THREE.Mesh(cylinderGeo5, metalMat);
cylinder83.position.set(-0.6, 1.415, -1.922);
cylinder83.rotation.set(deg(-15.0347), deg(1.1961), deg(-9.0453));
suspension.add(cylinder83);
const cylinder84 = new THREE.Mesh(cylinderGeo6, accentMat);
cylinder84.position.set(-0.5824, 1.5217, -1.951);
cylinder84.rotation.set(deg(-15.0347), deg(1.1961), deg(-9.0453));
suspension.add(cylinder84);
const cylinder85 = new THREE.Mesh(cylinderGeo7, trimMat);
cylinder85.position.set(-0.5296, 1.8418, -2.0382);
cylinder85.rotation.set(deg(-15.0347), deg(1.1961), deg(-9.0453));
suspension.add(cylinder85);
const wheels = new THREE.Group();
wheels.name = 'wheels';
root.add(wheels);
const wheelFL = new THREE.Group();
wheelFL.name = 'wheelFL';
wheelFL.position.set(1.15, 0.87, 1.55);
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(cylinderGeo8, accentMat);
rim.name = 'rim';
rim.rotation.set(0, 0, deg(90));
wheelFL.add(rim);
const hub = new THREE.Mesh(cylinderGeo9, trimMat);
hub.name = 'hub';
hub.position.set(0.34, 0, 0);
hub.rotation.set(0, 0, deg(-90));
wheelFL.add(hub);
const hubCap = new THREE.Mesh(cylinderGeo10, metalMat);
hubCap.name = 'hubCap';
hubCap.position.set(0.38, 0, 0);
hubCap.rotation.set(0, 0, deg(-90));
wheelFL.add(hubCap);
const box92 = new THREE.Mesh(boxGeo9, trimMat);
box92.position.set(0.175, -0.831, 0);
box92.rotation.set(0, 0, deg(180));
wheelFL.add(box92);
const box93 = new THREE.Mesh(boxGeo9, trimMat);
box93.position.set(-0.175, -0.7487, 0.3606);
box93.rotation.set(deg(154.2857), 0, 0);
wheelFL.add(box93);
const box94 = new THREE.Mesh(boxGeo9, trimMat);
box94.position.set(0.175, -0.5181, 0.6497);
box94.rotation.set(deg(128.5714), 0, 0);
wheelFL.add(box94);
const box95 = new THREE.Mesh(boxGeo9, trimMat);
box95.position.set(-0.175, -0.1849, 0.8102);
box95.rotation.set(deg(102.8571), 0, 0);
wheelFL.add(box95);
const box96 = new THREE.Mesh(boxGeo9, trimMat);
box96.position.set(0.175, 0.1849, 0.8102);
box96.rotation.set(deg(77.1429), 0, 0);
wheelFL.add(box96);
const box97 = new THREE.Mesh(boxGeo9, trimMat);
box97.position.set(-0.175, 0.5181, 0.6497);
box97.rotation.set(deg(51.4286), 0, 0);
wheelFL.add(box97);
const box98 = new THREE.Mesh(boxGeo9, trimMat);
box98.position.set(0.175, 0.7487, 0.3606);
box98.rotation.set(deg(25.7143), 0, 0);
wheelFL.add(box98);
const box99 = new THREE.Mesh(boxGeo9, trimMat);
box99.position.set(-0.175, 0.831, 0);
wheelFL.add(box99);
const box100 = new THREE.Mesh(boxGeo9, trimMat);
box100.position.set(0.175, 0.7487, -0.3606);
box100.rotation.set(deg(-25.7143), 0, 0);
wheelFL.add(box100);
const box101 = new THREE.Mesh(boxGeo9, trimMat);
box101.position.set(-0.175, 0.5181, -0.6497);
box101.rotation.set(deg(-51.4286), 0, 0);
wheelFL.add(box101);
const box102 = new THREE.Mesh(boxGeo9, trimMat);
box102.position.set(0.175, 0.1849, -0.8102);
box102.rotation.set(deg(-77.1429), 0, 0);
wheelFL.add(box102);
const box103 = new THREE.Mesh(boxGeo9, trimMat);
box103.position.set(-0.175, -0.1849, -0.8102);
box103.rotation.set(deg(-102.8571), 0, 0);
wheelFL.add(box103);
const box104 = new THREE.Mesh(boxGeo9, trimMat);
box104.position.set(0.175, -0.5181, -0.6497);
box104.rotation.set(deg(-128.5714), 0, 0);
wheelFL.add(box104);
const box105 = new THREE.Mesh(boxGeo9, trimMat);
box105.position.set(-0.175, -0.7487, -0.3606);
box105.rotation.set(deg(-154.2857), 0, 0);
wheelFL.add(box105);
const wheelFR = new THREE.Group();
wheelFR.name = 'wheelFR';
wheelFR.position.set(-1.15, 0.87, 1.55);
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(cylinderGeo8, accentMat);
rim2.name = 'rim';
rim2.rotation.set(0, 0, deg(90));
wheelFR.add(rim2);
const hub2 = new THREE.Mesh(cylinderGeo9, trimMat);
hub2.name = 'hub';
hub2.position.set(-0.34, 0, 0);
hub2.rotation.set(0, 0, deg(90));
wheelFR.add(hub2);
const hubCap2 = new THREE.Mesh(cylinderGeo10, metalMat);
hubCap2.name = 'hubCap';
hubCap2.position.set(-0.38, 0, 0);
hubCap2.rotation.set(0, 0, deg(90));
wheelFR.add(hubCap2);
const box111 = new THREE.Mesh(boxGeo9, trimMat);
box111.position.set(0.175, -0.831, 0);
box111.rotation.set(0, 0, deg(180));
wheelFR.add(box111);
const box112 = new THREE.Mesh(boxGeo9, trimMat);
box112.position.set(-0.175, -0.7487, 0.3606);
box112.rotation.set(deg(154.2857), 0, 0);
wheelFR.add(box112);
const box113 = new THREE.Mesh(boxGeo9, trimMat);
box113.position.set(0.175, -0.5181, 0.6497);
box113.rotation.set(deg(128.5714), 0, 0);
wheelFR.add(box113);
const box114 = new THREE.Mesh(boxGeo9, trimMat);
box114.position.set(-0.175, -0.1849, 0.8102);
box114.rotation.set(deg(102.8571), 0, 0);
wheelFR.add(box114);
const box115 = new THREE.Mesh(boxGeo9, trimMat);
box115.position.set(0.175, 0.1849, 0.8102);
box115.rotation.set(deg(77.1429), 0, 0);
wheelFR.add(box115);
const box116 = new THREE.Mesh(boxGeo9, trimMat);
box116.position.set(-0.175, 0.5181, 0.6497);
box116.rotation.set(deg(51.4286), 0, 0);
wheelFR.add(box116);
const box117 = new THREE.Mesh(boxGeo9, trimMat);
box117.position.set(0.175, 0.7487, 0.3606);
box117.rotation.set(deg(25.7143), 0, 0);
wheelFR.add(box117);
const box118 = new THREE.Mesh(boxGeo9, trimMat);
box118.position.set(-0.175, 0.831, 0);
wheelFR.add(box118);
const box119 = new THREE.Mesh(boxGeo9, trimMat);
box119.position.set(0.175, 0.7487, -0.3606);
box119.rotation.set(deg(-25.7143), 0, 0);
wheelFR.add(box119);
const box120 = new THREE.Mesh(boxGeo9, trimMat);
box120.position.set(-0.175, 0.5181, -0.6497);
box120.rotation.set(deg(-51.4286), 0, 0);
wheelFR.add(box120);
const box121 = new THREE.Mesh(boxGeo9, trimMat);
box121.position.set(0.175, 0.1849, -0.8102);
box121.rotation.set(deg(-77.1429), 0, 0);
wheelFR.add(box121);
const box122 = new THREE.Mesh(boxGeo9, trimMat);
box122.position.set(-0.175, -0.1849, -0.8102);
box122.rotation.set(deg(-102.8571), 0, 0);
wheelFR.add(box122);
const box123 = new THREE.Mesh(boxGeo9, trimMat);
box123.position.set(0.175, -0.5181, -0.6497);
box123.rotation.set(deg(-128.5714), 0, 0);
wheelFR.add(box123);
const box124 = new THREE.Mesh(boxGeo9, trimMat);
box124.position.set(-0.175, -0.7487, -0.3606);
box124.rotation.set(deg(-154.2857), 0, 0);
wheelFR.add(box124);
const wheelRL = new THREE.Group();
wheelRL.name = 'wheelRL';
wheelRL.position.set(1.15, 0.87, -1.55);
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(cylinderGeo8, accentMat);
rim3.name = 'rim';
rim3.rotation.set(0, 0, deg(90));
wheelRL.add(rim3);
const hub3 = new THREE.Mesh(cylinderGeo9, trimMat);
hub3.name = 'hub';
hub3.position.set(0.34, 0, 0);
hub3.rotation.set(0, 0, deg(-90));
wheelRL.add(hub3);
const hubCap3 = new THREE.Mesh(cylinderGeo10, metalMat);
hubCap3.name = 'hubCap';
hubCap3.position.set(0.38, 0, 0);
hubCap3.rotation.set(0, 0, deg(-90));
wheelRL.add(hubCap3);
const box130 = new THREE.Mesh(boxGeo9, trimMat);
box130.position.set(0.175, -0.831, 0);
box130.rotation.set(0, 0, deg(180));
wheelRL.add(box130);
const box131 = new THREE.Mesh(boxGeo9, trimMat);
box131.position.set(-0.175, -0.7487, 0.3606);
box131.rotation.set(deg(154.2857), 0, 0);
wheelRL.add(box131);
const box132 = new THREE.Mesh(boxGeo9, trimMat);
box132.position.set(0.175, -0.5181, 0.6497);
box132.rotation.set(deg(128.5714), 0, 0);
wheelRL.add(box132);
const box133 = new THREE.Mesh(boxGeo9, trimMat);
box133.position.set(-0.175, -0.1849, 0.8102);
box133.rotation.set(deg(102.8571), 0, 0);
wheelRL.add(box133);
const box134 = new THREE.Mesh(boxGeo9, trimMat);
box134.position.set(0.175, 0.1849, 0.8102);
box134.rotation.set(deg(77.1429), 0, 0);
wheelRL.add(box134);
const box135 = new THREE.Mesh(boxGeo9, trimMat);
box135.position.set(-0.175, 0.5181, 0.6497);
box135.rotation.set(deg(51.4286), 0, 0);
wheelRL.add(box135);
const box136 = new THREE.Mesh(boxGeo9, trimMat);
box136.position.set(0.175, 0.7487, 0.3606);
box136.rotation.set(deg(25.7143), 0, 0);
wheelRL.add(box136);
const box137 = new THREE.Mesh(boxGeo9, trimMat);
box137.position.set(-0.175, 0.831, 0);
wheelRL.add(box137);
const box138 = new THREE.Mesh(boxGeo9, trimMat);
box138.position.set(0.175, 0.7487, -0.3606);
box138.rotation.set(deg(-25.7143), 0, 0);
wheelRL.add(box138);
const box139 = new THREE.Mesh(boxGeo9, trimMat);
box139.position.set(-0.175, 0.5181, -0.6497);
box139.rotation.set(deg(-51.4286), 0, 0);
wheelRL.add(box139);
const box140 = new THREE.Mesh(boxGeo9, trimMat);
box140.position.set(0.175, 0.1849, -0.8102);
box140.rotation.set(deg(-77.1429), 0, 0);
wheelRL.add(box140);
const box141 = new THREE.Mesh(boxGeo9, trimMat);
box141.position.set(-0.175, -0.1849, -0.8102);
box141.rotation.set(deg(-102.8571), 0, 0);
wheelRL.add(box141);
const box142 = new THREE.Mesh(boxGeo9, trimMat);
box142.position.set(0.175, -0.5181, -0.6497);
box142.rotation.set(deg(-128.5714), 0, 0);
wheelRL.add(box142);
const box143 = new THREE.Mesh(boxGeo9, trimMat);
box143.position.set(-0.175, -0.7487, -0.3606);
box143.rotation.set(deg(-154.2857), 0, 0);
wheelRL.add(box143);
const wheelRR = new THREE.Group();
wheelRR.name = 'wheelRR';
wheelRR.position.set(-1.15, 0.87, -1.55);
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(cylinderGeo8, accentMat);
rim4.name = 'rim';
rim4.rotation.set(0, 0, deg(90));
wheelRR.add(rim4);
const hub4 = new THREE.Mesh(cylinderGeo9, trimMat);
hub4.name = 'hub';
hub4.position.set(-0.34, 0, 0);
hub4.rotation.set(0, 0, deg(90));
wheelRR.add(hub4);
const hubCap4 = new THREE.Mesh(cylinderGeo10, metalMat);
hubCap4.name = 'hubCap';
hubCap4.position.set(-0.38, 0, 0);
hubCap4.rotation.set(0, 0, deg(90));
wheelRR.add(hubCap4);
const box149 = new THREE.Mesh(boxGeo9, trimMat);
box149.position.set(0.175, -0.831, 0);
box149.rotation.set(0, 0, deg(180));
wheelRR.add(box149);
const box150 = new THREE.Mesh(boxGeo9, trimMat);
box150.position.set(-0.175, -0.7487, 0.3606);
box150.rotation.set(deg(154.2857), 0, 0);
wheelRR.add(box150);
const box151 = new THREE.Mesh(boxGeo9, trimMat);
box151.position.set(0.175, -0.5181, 0.6497);
box151.rotation.set(deg(128.5714), 0, 0);
wheelRR.add(box151);
const box152 = new THREE.Mesh(boxGeo9, trimMat);
box152.position.set(-0.175, -0.1849, 0.8102);
box152.rotation.set(deg(102.8571), 0, 0);
wheelRR.add(box152);
const box153 = new THREE.Mesh(boxGeo9, trimMat);
box153.position.set(0.175, 0.1849, 0.8102);
box153.rotation.set(deg(77.1429), 0, 0);
wheelRR.add(box153);
const box154 = new THREE.Mesh(boxGeo9, trimMat);
box154.position.set(-0.175, 0.5181, 0.6497);
box154.rotation.set(deg(51.4286), 0, 0);
wheelRR.add(box154);
const box155 = new THREE.Mesh(boxGeo9, trimMat);
box155.position.set(0.175, 0.7487, 0.3606);
box155.rotation.set(deg(25.7143), 0, 0);
wheelRR.add(box155);
const box156 = new THREE.Mesh(boxGeo9, trimMat);
box156.position.set(-0.175, 0.831, 0);
wheelRR.add(box156);
const box157 = new THREE.Mesh(boxGeo9, trimMat);
box157.position.set(0.175, 0.7487, -0.3606);
box157.rotation.set(deg(-25.7143), 0, 0);
wheelRR.add(box157);
const box158 = new THREE.Mesh(boxGeo9, trimMat);
box158.position.set(-0.175, 0.5181, -0.6497);
box158.rotation.set(deg(-51.4286), 0, 0);
wheelRR.add(box158);
const box159 = new THREE.Mesh(boxGeo9, trimMat);
box159.position.set(0.175, 0.1849, -0.8102);
box159.rotation.set(deg(-77.1429), 0, 0);
wheelRR.add(box159);
const box160 = new THREE.Mesh(boxGeo9, trimMat);
box160.position.set(-0.175, -0.1849, -0.8102);
box160.rotation.set(deg(-102.8571), 0, 0);
wheelRR.add(box160);
const box161 = new THREE.Mesh(boxGeo9, trimMat);
box161.position.set(0.175, -0.5181, -0.6497);
box161.rotation.set(deg(-128.5714), 0, 0);
wheelRR.add(box161);
const box162 = new THREE.Mesh(boxGeo9, trimMat);
box162.position.set(-0.175, -0.7487, -0.3606);
box162.rotation.set(deg(-154.2857), 0, 0);
wheelRR.add(box162);
root.traverse((o) => {
if (o.isMesh) {
o.castShadow = true;
o.receiveShadow = true;
}
});
return root;
}
export default createMonsterTruck;
Ratings & comments
0 comments
No comments yet. Share how you used this model or what could be better.
Related models
Same category or similar tags









