1308 Tris0,97 × 1,84 × 0,81 m
Im Code verwenden
Im Editor remixenvending-machine.js · 370 Zeilen
Eigenständiges ES-Modul — hängt nur von three ab. Ruf die Factory auf und füge die Gruppe deiner Szene hinzu.
/**
* Vending Machine — Codels 3D model library
* License: CC0-1.0 · Units: meters · Y-up · Front: +Z · Origin: center of the base (y = 0)
* Triangles: 1,308 · Size (W × H × D): 0.97 × 1.84 × 0.81 m
*
* Usage:
* import { createVendingMachine } from './vending-machine.js';
*
* const model = createVendingMachine();
* model.position.set(0, 0, 0);
* scene.add(model);
*/
import * as THREE from 'three';
const deg = THREE.MathUtils.degToRad;
export function createVendingMachine() {
const root = new THREE.Group();
root.name = 'VendingMachine';
// Materials
const bodyMat = new THREE.MeshStandardMaterial({ name: 'body', color: 0xc9242c, roughness: 0.45, metalness: 0.25, flatShading: true });
const darkMat = new THREE.MeshStandardMaterial({ name: 'dark', color: 0x1f2124, roughness: 0.6, metalness: 0.2, flatShading: true });
const steelMat = new THREE.MeshStandardMaterial({ name: 'steel', color: 0xb9bec3, roughness: 0.35, metalness: 0.7, flatShading: true });
const glowMat = new THREE.MeshStandardMaterial({ name: 'glow', color: 0xf4fbff, roughness: 0.5, emissive: 0xe9f6ff, emissiveIntensity: 0.85, flatShading: true });
const glassMat = new THREE.MeshStandardMaterial({ name: 'glass', color: 0xd7ebf3, roughness: 0.1, transparent: true, opacity: 0.22 });
const canAMat = new THREE.MeshStandardMaterial({ name: 'canA', color: 0xe04a2e, roughness: 0.35, metalness: 0.4, flatShading: true });
const canBMat = new THREE.MeshStandardMaterial({ name: 'canB', color: 0x2f7ad8, roughness: 0.35, metalness: 0.4, flatShading: true });
const canCMat = new THREE.MeshStandardMaterial({ name: 'canC', color: 0xf2b130, roughness: 0.35, metalness: 0.4, flatShading: true });
const screenMat = new THREE.MeshStandardMaterial({ name: 'screen', color: 0x7ff0b4, roughness: 0.3, emissive: 0x2fe08c, flatShading: true });
// Shared geometries
const boxGeo = new THREE.BoxGeometry(0.58, 0.02, 0.18);
const cylinderGeo = new THREE.CylinderGeometry(0.04, 0.04, 0.13, 6);
const cylinderGeo2 = new THREE.CylinderGeometry(0.034, 0.04, 0.012, 6);
const boxGeo2 = new THREE.BoxGeometry(0.05, 0.02, 0.01);
const boxGeo3 = new THREE.BoxGeometry(0.63, 0.025, 0.02);
const boxGeo4 = new THREE.BoxGeometry(0.025, 0.94, 0.02);
const boxGeo5 = new THREE.BoxGeometry(0.01, 0.025, 0.45);
// Parts
const plinth = new THREE.Mesh(new THREE.BoxGeometry(0.89, 0.08, 0.67), darkMat);
plinth.name = 'plinth';
plinth.position.set(0, 0.04, 0);
root.add(plinth);
const cabinet = new THREE.Mesh(new THREE.BoxGeometry(0.95, 1.75, 0.55), bodyMat);
cabinet.name = 'cabinet';
cabinet.position.set(0, 0.955, -0.1);
root.add(cabinet);
const cabinetSide = new THREE.Mesh(new THREE.BoxGeometry(0.045, 1.75, 0.2), bodyMat);
cabinetSide.name = 'cabinetSide';
cabinetSide.position.set(-0.4525, 0.955, 0.275);
root.add(cabinetSide);
const cabinetSide2 = new THREE.Mesh(new THREE.BoxGeometry(0.325, 1.75, 0.2), bodyMat);
cabinetSide2.name = 'cabinetSide';
cabinetSide2.position.set(0.3125, 0.955, 0.275);
root.add(cabinetSide2);
const cabinetFront = new THREE.Mesh(new THREE.BoxGeometry(0.58, 0.54, 0.2), bodyMat);
cabinetFront.name = 'cabinetFront';
cabinetFront.position.set(-0.14, 0.35, 0.275);
root.add(cabinetFront);
const cabinetFront2 = new THREE.Mesh(new THREE.BoxGeometry(0.58, 0.27, 0.2), bodyMat);
cabinetFront2.name = 'cabinetFront';
cabinetFront2.position.set(-0.14, 1.695, 0.275);
root.add(cabinetFront2);
const topTrim = new THREE.Mesh(new THREE.BoxGeometry(0.97, 0.05, 0.77), darkMat);
topTrim.name = 'topTrim';
topTrim.position.set(0, 1.815, 0);
root.add(topTrim);
const header = new THREE.Mesh(new THREE.BoxGeometry(0.85, 0.16, 0.02), glowMat);
header.name = 'header';
header.position.set(0, 1.68, 0.38);
root.add(header);
const headerStripe = new THREE.Mesh(new THREE.BoxGeometry(0.85, 0.04, 0.006), bodyMat);
headerStripe.name = 'headerStripe';
headerStripe.position.set(0, 1.68, 0.392);
root.add(headerStripe);
const backlight = new THREE.Mesh(new THREE.BoxGeometry(0.58, 0.94, 0.01), glowMat);
backlight.name = 'backlight';
backlight.position.set(-0.14, 1.09, 0.18);
root.add(backlight);
const shelf = new THREE.Mesh(boxGeo, steelMat);
shelf.name = 'shelf';
shelf.position.set(-0.14, 0.66, 0.265);
root.add(shelf);
const can = new THREE.Mesh(cylinderGeo, canAMat);
can.name = 'can';
can.position.set(-0.372, 0.735, 0.265);
root.add(can);
const canTop = new THREE.Mesh(cylinderGeo2, steelMat);
canTop.name = 'canTop';
canTop.position.set(-0.372, 0.806, 0.265);
root.add(canTop);
const selectButton = new THREE.Mesh(boxGeo2, screenMat);
selectButton.name = 'selectButton';
selectButton.position.set(-0.372, 0.635, 0.355);
root.add(selectButton);
const can2 = new THREE.Mesh(cylinderGeo, canBMat);
can2.name = 'can';
can2.position.set(-0.256, 0.735, 0.265);
root.add(can2);
const canTop2 = new THREE.Mesh(cylinderGeo2, steelMat);
canTop2.name = 'canTop';
canTop2.position.set(-0.256, 0.806, 0.265);
root.add(canTop2);
const selectButton2 = new THREE.Mesh(boxGeo2, screenMat);
selectButton2.name = 'selectButton';
selectButton2.position.set(-0.256, 0.635, 0.355);
root.add(selectButton2);
const can3 = new THREE.Mesh(cylinderGeo, canCMat);
can3.name = 'can';
can3.position.set(-0.14, 0.735, 0.265);
root.add(can3);
const canTop3 = new THREE.Mesh(cylinderGeo2, steelMat);
canTop3.name = 'canTop';
canTop3.position.set(-0.14, 0.806, 0.265);
root.add(canTop3);
const selectButton3 = new THREE.Mesh(boxGeo2, screenMat);
selectButton3.name = 'selectButton';
selectButton3.position.set(-0.14, 0.635, 0.355);
root.add(selectButton3);
const can4 = new THREE.Mesh(cylinderGeo, canAMat);
can4.name = 'can';
can4.position.set(-0.024, 0.735, 0.265);
root.add(can4);
const canTop4 = new THREE.Mesh(cylinderGeo2, steelMat);
canTop4.name = 'canTop';
canTop4.position.set(-0.024, 0.806, 0.265);
root.add(canTop4);
const selectButton4 = new THREE.Mesh(boxGeo2, screenMat);
selectButton4.name = 'selectButton';
selectButton4.position.set(-0.024, 0.635, 0.355);
root.add(selectButton4);
const can5 = new THREE.Mesh(cylinderGeo, canBMat);
can5.name = 'can';
can5.position.set(0.092, 0.735, 0.265);
root.add(can5);
const canTop5 = new THREE.Mesh(cylinderGeo2, steelMat);
canTop5.name = 'canTop';
canTop5.position.set(0.092, 0.806, 0.265);
root.add(canTop5);
const selectButton5 = new THREE.Mesh(boxGeo2, screenMat);
selectButton5.name = 'selectButton';
selectButton5.position.set(0.092, 0.635, 0.355);
root.add(selectButton5);
const shelf2 = new THREE.Mesh(boxGeo, steelMat);
shelf2.name = 'shelf';
shelf2.position.set(-0.14, 0.9733, 0.265);
root.add(shelf2);
const can6 = new THREE.Mesh(cylinderGeo, canBMat);
can6.name = 'can';
can6.position.set(-0.372, 1.0483, 0.265);
root.add(can6);
const canTop6 = new THREE.Mesh(cylinderGeo2, steelMat);
canTop6.name = 'canTop';
canTop6.position.set(-0.372, 1.1193, 0.265);
root.add(canTop6);
const selectButton6 = new THREE.Mesh(boxGeo2, screenMat);
selectButton6.name = 'selectButton';
selectButton6.position.set(-0.372, 0.9483, 0.355);
root.add(selectButton6);
const can7 = new THREE.Mesh(cylinderGeo, canCMat);
can7.name = 'can';
can7.position.set(-0.256, 1.0483, 0.265);
root.add(can7);
const canTop7 = new THREE.Mesh(cylinderGeo2, steelMat);
canTop7.name = 'canTop';
canTop7.position.set(-0.256, 1.1193, 0.265);
root.add(canTop7);
const selectButton7 = new THREE.Mesh(boxGeo2, screenMat);
selectButton7.name = 'selectButton';
selectButton7.position.set(-0.256, 0.9483, 0.355);
root.add(selectButton7);
const can8 = new THREE.Mesh(cylinderGeo, canAMat);
can8.name = 'can';
can8.position.set(-0.14, 1.0483, 0.265);
root.add(can8);
const canTop8 = new THREE.Mesh(cylinderGeo2, steelMat);
canTop8.name = 'canTop';
canTop8.position.set(-0.14, 1.1193, 0.265);
root.add(canTop8);
const selectButton8 = new THREE.Mesh(boxGeo2, screenMat);
selectButton8.name = 'selectButton';
selectButton8.position.set(-0.14, 0.9483, 0.355);
root.add(selectButton8);
const can9 = new THREE.Mesh(cylinderGeo, canBMat);
can9.name = 'can';
can9.position.set(-0.024, 1.0483, 0.265);
root.add(can9);
const canTop9 = new THREE.Mesh(cylinderGeo2, steelMat);
canTop9.name = 'canTop';
canTop9.position.set(-0.024, 1.1193, 0.265);
root.add(canTop9);
const selectButton9 = new THREE.Mesh(boxGeo2, screenMat);
selectButton9.name = 'selectButton';
selectButton9.position.set(-0.024, 0.9483, 0.355);
root.add(selectButton9);
const can10 = new THREE.Mesh(cylinderGeo, canCMat);
can10.name = 'can';
can10.position.set(0.092, 1.0483, 0.265);
root.add(can10);
const canTop10 = new THREE.Mesh(cylinderGeo2, steelMat);
canTop10.name = 'canTop';
canTop10.position.set(0.092, 1.1193, 0.265);
root.add(canTop10);
const selectButton10 = new THREE.Mesh(boxGeo2, screenMat);
selectButton10.name = 'selectButton';
selectButton10.position.set(0.092, 0.9483, 0.355);
root.add(selectButton10);
const shelf3 = new THREE.Mesh(boxGeo, steelMat);
shelf3.name = 'shelf';
shelf3.position.set(-0.14, 1.2867, 0.265);
root.add(shelf3);
const can11 = new THREE.Mesh(cylinderGeo, canCMat);
can11.name = 'can';
can11.position.set(-0.372, 1.3617, 0.265);
root.add(can11);
const canTop11 = new THREE.Mesh(cylinderGeo2, steelMat);
canTop11.name = 'canTop';
canTop11.position.set(-0.372, 1.4327, 0.265);
root.add(canTop11);
const selectButton11 = new THREE.Mesh(boxGeo2, screenMat);
selectButton11.name = 'selectButton';
selectButton11.position.set(-0.372, 1.2617, 0.355);
root.add(selectButton11);
const can12 = new THREE.Mesh(cylinderGeo, canAMat);
can12.name = 'can';
can12.position.set(-0.256, 1.3617, 0.265);
root.add(can12);
const canTop12 = new THREE.Mesh(cylinderGeo2, steelMat);
canTop12.name = 'canTop';
canTop12.position.set(-0.256, 1.4327, 0.265);
root.add(canTop12);
const selectButton12 = new THREE.Mesh(boxGeo2, screenMat);
selectButton12.name = 'selectButton';
selectButton12.position.set(-0.256, 1.2617, 0.355);
root.add(selectButton12);
const can13 = new THREE.Mesh(cylinderGeo, canBMat);
can13.name = 'can';
can13.position.set(-0.14, 1.3617, 0.265);
root.add(can13);
const canTop13 = new THREE.Mesh(cylinderGeo2, steelMat);
canTop13.name = 'canTop';
canTop13.position.set(-0.14, 1.4327, 0.265);
root.add(canTop13);
const selectButton13 = new THREE.Mesh(boxGeo2, screenMat);
selectButton13.name = 'selectButton';
selectButton13.position.set(-0.14, 1.2617, 0.355);
root.add(selectButton13);
const can14 = new THREE.Mesh(cylinderGeo, canCMat);
can14.name = 'can';
can14.position.set(-0.024, 1.3617, 0.265);
root.add(can14);
const canTop14 = new THREE.Mesh(cylinderGeo2, steelMat);
canTop14.name = 'canTop';
canTop14.position.set(-0.024, 1.4327, 0.265);
root.add(canTop14);
const selectButton14 = new THREE.Mesh(boxGeo2, screenMat);
selectButton14.name = 'selectButton';
selectButton14.position.set(-0.024, 1.2617, 0.355);
root.add(selectButton14);
const can15 = new THREE.Mesh(cylinderGeo, canAMat);
can15.name = 'can';
can15.position.set(0.092, 1.3617, 0.265);
root.add(can15);
const canTop15 = new THREE.Mesh(cylinderGeo2, steelMat);
canTop15.name = 'canTop';
canTop15.position.set(0.092, 1.4327, 0.265);
root.add(canTop15);
const selectButton15 = new THREE.Mesh(boxGeo2, screenMat);
selectButton15.name = 'selectButton';
selectButton15.position.set(0.092, 1.2617, 0.355);
root.add(selectButton15);
const frontGlass = new THREE.Mesh(new THREE.BoxGeometry(0.58, 0.94, 0.008), glassMat);
frontGlass.name = 'frontGlass';
frontGlass.position.set(-0.14, 1.09, 0.367);
root.add(frontGlass);
const windowFrame = new THREE.Mesh(boxGeo3, darkMat);
windowFrame.name = 'windowFrame';
windowFrame.position.set(-0.14, 0.6075, 0.377);
root.add(windowFrame);
const windowFrame2 = new THREE.Mesh(boxGeo4, darkMat);
windowFrame2.name = 'windowFrame';
windowFrame2.position.set(-0.4425, 1.09, 0.377);
root.add(windowFrame2);
const windowFrame3 = new THREE.Mesh(boxGeo3, darkMat);
windowFrame3.name = 'windowFrame';
windowFrame3.position.set(-0.14, 1.5725, 0.377);
root.add(windowFrame3);
const windowFrame4 = new THREE.Mesh(boxGeo4, darkMat);
windowFrame4.name = 'windowFrame';
windowFrame4.position.set(0.1625, 1.09, 0.377);
root.add(windowFrame4);
const controlPanel = new THREE.Mesh(new THREE.BoxGeometry(0.2, 0.94, 0.02), darkMat);
controlPanel.name = 'controlPanel';
controlPanel.position.set(0.3125, 1.09, 0.383);
root.add(controlPanel);
const screen = new THREE.Mesh(new THREE.BoxGeometry(0.14, 0.07, 0.01), screenMat);
screen.name = 'screen';
screen.position.set(0.3125, 1.45, 0.395);
root.add(screen);
const coinPlate = new THREE.Mesh(new THREE.BoxGeometry(0.1, 0.14, 0.02), steelMat);
coinPlate.name = 'coinPlate';
coinPlate.position.set(0.3125, 1.26, 0.395);
root.add(coinPlate);
const coinSlot = new THREE.Mesh(new THREE.BoxGeometry(0.012, 0.05, 0.006), darkMat);
coinSlot.name = 'coinSlot';
coinSlot.position.set(0.3125, 1.28, 0.407);
root.add(coinSlot);
const billAcceptor = new THREE.Mesh(new THREE.BoxGeometry(0.11, 0.06, 0.03), steelMat);
billAcceptor.name = 'billAcceptor';
billAcceptor.position.set(0.3125, 1.1, 0.4);
root.add(billAcceptor);
const billSlot = new THREE.Mesh(new THREE.BoxGeometry(0.08, 0.008, 0.006), darkMat);
billSlot.name = 'billSlot';
billSlot.position.set(0.3125, 1.1, 0.417);
root.add(billSlot);
const coinReturn = new THREE.Mesh(new THREE.BoxGeometry(0.08, 0.06, 0.03), steelMat);
coinReturn.name = 'coinReturn';
coinReturn.position.set(0.3125, 0.8, 0.4);
root.add(coinReturn);
const coinReturnSlot = new THREE.Mesh(new THREE.BoxGeometry(0.05, 0.03, 0.006), darkMat);
coinReturnSlot.name = 'coinReturnSlot';
coinReturnSlot.position.set(0.3125, 0.79, 0.417);
root.add(coinReturnSlot);
const ventSlat = new THREE.Mesh(boxGeo5, darkMat);
ventSlat.name = 'ventSlat';
ventSlat.position.set(-0.479, 0.2, -0.1);
root.add(ventSlat);
const ventSlat2 = new THREE.Mesh(boxGeo5, darkMat);
ventSlat2.name = 'ventSlat';
ventSlat2.position.set(-0.479, 0.25, -0.1);
root.add(ventSlat2);
const ventSlat3 = new THREE.Mesh(boxGeo5, darkMat);
ventSlat3.name = 'ventSlat';
ventSlat3.position.set(-0.479, 0.3, -0.1);
root.add(ventSlat3);
const ventSlat4 = new THREE.Mesh(boxGeo5, darkMat);
ventSlat4.name = 'ventSlat';
ventSlat4.position.set(0.479, 0.2, -0.1);
root.add(ventSlat4);
const ventSlat5 = new THREE.Mesh(boxGeo5, darkMat);
ventSlat5.name = 'ventSlat';
ventSlat5.position.set(0.479, 0.25, -0.1);
root.add(ventSlat5);
const ventSlat6 = new THREE.Mesh(boxGeo5, darkMat);
ventSlat6.name = 'ventSlat';
ventSlat6.position.set(0.479, 0.3, -0.1);
root.add(ventSlat6);
const bay = new THREE.Mesh(new THREE.BoxGeometry(0.75, 0.26, 0.03), darkMat);
bay.name = 'bay';
bay.position.set(-0.03, 0.33, 0.377);
root.add(bay);
const flap = new THREE.Mesh(new THREE.BoxGeometry(0.69, 0.2, 0.012), steelMat);
flap.name = 'flap';
flap.position.set(-0.03, 0.33, 0.395);
flap.rotation.set(deg(-8), 0, 0);
root.add(flap);
root.traverse((o) => {
if (o.isMesh) {
o.castShadow = true;
o.receiveShadow = true;
}
});
return root;
}
export default createVendingMachine;
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









