1,1 mil tris1,06 × 2,52 × 1,06 m
Úsalo en código
Hacer remix en el editorphone-booth.js · 533 líneas
Módulo ES autónomo — solo depende de three. Llama a la función factory y añade el grupo a tu escena.
/**
* Phone Booth — Codels 3D model library
* License: CC0-1.0 · Units: meters · Y-up · Front: +Z · Origin: center of the base (y = 0)
* Triangles: 1,124 · Size (W × H × D): 1.06 × 2.52 × 1.06 m
*
* Usage:
* import { createPhoneBooth } from './phone-booth.js';
*
* const model = createPhoneBooth();
* model.position.set(0, 0, 0);
* scene.add(model);
*/
import * as THREE from 'three';
const deg = THREE.MathUtils.degToRad;
// 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 createPhoneBooth() {
const root = new THREE.Group();
root.name = 'PhoneBooth';
// Materials
const bodyMat = new THREE.MeshStandardMaterial({ name: 'body', color: 0xc41e22, roughness: 0.5, metalness: 0.15, flatShading: true });
const glassMat = new THREE.MeshStandardMaterial({ name: 'glass', color: 0xcfe2ea, roughness: 0.1, transparent: true, opacity: 0.3 });
const signMat = new THREE.MeshStandardMaterial({ name: 'sign', color: 0xfffaf0, roughness: 0.4, emissive: 0xfff3d6, emissiveIntensity: 0.9, flatShading: true });
const darkMat = new THREE.MeshStandardMaterial({ name: 'dark', color: 0x1e2022, roughness: 0.6, flatShading: true });
const steelMat = new THREE.MeshStandardMaterial({ name: 'steel', color: 0xa9afb4, roughness: 0.35, metalness: 0.7, flatShading: true });
const concreteMat = new THREE.MeshStandardMaterial({ name: 'concrete', color: 0x9d9a92, roughness: 0.95, flatShading: true });
const floorMat = new THREE.MeshStandardMaterial({ name: 'floor', color: 0x3b3d40, roughness: 0.9, flatShading: true });
const goldMat = new THREE.MeshStandardMaterial({ name: 'gold', color: 0xd8ae46, roughness: 0.35, metalness: 0.7, flatShading: true });
// Shared geometries
const boxGeo = new THREE.BoxGeometry(0.1, 1.94, 0.1);
const boxGeo2 = new THREE.BoxGeometry(0.74, 0.28, 0.04);
const boxGeo3 = new THREE.BoxGeometry(0.74, 0.12, 0.04);
const boxGeo4 = new THREE.BoxGeometry(0.74, 1.54, 0.008);
const boxGeo5 = new THREE.BoxGeometry(0.024, 1.54, 0.03);
const boxGeo6 = new THREE.BoxGeometry(0.74, 0.022, 0.03);
const extrudeGeo = extrude([[-0.48, 0], [-0.3727, 0.0727], [-0.2546, 0.1262], [-0.1292, 0.159], [0, 0.17], [0.1292, 0.159], [0.2546, 0.1262], [0.3727, 0.0727], [0.48, 0]], 0.96);
const boxGeo7 = new THREE.BoxGeometry(0.66, 0.12, 0.012);
const planeGeo = new THREE.PlaneGeometry(0.036, 0.05);
const cylinderGeo = new THREE.CylinderGeometry(0.05, 0.055, 0.025, 8);
// Parts
const plinth = new THREE.Mesh(new THREE.BoxGeometry(1.06, 0.08, 1.06), concreteMat);
plinth.name = 'plinth';
plinth.position.set(0, 0.04, 0);
root.add(plinth);
const base = new THREE.Mesh(new THREE.BoxGeometry(0.92, 0.1, 0.92), bodyMat);
base.name = 'base';
base.position.set(0, 0.13, 0);
root.add(base);
const floor = new THREE.Mesh(new THREE.BoxGeometry(0.86, 0.01, 0.86), floorMat);
floor.name = 'floor';
floor.position.set(0, 0.185, 0);
root.add(floor);
const cornerPost = new THREE.Mesh(boxGeo, bodyMat);
cornerPost.name = 'cornerPost';
cornerPost.position.set(-0.41, 1.15, -0.41);
root.add(cornerPost);
const cornerPost2 = new THREE.Mesh(boxGeo, bodyMat);
cornerPost2.name = 'cornerPost';
cornerPost2.position.set(-0.41, 1.15, 0.41);
root.add(cornerPost2);
const cornerPost3 = new THREE.Mesh(boxGeo, bodyMat);
cornerPost3.name = 'cornerPost';
cornerPost3.position.set(0.41, 1.15, -0.41);
root.add(cornerPost3);
const cornerPost4 = new THREE.Mesh(boxGeo, bodyMat);
cornerPost4.name = 'cornerPost';
cornerPost4.position.set(0.41, 1.15, 0.41);
root.add(cornerPost4);
const side1 = new THREE.Group();
side1.name = 'side1';
root.add(side1);
const kickPlate = new THREE.Mesh(boxGeo2, bodyMat);
kickPlate.name = 'kickPlate';
kickPlate.position.set(0, 0.32, 0.43);
side1.add(kickPlate);
const topRail = new THREE.Mesh(boxGeo3, bodyMat);
topRail.name = 'topRail';
topRail.position.set(0, 2.06, 0.43);
side1.add(topRail);
const glass = new THREE.Mesh(boxGeo4, glassMat);
glass.name = 'glass';
glass.position.set(0, 1.23, 0.43);
side1.add(glass);
const glazingBar = new THREE.Mesh(boxGeo5, bodyMat);
glazingBar.name = 'glazingBar';
glazingBar.position.set(-0.1233, 1.23, 0.434);
side1.add(glazingBar);
const glazingBar2 = new THREE.Mesh(boxGeo5, bodyMat);
glazingBar2.name = 'glazingBar';
glazingBar2.position.set(0.1233, 1.23, 0.434);
side1.add(glazingBar2);
const glazingBar3 = new THREE.Mesh(boxGeo6, bodyMat);
glazingBar3.name = 'glazingBar';
glazingBar3.position.set(0, 0.6525, 0.434);
side1.add(glazingBar3);
const glazingBar4 = new THREE.Mesh(boxGeo6, bodyMat);
glazingBar4.name = 'glazingBar';
glazingBar4.position.set(0, 0.845, 0.434);
side1.add(glazingBar4);
const glazingBar5 = new THREE.Mesh(boxGeo6, bodyMat);
glazingBar5.name = 'glazingBar';
glazingBar5.position.set(0, 1.0375, 0.434);
side1.add(glazingBar5);
const glazingBar6 = new THREE.Mesh(boxGeo6, bodyMat);
glazingBar6.name = 'glazingBar';
glazingBar6.position.set(0, 1.23, 0.434);
side1.add(glazingBar6);
const glazingBar7 = new THREE.Mesh(boxGeo6, bodyMat);
glazingBar7.name = 'glazingBar';
glazingBar7.position.set(0, 1.4225, 0.434);
side1.add(glazingBar7);
const glazingBar8 = new THREE.Mesh(boxGeo6, bodyMat);
glazingBar8.name = 'glazingBar';
glazingBar8.position.set(0, 1.615, 0.434);
side1.add(glazingBar8);
const glazingBar9 = new THREE.Mesh(boxGeo6, bodyMat);
glazingBar9.name = 'glazingBar';
glazingBar9.position.set(0, 1.8075, 0.434);
side1.add(glazingBar9);
const doorHandle = new THREE.Mesh(new THREE.BoxGeometry(0.03, 0.14, 0.03), steelMat);
doorHandle.name = 'doorHandle';
doorHandle.position.set(0.31, 1.05, 0.465);
side1.add(doorHandle);
const side2 = new THREE.Group();
side2.name = 'side2';
side2.rotation.set(0, deg(90), 0);
root.add(side2);
const kickPlate2 = new THREE.Mesh(boxGeo2, bodyMat);
kickPlate2.name = 'kickPlate';
kickPlate2.position.set(0, 0.32, 0.43);
side2.add(kickPlate2);
const topRail2 = new THREE.Mesh(boxGeo3, bodyMat);
topRail2.name = 'topRail';
topRail2.position.set(0, 2.06, 0.43);
side2.add(topRail2);
const glass2 = new THREE.Mesh(boxGeo4, glassMat);
glass2.name = 'glass';
glass2.position.set(0, 1.23, 0.43);
side2.add(glass2);
const glazingBar10 = new THREE.Mesh(boxGeo5, bodyMat);
glazingBar10.name = 'glazingBar';
glazingBar10.position.set(-0.1233, 1.23, 0.434);
side2.add(glazingBar10);
const glazingBar11 = new THREE.Mesh(boxGeo5, bodyMat);
glazingBar11.name = 'glazingBar';
glazingBar11.position.set(0.1233, 1.23, 0.434);
side2.add(glazingBar11);
const glazingBar12 = new THREE.Mesh(boxGeo6, bodyMat);
glazingBar12.name = 'glazingBar';
glazingBar12.position.set(0, 0.6525, 0.434);
side2.add(glazingBar12);
const glazingBar13 = new THREE.Mesh(boxGeo6, bodyMat);
glazingBar13.name = 'glazingBar';
glazingBar13.position.set(0, 0.845, 0.434);
side2.add(glazingBar13);
const glazingBar14 = new THREE.Mesh(boxGeo6, bodyMat);
glazingBar14.name = 'glazingBar';
glazingBar14.position.set(0, 1.0375, 0.434);
side2.add(glazingBar14);
const glazingBar15 = new THREE.Mesh(boxGeo6, bodyMat);
glazingBar15.name = 'glazingBar';
glazingBar15.position.set(0, 1.23, 0.434);
side2.add(glazingBar15);
const glazingBar16 = new THREE.Mesh(boxGeo6, bodyMat);
glazingBar16.name = 'glazingBar';
glazingBar16.position.set(0, 1.4225, 0.434);
side2.add(glazingBar16);
const glazingBar17 = new THREE.Mesh(boxGeo6, bodyMat);
glazingBar17.name = 'glazingBar';
glazingBar17.position.set(0, 1.615, 0.434);
side2.add(glazingBar17);
const glazingBar18 = new THREE.Mesh(boxGeo6, bodyMat);
glazingBar18.name = 'glazingBar';
glazingBar18.position.set(0, 1.8075, 0.434);
side2.add(glazingBar18);
const side3 = new THREE.Group();
side3.name = 'side3';
side3.rotation.set(0, deg(180), 0);
root.add(side3);
const kickPlate3 = new THREE.Mesh(boxGeo2, bodyMat);
kickPlate3.name = 'kickPlate';
kickPlate3.position.set(0, 0.32, 0.43);
side3.add(kickPlate3);
const topRail3 = new THREE.Mesh(boxGeo3, bodyMat);
topRail3.name = 'topRail';
topRail3.position.set(0, 2.06, 0.43);
side3.add(topRail3);
const glass3 = new THREE.Mesh(boxGeo4, glassMat);
glass3.name = 'glass';
glass3.position.set(0, 1.23, 0.43);
side3.add(glass3);
const glazingBar19 = new THREE.Mesh(boxGeo5, bodyMat);
glazingBar19.name = 'glazingBar';
glazingBar19.position.set(-0.1233, 1.23, 0.434);
side3.add(glazingBar19);
const glazingBar20 = new THREE.Mesh(boxGeo5, bodyMat);
glazingBar20.name = 'glazingBar';
glazingBar20.position.set(0.1233, 1.23, 0.434);
side3.add(glazingBar20);
const glazingBar21 = new THREE.Mesh(boxGeo6, bodyMat);
glazingBar21.name = 'glazingBar';
glazingBar21.position.set(0, 0.6525, 0.434);
side3.add(glazingBar21);
const glazingBar22 = new THREE.Mesh(boxGeo6, bodyMat);
glazingBar22.name = 'glazingBar';
glazingBar22.position.set(0, 0.845, 0.434);
side3.add(glazingBar22);
const glazingBar23 = new THREE.Mesh(boxGeo6, bodyMat);
glazingBar23.name = 'glazingBar';
glazingBar23.position.set(0, 1.0375, 0.434);
side3.add(glazingBar23);
const glazingBar24 = new THREE.Mesh(boxGeo6, bodyMat);
glazingBar24.name = 'glazingBar';
glazingBar24.position.set(0, 1.23, 0.434);
side3.add(glazingBar24);
const glazingBar25 = new THREE.Mesh(boxGeo6, bodyMat);
glazingBar25.name = 'glazingBar';
glazingBar25.position.set(0, 1.4225, 0.434);
side3.add(glazingBar25);
const glazingBar26 = new THREE.Mesh(boxGeo6, bodyMat);
glazingBar26.name = 'glazingBar';
glazingBar26.position.set(0, 1.615, 0.434);
side3.add(glazingBar26);
const glazingBar27 = new THREE.Mesh(boxGeo6, bodyMat);
glazingBar27.name = 'glazingBar';
glazingBar27.position.set(0, 1.8075, 0.434);
side3.add(glazingBar27);
const side4 = new THREE.Group();
side4.name = 'side4';
side4.rotation.set(0, deg(270), 0);
root.add(side4);
const kickPlate4 = new THREE.Mesh(boxGeo2, bodyMat);
kickPlate4.name = 'kickPlate';
kickPlate4.position.set(0, 0.32, 0.43);
side4.add(kickPlate4);
const topRail4 = new THREE.Mesh(boxGeo3, bodyMat);
topRail4.name = 'topRail';
topRail4.position.set(0, 2.06, 0.43);
side4.add(topRail4);
const glass4 = new THREE.Mesh(boxGeo4, glassMat);
glass4.name = 'glass';
glass4.position.set(0, 1.23, 0.43);
side4.add(glass4);
const glazingBar28 = new THREE.Mesh(boxGeo5, bodyMat);
glazingBar28.name = 'glazingBar';
glazingBar28.position.set(-0.1233, 1.23, 0.434);
side4.add(glazingBar28);
const glazingBar29 = new THREE.Mesh(boxGeo5, bodyMat);
glazingBar29.name = 'glazingBar';
glazingBar29.position.set(0.1233, 1.23, 0.434);
side4.add(glazingBar29);
const glazingBar30 = new THREE.Mesh(boxGeo6, bodyMat);
glazingBar30.name = 'glazingBar';
glazingBar30.position.set(0, 0.6525, 0.434);
side4.add(glazingBar30);
const glazingBar31 = new THREE.Mesh(boxGeo6, bodyMat);
glazingBar31.name = 'glazingBar';
glazingBar31.position.set(0, 0.845, 0.434);
side4.add(glazingBar31);
const glazingBar32 = new THREE.Mesh(boxGeo6, bodyMat);
glazingBar32.name = 'glazingBar';
glazingBar32.position.set(0, 1.0375, 0.434);
side4.add(glazingBar32);
const glazingBar33 = new THREE.Mesh(boxGeo6, bodyMat);
glazingBar33.name = 'glazingBar';
glazingBar33.position.set(0, 1.23, 0.434);
side4.add(glazingBar33);
const glazingBar34 = new THREE.Mesh(boxGeo6, bodyMat);
glazingBar34.name = 'glazingBar';
glazingBar34.position.set(0, 1.4225, 0.434);
side4.add(glazingBar34);
const glazingBar35 = new THREE.Mesh(boxGeo6, bodyMat);
glazingBar35.name = 'glazingBar';
glazingBar35.position.set(0, 1.615, 0.434);
side4.add(glazingBar35);
const glazingBar36 = new THREE.Mesh(boxGeo6, bodyMat);
glazingBar36.name = 'glazingBar';
glazingBar36.position.set(0, 1.8075, 0.434);
side4.add(glazingBar36);
const fascia = new THREE.Mesh(new THREE.BoxGeometry(0.94, 0.2, 0.94), bodyMat);
fascia.name = 'fascia';
fascia.position.set(0, 2.22, 0);
root.add(fascia);
const roofVault = new THREE.Mesh(extrudeGeo, bodyMat);
roofVault.name = 'roofVault';
roofVault.position.set(0, 2.32, 0);
root.add(roofVault);
const roofVault2 = new THREE.Mesh(extrudeGeo, bodyMat);
roofVault2.name = 'roofVault';
roofVault2.position.set(0, 2.32, 0);
roofVault2.rotation.set(0, deg(90), 0);
root.add(roofVault2);
const cornice = new THREE.Mesh(new THREE.BoxGeometry(0.98, 0.03, 0.98), bodyMat);
cornice.name = 'cornice';
cornice.position.set(0, 2.32, 0);
root.add(cornice);
const roofCap = new THREE.Mesh(new THREE.CylinderGeometry(0.11, 0.14, 0.05, 8), bodyMat);
roofCap.name = 'roofCap';
roofCap.position.set(0, 2.495, 0);
root.add(roofCap);
const sign1 = new THREE.Group();
sign1.name = 'sign1';
root.add(sign1);
const telephoneSign = new THREE.Mesh(boxGeo7, signMat);
telephoneSign.name = 'telephoneSign';
telephoneSign.position.set(0, 2.22, 0.47);
sign1.add(telephoneSign);
const letter = new THREE.Mesh(planeGeo, darkMat);
letter.name = 'letter';
letter.position.set(-0.248, 2.22, 0.4775);
sign1.add(letter);
const letter2 = new THREE.Mesh(planeGeo, darkMat);
letter2.name = 'letter';
letter2.position.set(-0.186, 2.22, 0.4775);
sign1.add(letter2);
const letter3 = new THREE.Mesh(planeGeo, darkMat);
letter3.name = 'letter';
letter3.position.set(-0.124, 2.22, 0.4775);
sign1.add(letter3);
const letter4 = new THREE.Mesh(planeGeo, darkMat);
letter4.name = 'letter';
letter4.position.set(-0.062, 2.22, 0.4775);
sign1.add(letter4);
const letter5 = new THREE.Mesh(planeGeo, darkMat);
letter5.name = 'letter';
letter5.position.set(0, 2.22, 0.4775);
sign1.add(letter5);
const letter6 = new THREE.Mesh(planeGeo, darkMat);
letter6.name = 'letter';
letter6.position.set(0.062, 2.22, 0.4775);
sign1.add(letter6);
const letter7 = new THREE.Mesh(planeGeo, darkMat);
letter7.name = 'letter';
letter7.position.set(0.124, 2.22, 0.4775);
sign1.add(letter7);
const letter8 = new THREE.Mesh(planeGeo, darkMat);
letter8.name = 'letter';
letter8.position.set(0.186, 2.22, 0.4775);
sign1.add(letter8);
const letter9 = new THREE.Mesh(planeGeo, darkMat);
letter9.name = 'letter';
letter9.position.set(0.248, 2.22, 0.4775);
sign1.add(letter9);
const crownBoss = new THREE.Mesh(cylinderGeo, goldMat);
crownBoss.name = 'crownBoss';
crownBoss.position.set(0, 2.39, 0.488);
crownBoss.rotation.set(deg(90), 0, 0);
sign1.add(crownBoss);
const sign2 = new THREE.Group();
sign2.name = 'sign2';
sign2.rotation.set(0, deg(90), 0);
root.add(sign2);
const telephoneSign2 = new THREE.Mesh(boxGeo7, signMat);
telephoneSign2.name = 'telephoneSign';
telephoneSign2.position.set(0, 2.22, 0.47);
sign2.add(telephoneSign2);
const letter10 = new THREE.Mesh(planeGeo, darkMat);
letter10.name = 'letter';
letter10.position.set(-0.248, 2.22, 0.4775);
sign2.add(letter10);
const letter11 = new THREE.Mesh(planeGeo, darkMat);
letter11.name = 'letter';
letter11.position.set(-0.186, 2.22, 0.4775);
sign2.add(letter11);
const letter12 = new THREE.Mesh(planeGeo, darkMat);
letter12.name = 'letter';
letter12.position.set(-0.124, 2.22, 0.4775);
sign2.add(letter12);
const letter13 = new THREE.Mesh(planeGeo, darkMat);
letter13.name = 'letter';
letter13.position.set(-0.062, 2.22, 0.4775);
sign2.add(letter13);
const letter14 = new THREE.Mesh(planeGeo, darkMat);
letter14.name = 'letter';
letter14.position.set(0, 2.22, 0.4775);
sign2.add(letter14);
const letter15 = new THREE.Mesh(planeGeo, darkMat);
letter15.name = 'letter';
letter15.position.set(0.062, 2.22, 0.4775);
sign2.add(letter15);
const letter16 = new THREE.Mesh(planeGeo, darkMat);
letter16.name = 'letter';
letter16.position.set(0.124, 2.22, 0.4775);
sign2.add(letter16);
const letter17 = new THREE.Mesh(planeGeo, darkMat);
letter17.name = 'letter';
letter17.position.set(0.186, 2.22, 0.4775);
sign2.add(letter17);
const letter18 = new THREE.Mesh(planeGeo, darkMat);
letter18.name = 'letter';
letter18.position.set(0.248, 2.22, 0.4775);
sign2.add(letter18);
const crownBoss2 = new THREE.Mesh(cylinderGeo, goldMat);
crownBoss2.name = 'crownBoss';
crownBoss2.position.set(0, 2.39, 0.488);
crownBoss2.rotation.set(deg(90), 0, 0);
sign2.add(crownBoss2);
const sign3 = new THREE.Group();
sign3.name = 'sign3';
sign3.rotation.set(0, deg(180), 0);
root.add(sign3);
const telephoneSign3 = new THREE.Mesh(boxGeo7, signMat);
telephoneSign3.name = 'telephoneSign';
telephoneSign3.position.set(0, 2.22, 0.47);
sign3.add(telephoneSign3);
const letter19 = new THREE.Mesh(planeGeo, darkMat);
letter19.name = 'letter';
letter19.position.set(-0.248, 2.22, 0.4775);
sign3.add(letter19);
const letter20 = new THREE.Mesh(planeGeo, darkMat);
letter20.name = 'letter';
letter20.position.set(-0.186, 2.22, 0.4775);
sign3.add(letter20);
const letter21 = new THREE.Mesh(planeGeo, darkMat);
letter21.name = 'letter';
letter21.position.set(-0.124, 2.22, 0.4775);
sign3.add(letter21);
const letter22 = new THREE.Mesh(planeGeo, darkMat);
letter22.name = 'letter';
letter22.position.set(-0.062, 2.22, 0.4775);
sign3.add(letter22);
const letter23 = new THREE.Mesh(planeGeo, darkMat);
letter23.name = 'letter';
letter23.position.set(0, 2.22, 0.4775);
sign3.add(letter23);
const letter24 = new THREE.Mesh(planeGeo, darkMat);
letter24.name = 'letter';
letter24.position.set(0.062, 2.22, 0.4775);
sign3.add(letter24);
const letter25 = new THREE.Mesh(planeGeo, darkMat);
letter25.name = 'letter';
letter25.position.set(0.124, 2.22, 0.4775);
sign3.add(letter25);
const letter26 = new THREE.Mesh(planeGeo, darkMat);
letter26.name = 'letter';
letter26.position.set(0.186, 2.22, 0.4775);
sign3.add(letter26);
const letter27 = new THREE.Mesh(planeGeo, darkMat);
letter27.name = 'letter';
letter27.position.set(0.248, 2.22, 0.4775);
sign3.add(letter27);
const crownBoss3 = new THREE.Mesh(cylinderGeo, goldMat);
crownBoss3.name = 'crownBoss';
crownBoss3.position.set(0, 2.39, 0.488);
crownBoss3.rotation.set(deg(90), 0, 0);
sign3.add(crownBoss3);
const sign4 = new THREE.Group();
sign4.name = 'sign4';
sign4.rotation.set(0, deg(270), 0);
root.add(sign4);
const telephoneSign4 = new THREE.Mesh(boxGeo7, signMat);
telephoneSign4.name = 'telephoneSign';
telephoneSign4.position.set(0, 2.22, 0.47);
sign4.add(telephoneSign4);
const letter28 = new THREE.Mesh(planeGeo, darkMat);
letter28.name = 'letter';
letter28.position.set(-0.248, 2.22, 0.4775);
sign4.add(letter28);
const letter29 = new THREE.Mesh(planeGeo, darkMat);
letter29.name = 'letter';
letter29.position.set(-0.186, 2.22, 0.4775);
sign4.add(letter29);
const letter30 = new THREE.Mesh(planeGeo, darkMat);
letter30.name = 'letter';
letter30.position.set(-0.124, 2.22, 0.4775);
sign4.add(letter30);
const letter31 = new THREE.Mesh(planeGeo, darkMat);
letter31.name = 'letter';
letter31.position.set(-0.062, 2.22, 0.4775);
sign4.add(letter31);
const letter32 = new THREE.Mesh(planeGeo, darkMat);
letter32.name = 'letter';
letter32.position.set(0, 2.22, 0.4775);
sign4.add(letter32);
const letter33 = new THREE.Mesh(planeGeo, darkMat);
letter33.name = 'letter';
letter33.position.set(0.062, 2.22, 0.4775);
sign4.add(letter33);
const letter34 = new THREE.Mesh(planeGeo, darkMat);
letter34.name = 'letter';
letter34.position.set(0.124, 2.22, 0.4775);
sign4.add(letter34);
const letter35 = new THREE.Mesh(planeGeo, darkMat);
letter35.name = 'letter';
letter35.position.set(0.186, 2.22, 0.4775);
sign4.add(letter35);
const letter36 = new THREE.Mesh(planeGeo, darkMat);
letter36.name = 'letter';
letter36.position.set(0.248, 2.22, 0.4775);
sign4.add(letter36);
const crownBoss4 = new THREE.Mesh(cylinderGeo, goldMat);
crownBoss4.name = 'crownBoss';
crownBoss4.position.set(0, 2.39, 0.488);
crownBoss4.rotation.set(deg(90), 0, 0);
sign4.add(crownBoss4);
const payphone = new THREE.Mesh(new THREE.BoxGeometry(0.24, 0.32, 0.12), darkMat);
payphone.name = 'payphone';
payphone.position.set(0, 1.36, -0.36);
root.add(payphone);
const handset = new THREE.Mesh(new THREE.CapsuleGeometry(0.025, 0.14, 2, 6), darkMat);
handset.name = 'handset';
handset.position.set(0, 1.56, -0.36);
handset.rotation.set(0, 0, deg(90));
root.add(handset);
const shelf = new THREE.Mesh(new THREE.BoxGeometry(0.3, 0.04, 0.2), steelMat);
shelf.name = 'shelf';
shelf.position.set(0, 0.97, -0.3);
root.add(shelf);
root.traverse((o) => {
if (o.isMesh) {
o.castShadow = true;
o.receiveShadow = true;
}
});
return root;
}
export default createPhoneBooth;
Valoraciones y comentarios
0 comentarios
Aún no hay comentarios. Cuenta cómo usaste este modelo o qué se podría mejorar.
Modelos relacionados
Misma categoría o etiquetas similares









