Codels
2,6 mil tris4,29 × 2,63 × 2,22 m
Módulo ES autocontido — depende apenas do three. Chame a factory e adicione o grupo à sua cena.
/**
 * Market Stall — Codels 3D model library
 * License: CC0-1.0 · Units: meters · Y-up · Front: +Z · Origin: center of the base (y = 0)
 * Triangles: 2,616 · Size (W × H × D): 4.29 × 2.63 × 2.22 m
 *
 * Usage:
 *   import { createMarketStall } from './market-stall.js';
 *   
 *   const model = createMarketStall();
 *   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 createMarketStall() {
  const root = new THREE.Group();
  root.name = 'MarketStall';

  // Materials
  const woodMat = new THREE.MeshStandardMaterial({ name: 'wood', color: 0x9c6d42, roughness: 0.9, flatShading: true });
  const darkMat = new THREE.MeshStandardMaterial({ name: 'dark', color: 0x674630, roughness: 0.95, flatShading: true });
  const awningMat = new THREE.MeshStandardMaterial({ name: 'awning', color: 0xc9443a, roughness: 0.85, flatShading: true });
  const creamMat = new THREE.MeshStandardMaterial({ name: 'cream', color: 0xefe4c8, roughness: 0.9, flatShading: true });
  const orangeMat = new THREE.MeshStandardMaterial({ name: 'orange', color: 0xe8902a, roughness: 0.7, flatShading: true });
  const greenMat = new THREE.MeshStandardMaterial({ name: 'green', color: 0x93b83a, roughness: 0.7, flatShading: true });
  const clayMat = new THREE.MeshStandardMaterial({ name: 'clay', color: 0xb8653d, roughness: 0.8, flatShading: true });

  // Shared geometries
  const boxGeo = new THREE.BoxGeometry(0.2004, 0.89, 0.05);
  const boxGeo2 = new THREE.BoxGeometry(0.11, 2.2, 0.11);
  const boxGeo3 = new THREE.BoxGeometry(0.11, 2.55, 0.11);
  const boxGeo4 = new THREE.BoxGeometry(0.07, 0.07, 1.5);
  const boxGeo5 = new THREE.BoxGeometry(2.85, 0.1, 0.08);
  const boxGeo6 = new THREE.BoxGeometry(0.3464, 0.03, 2.183);
  const extrudeGeo = extrude([[-0.1722, 0], [0.1722, 0], [0.1722, -0.16], [0.1491, -0.2151], [0.0861, -0.2555], [0, -0.2702], [-0.0861, -0.2555], [-0.1491, -0.2151], [-0.1722, -0.16]], 0.025);
  const boxGeo7 = new THREE.BoxGeometry(0.025, 0.2, 2.183);
  const boxGeo8 = new THREE.BoxGeometry(0.55, 0.16, 0.4);
  const boxGeo9 = new THREE.BoxGeometry(0.04, 0.165, 0.04);
  const boxGeo10 = new THREE.BoxGeometry(0.56, 0.04, 0.41);
  const icosahedronGeo = new THREE.IcosahedronGeometry(0.065, 0);
  const cylinderGeo = new THREE.CylinderGeometry(0.08, 0.09, 0.2, 7);
  const boxGeo11 = new THREE.BoxGeometry(0.04, 0.425, 0.04);
  const boxGeo12 = new THREE.BoxGeometry(0.04, 0.385, 0.04);
  const cylinderGeo2 = new THREE.CylinderGeometry(0.3, 0.3, 0.04, 8);
  const icosahedronGeo2 = new THREE.IcosahedronGeometry(0.07, 0);

  // Parts
  const counterPlank = new THREE.Mesh(boxGeo, darkMat);
  counterPlank.name = 'counterPlank';
  counterPlank.position.set(-1.2923, 0.445, 0.7147);
  root.add(counterPlank);
  const counterPlank2 = new THREE.Mesh(boxGeo, woodMat);
  counterPlank2.name = 'counterPlank';
  counterPlank2.position.set(-1.0769, 0.445, 0.7179);
  root.add(counterPlank2);
  const counterPlank3 = new THREE.Mesh(boxGeo, darkMat);
  counterPlank3.name = 'counterPlank';
  counterPlank3.position.set(-0.8615, 0.445, 0.7194);
  root.add(counterPlank3);
  const counterPlank4 = new THREE.Mesh(boxGeo, woodMat);
  counterPlank4.name = 'counterPlank';
  counterPlank4.position.set(-0.6462, 0.445, 0.7231);
  root.add(counterPlank4);
  const counterPlank5 = new THREE.Mesh(boxGeo, darkMat);
  counterPlank5.name = 'counterPlank';
  counterPlank5.position.set(-0.4308, 0.445, 0.7258);
  root.add(counterPlank5);
  const counterPlank6 = new THREE.Mesh(boxGeo, woodMat);
  counterPlank6.name = 'counterPlank';
  counterPlank6.position.set(-0.2154, 0.445, 0.7179);
  root.add(counterPlank6);
  const counterPlank7 = new THREE.Mesh(boxGeo, darkMat);
  counterPlank7.name = 'counterPlank';
  counterPlank7.position.set(0, 0.445, 0.7218);
  root.add(counterPlank7);
  const counterPlank8 = new THREE.Mesh(boxGeo, woodMat);
  counterPlank8.name = 'counterPlank';
  counterPlank8.position.set(0.2154, 0.445, 0.7204);
  root.add(counterPlank8);
  const counterPlank9 = new THREE.Mesh(boxGeo, darkMat);
  counterPlank9.name = 'counterPlank';
  counterPlank9.position.set(0.4308, 0.445, 0.7204);
  root.add(counterPlank9);
  const counterPlank10 = new THREE.Mesh(boxGeo, woodMat);
  counterPlank10.name = 'counterPlank';
  counterPlank10.position.set(0.6462, 0.445, 0.7239);
  root.add(counterPlank10);
  const counterPlank11 = new THREE.Mesh(boxGeo, darkMat);
  counterPlank11.name = 'counterPlank';
  counterPlank11.position.set(0.8615, 0.445, 0.7154);
  root.add(counterPlank11);
  const counterPlank12 = new THREE.Mesh(boxGeo, woodMat);
  counterPlank12.name = 'counterPlank';
  counterPlank12.position.set(1.0769, 0.445, 0.7198);
  root.add(counterPlank12);
  const counterPlank13 = new THREE.Mesh(boxGeo, darkMat);
  counterPlank13.name = 'counterPlank';
  counterPlank13.position.set(1.2923, 0.445, 0.7209);
  root.add(counterPlank13);
  const counterBody = new THREE.Mesh(new THREE.BoxGeometry(2.7, 0.85, 0.5), darkMat);
  counterBody.name = 'counterBody';
  counterBody.position.set(0, 0.425, 0.43);
  root.add(counterBody);
  const counterTop = new THREE.Mesh(new THREE.BoxGeometry(2.92, 0.06, 0.7), woodMat);
  counterTop.name = 'counterTop';
  counterTop.position.set(0, 0.92, 0.47);
  root.add(counterTop);
  const counterRail = new THREE.Mesh(new THREE.BoxGeometry(2.82, 0.08, 0.06), darkMat);
  counterRail.name = 'counterRail';
  counterRail.position.set(0, 0.35, 0.76);
  root.add(counterRail);
  const frontPost = new THREE.Mesh(boxGeo2, woodMat);
  frontPost.name = 'frontPost';
  frontPost.position.set(-1.38, 1.1, 0.78);
  root.add(frontPost);
  const backPost = new THREE.Mesh(boxGeo3, woodMat);
  backPost.name = 'backPost';
  backPost.position.set(-1.38, 1.275, -0.69);
  root.add(backPost);
  const sideBeam = new THREE.Mesh(boxGeo4, darkMat);
  sideBeam.name = 'sideBeam';
  sideBeam.position.set(-1.38, 1.55, 0);
  root.add(sideBeam);
  const frontPost2 = new THREE.Mesh(boxGeo2, woodMat);
  frontPost2.name = 'frontPost';
  frontPost2.position.set(1.38, 1.1, 0.78);
  root.add(frontPost2);
  const backPost2 = new THREE.Mesh(boxGeo3, woodMat);
  backPost2.name = 'backPost';
  backPost2.position.set(1.38, 1.275, -0.69);
  root.add(backPost2);
  const sideBeam2 = new THREE.Mesh(boxGeo4, darkMat);
  sideBeam2.name = 'sideBeam';
  sideBeam2.position.set(1.38, 1.55, 0);
  root.add(sideBeam2);
  const backBeam = new THREE.Mesh(boxGeo5, darkMat);
  backBeam.name = 'backBeam';
  backBeam.position.set(0, 2.45, -0.69);
  root.add(backBeam);
  const frontBeam = new THREE.Mesh(boxGeo5, darkMat);
  frontBeam.name = 'frontBeam';
  frontBeam.position.set(0, 2.1, 0.78);
  root.add(frontBeam);
  const shelf = new THREE.Mesh(new THREE.BoxGeometry(2.6, 0.05, 0.35), woodMat);
  shelf.name = 'shelf';
  shelf.position.set(0, 1.075, -0.47);
  root.add(shelf);
  const backBoard = new THREE.Mesh(new THREE.BoxGeometry(2.6, 0.7, 0.04), darkMat);
  backBoard.name = 'backBoard';
  backBoard.position.set(0, 0.7, -0.67);
  root.add(backBoard);
  const awningStripe = new THREE.Mesh(boxGeo6, awningMat);
  awningStripe.name = 'awningStripe';
  awningStripe.position.set(-1.3778, 2.3709, 0.235);
  awningStripe.rotation.set(deg(12.6526), 0, 0);
  root.add(awningStripe);
  const valance = new THREE.Mesh(extrudeGeo, awningMat);
  valance.name = 'valance';
  valance.position.set(-1.3778, 2.1318, 1.305);
  root.add(valance);
  const awningStripe2 = new THREE.Mesh(boxGeo6, creamMat);
  awningStripe2.name = 'awningStripe';
  awningStripe2.position.set(-1.0333, 2.3709, 0.235);
  awningStripe2.rotation.set(deg(12.6526), 0, 0);
  root.add(awningStripe2);
  const valance2 = new THREE.Mesh(extrudeGeo, creamMat);
  valance2.name = 'valance';
  valance2.position.set(-1.0333, 2.1318, 1.305);
  root.add(valance2);
  const awningStripe3 = new THREE.Mesh(boxGeo6, awningMat);
  awningStripe3.name = 'awningStripe';
  awningStripe3.position.set(-0.6889, 2.3709, 0.235);
  awningStripe3.rotation.set(deg(12.6526), 0, 0);
  root.add(awningStripe3);
  const valance3 = new THREE.Mesh(extrudeGeo, awningMat);
  valance3.name = 'valance';
  valance3.position.set(-0.6889, 2.1318, 1.305);
  root.add(valance3);
  const awningStripe4 = new THREE.Mesh(boxGeo6, creamMat);
  awningStripe4.name = 'awningStripe';
  awningStripe4.position.set(-0.3444, 2.3709, 0.235);
  awningStripe4.rotation.set(deg(12.6526), 0, 0);
  root.add(awningStripe4);
  const valance4 = new THREE.Mesh(extrudeGeo, creamMat);
  valance4.name = 'valance';
  valance4.position.set(-0.3444, 2.1318, 1.305);
  root.add(valance4);
  const awningStripe5 = new THREE.Mesh(boxGeo6, awningMat);
  awningStripe5.name = 'awningStripe';
  awningStripe5.position.set(0, 2.3709, 0.235);
  awningStripe5.rotation.set(deg(12.6526), 0, 0);
  root.add(awningStripe5);
  const valance5 = new THREE.Mesh(extrudeGeo, awningMat);
  valance5.name = 'valance';
  valance5.position.set(0, 2.1318, 1.305);
  root.add(valance5);
  const awningStripe6 = new THREE.Mesh(boxGeo6, creamMat);
  awningStripe6.name = 'awningStripe';
  awningStripe6.position.set(0.3444, 2.3709, 0.235);
  awningStripe6.rotation.set(deg(12.6526), 0, 0);
  root.add(awningStripe6);
  const valance6 = new THREE.Mesh(extrudeGeo, creamMat);
  valance6.name = 'valance';
  valance6.position.set(0.3444, 2.1318, 1.305);
  root.add(valance6);
  const awningStripe7 = new THREE.Mesh(boxGeo6, awningMat);
  awningStripe7.name = 'awningStripe';
  awningStripe7.position.set(0.6889, 2.3709, 0.235);
  awningStripe7.rotation.set(deg(12.6526), 0, 0);
  root.add(awningStripe7);
  const valance7 = new THREE.Mesh(extrudeGeo, awningMat);
  valance7.name = 'valance';
  valance7.position.set(0.6889, 2.1318, 1.305);
  root.add(valance7);
  const awningStripe8 = new THREE.Mesh(boxGeo6, creamMat);
  awningStripe8.name = 'awningStripe';
  awningStripe8.position.set(1.0333, 2.3709, 0.235);
  awningStripe8.rotation.set(deg(12.6526), 0, 0);
  root.add(awningStripe8);
  const valance8 = new THREE.Mesh(extrudeGeo, creamMat);
  valance8.name = 'valance';
  valance8.position.set(1.0333, 2.1318, 1.305);
  root.add(valance8);
  const awningStripe9 = new THREE.Mesh(boxGeo6, awningMat);
  awningStripe9.name = 'awningStripe';
  awningStripe9.position.set(1.3778, 2.3709, 0.235);
  awningStripe9.rotation.set(deg(12.6526), 0, 0);
  root.add(awningStripe9);
  const valance9 = new THREE.Mesh(extrudeGeo, awningMat);
  valance9.name = 'valance';
  valance9.position.set(1.3778, 2.1318, 1.305);
  root.add(valance9);
  const sideValance = new THREE.Mesh(boxGeo7, awningMat);
  sideValance.name = 'sideValance';
  sideValance.position.set(-1.562, 2.2709, 0.235);
  sideValance.rotation.set(deg(12.6526), 0, 0);
  root.add(sideValance);
  const sideValance2 = new THREE.Mesh(boxGeo7, awningMat);
  sideValance2.name = 'sideValance';
  sideValance2.position.set(1.562, 2.2709, 0.235);
  sideValance2.rotation.set(deg(12.6526), 0, 0);
  root.add(sideValance2);
  const fruitCrate = new THREE.Group();
  fruitCrate.name = 'fruitCrate';
  fruitCrate.position.set(-0.9333, 0.95, 0.47);
  fruitCrate.rotation.set(0, deg(-3.8622), 0);
  root.add(fruitCrate);
  const crate = new THREE.Mesh(boxGeo8, woodMat);
  crate.name = 'crate';
  crate.position.set(0, 0.08, 0);
  fruitCrate.add(crate);
  const box49 = new THREE.Mesh(boxGeo9, darkMat);
  box49.position.set(-0.2575, 0.0825, -0.1825);
  fruitCrate.add(box49);
  const box50 = new THREE.Mesh(boxGeo9, darkMat);
  box50.position.set(-0.2575, 0.0825, 0.1825);
  fruitCrate.add(box50);
  const box51 = new THREE.Mesh(boxGeo9, darkMat);
  box51.position.set(0.2575, 0.0825, -0.1825);
  fruitCrate.add(box51);
  const box52 = new THREE.Mesh(boxGeo9, darkMat);
  box52.position.set(0.2575, 0.0825, 0.1825);
  fruitCrate.add(box52);
  const box53 = new THREE.Mesh(boxGeo10, darkMat);
  box53.position.set(0, 0.092, 0);
  fruitCrate.add(box53);
  const fruit = new THREE.Mesh(icosahedronGeo, orangeMat);
  fruit.name = 'fruit';
  fruit.position.set(-0.202, 0.1723, -0.1283);
  fruit.rotation.set(deg(8.5784), deg(45.2945), 0);
  fruitCrate.add(fruit);
  const fruit2 = new THREE.Mesh(icosahedronGeo, orangeMat);
  fruit2.name = 'fruit';
  fruit2.position.set(-0.1957, 0.18, -0.0007);
  fruit2.rotation.set(deg(17.5633), deg(6.7781), 0);
  fruitCrate.add(fruit2);
  const fruit3 = new THREE.Mesh(icosahedronGeo, orangeMat);
  fruit3.name = 'fruit';
  fruit3.position.set(-0.2072, 0.1732, 0.1157);
  fruit3.rotation.set(deg(14.8055), deg(79.3363), 0);
  fruitCrate.add(fruit3);
  const fruit4 = new THREE.Mesh(icosahedronGeo, orangeMat);
  fruit4.name = 'fruit';
  fruit4.position.set(-0.0716, 0.1839, -0.1112);
  fruit4.rotation.set(deg(42.7472), deg(13.8879), 0);
  fruitCrate.add(fruit4);
  const fruit5 = new THREE.Mesh(icosahedronGeo, orangeMat);
  fruit5.name = 'fruit';
  fruit5.position.set(-0.0717, 0.1825, 0.0073);
  fruit5.rotation.set(deg(0.1317), deg(27.8876), 0);
  fruitCrate.add(fruit5);
  const fruit6 = new THREE.Mesh(icosahedronGeo, orangeMat);
  fruit6.name = 'fruit';
  fruit6.position.set(-0.0583, 0.1831, 0.1199);
  fruit6.rotation.set(deg(35.2569), deg(17.7633), 0);
  fruitCrate.add(fruit6);
  const fruit7 = new THREE.Mesh(icosahedronGeo, orangeMat);
  fruit7.name = 'fruit';
  fruit7.position.set(0.0618, 0.1805, -0.1287);
  fruit7.rotation.set(deg(33.9461), deg(45.8644), 0);
  fruitCrate.add(fruit7);
  const fruit8 = new THREE.Mesh(icosahedronGeo, orangeMat);
  fruit8.name = 'fruit';
  fruit8.position.set(0.0664, 0.1829, 0);
  fruit8.rotation.set(deg(20.1892), deg(9.2618), 0);
  fruitCrate.add(fruit8);
  const fruit9 = new THREE.Mesh(icosahedronGeo, orangeMat);
  fruit9.name = 'fruit';
  fruit9.position.set(0.0698, 0.1732, 0.1254);
  fruit9.rotation.set(deg(79.9611), deg(0.068), 0);
  fruitCrate.add(fruit9);
  const fruit10 = new THREE.Mesh(icosahedronGeo, orangeMat);
  fruit10.name = 'fruit';
  fruit10.position.set(0.1955, 0.1691, -0.1271);
  fruit10.rotation.set(deg(32.2113), deg(72.9344), 0);
  fruitCrate.add(fruit10);
  const fruit11 = new THREE.Mesh(icosahedronGeo, orangeMat);
  fruit11.name = 'fruit';
  fruit11.position.set(0.1927, 0.172, -0.0095);
  fruit11.rotation.set(deg(2.7916), deg(26.5696), 0);
  fruitCrate.add(fruit11);
  const fruit12 = new THREE.Mesh(icosahedronGeo, orangeMat);
  fruit12.name = 'fruit';
  fruit12.position.set(0.2019, 0.1795, 0.1123);
  fruit12.rotation.set(deg(54.644), deg(58.4866), 0);
  fruitCrate.add(fruit12);
  const fruit13 = new THREE.Mesh(icosahedronGeo, orangeMat);
  fruit13.name = 'fruit';
  fruit13.position.set(-0.13, 0.26, -0.0043);
  fruitCrate.add(fruit13);
  const fruit14 = new THREE.Mesh(icosahedronGeo, orangeMat);
  fruit14.name = 'fruit';
  fruit14.position.set(0, 0.26, 0.0053);
  fruitCrate.add(fruit14);
  const fruit15 = new THREE.Mesh(icosahedronGeo, orangeMat);
  fruit15.name = 'fruit';
  fruit15.position.set(0.13, 0.26, -0.0143);
  fruitCrate.add(fruit15);
  const fruitCrate2 = new THREE.Group();
  fruitCrate2.name = 'fruitCrate';
  fruitCrate2.position.set(0, 0.95, 0.47);
  fruitCrate2.rotation.set(0, deg(-3.7494), 0);
  root.add(fruitCrate2);
  const crate2 = new THREE.Mesh(boxGeo8, woodMat);
  crate2.name = 'crate';
  crate2.position.set(0, 0.08, 0);
  fruitCrate2.add(crate2);
  const box71 = new THREE.Mesh(boxGeo9, darkMat);
  box71.position.set(-0.2575, 0.0825, -0.1825);
  fruitCrate2.add(box71);
  const box72 = new THREE.Mesh(boxGeo9, darkMat);
  box72.position.set(-0.2575, 0.0825, 0.1825);
  fruitCrate2.add(box72);
  const box73 = new THREE.Mesh(boxGeo9, darkMat);
  box73.position.set(0.2575, 0.0825, -0.1825);
  fruitCrate2.add(box73);
  const box74 = new THREE.Mesh(boxGeo9, darkMat);
  box74.position.set(0.2575, 0.0825, 0.1825);
  fruitCrate2.add(box74);
  const box75 = new THREE.Mesh(boxGeo10, darkMat);
  box75.position.set(0, 0.092, 0);
  fruitCrate2.add(box75);
  const fruit16 = new THREE.Mesh(icosahedronGeo, greenMat);
  fruit16.name = 'fruit';
  fruit16.position.set(-0.2097, 0.1801, -0.1113);
  fruit16.rotation.set(deg(39.9808), deg(82.5786), 0);
  fruitCrate2.add(fruit16);
  const fruit17 = new THREE.Mesh(icosahedronGeo, greenMat);
  fruit17.name = 'fruit';
  fruit17.position.set(-0.2069, 0.1667, 0.001);
  fruit17.rotation.set(deg(38.9282), deg(8.2392), 0);
  fruitCrate2.add(fruit17);
  const fruit18 = new THREE.Mesh(icosahedronGeo, greenMat);
  fruit18.name = 'fruit';
  fruit18.position.set(-0.2094, 0.1814, 0.1287);
  fruit18.rotation.set(deg(39.5719), deg(47.2852), 0);
  fruitCrate2.add(fruit18);
  const fruit19 = new THREE.Mesh(icosahedronGeo, greenMat);
  fruit19.name = 'fruit';
  fruit19.position.set(-0.0644, 0.1637, -0.1127);
  fruit19.rotation.set(deg(2.4867), deg(52.3365), 0);
  fruitCrate2.add(fruit19);
  const fruit20 = new THREE.Mesh(icosahedronGeo, greenMat);
  fruit20.name = 'fruit';
  fruit20.position.set(-0.0678, 0.1735, 0.0009);
  fruit20.rotation.set(deg(70.6765), deg(60.0523), 0);
  fruitCrate2.add(fruit20);
  const fruit21 = new THREE.Mesh(icosahedronGeo, greenMat);
  fruit21.name = 'fruit';
  fruit21.position.set(-0.06, 0.1588, 0.1269);
  fruit21.rotation.set(deg(73.5462), deg(71.2069), 0);
  fruitCrate2.add(fruit21);
  const fruit22 = new THREE.Mesh(icosahedronGeo, greenMat);
  fruit22.name = 'fruit';
  fruit22.position.set(0.0679, 0.1575, -0.1133);
  fruit22.rotation.set(deg(36.3227), deg(75.0251), 0);
  fruitCrate2.add(fruit22);
  const fruit23 = new THREE.Mesh(icosahedronGeo, greenMat);
  fruit23.name = 'fruit';
  fruit23.position.set(0.0667, 0.163, -0.0059);
  fruit23.rotation.set(deg(70.9999), deg(85.9324), 0);
  fruitCrate2.add(fruit23);
  const fruit24 = new THREE.Mesh(icosahedronGeo, greenMat);
  fruit24.name = 'fruit';
  fruit24.position.set(0.0614, 0.1836, 0.1141);
  fruit24.rotation.set(deg(5.2035), deg(82.7138), 0);
  fruitCrate2.add(fruit24);
  const fruit25 = new THREE.Mesh(icosahedronGeo, greenMat);
  fruit25.name = 'fruit';
  fruit25.position.set(0.2034, 0.1693, -0.116);
  fruit25.rotation.set(deg(76.0657), deg(46.5102), 0);
  fruitCrate2.add(fruit25);
  const fruit26 = new THREE.Mesh(icosahedronGeo, greenMat);
  fruit26.name = 'fruit';
  fruit26.position.set(0.2, 0.1726, -0.001);
  fruit26.rotation.set(deg(17.2619), deg(22.0591), 0);
  fruitCrate2.add(fruit26);
  const fruit27 = new THREE.Mesh(icosahedronGeo, greenMat);
  fruit27.name = 'fruit';
  fruit27.position.set(0.1908, 0.1821, 0.1149);
  fruit27.rotation.set(deg(27.6487), deg(7.6436), 0);
  fruitCrate2.add(fruit27);
  const fruit28 = new THREE.Mesh(icosahedronGeo, greenMat);
  fruit28.name = 'fruit';
  fruit28.position.set(-0.13, 0.26, -0.0077);
  fruitCrate2.add(fruit28);
  const fruit29 = new THREE.Mesh(icosahedronGeo, greenMat);
  fruit29.name = 'fruit';
  fruit29.position.set(0, 0.26, -0.0254);
  fruitCrate2.add(fruit29);
  const fruit30 = new THREE.Mesh(icosahedronGeo, greenMat);
  fruit30.name = 'fruit';
  fruit30.position.set(0.13, 0.26, -0.01);
  fruitCrate2.add(fruit30);
  const fruitCrate3 = new THREE.Group();
  fruitCrate3.name = 'fruitCrate';
  fruitCrate3.position.set(0.9333, 0.95, 0.47);
  fruitCrate3.rotation.set(0, deg(4.1852), 0);
  root.add(fruitCrate3);
  const crate3 = new THREE.Mesh(boxGeo8, woodMat);
  crate3.name = 'crate';
  crate3.position.set(0, 0.08, 0);
  fruitCrate3.add(crate3);
  const box93 = new THREE.Mesh(boxGeo9, darkMat);
  box93.position.set(-0.2575, 0.0825, -0.1825);
  fruitCrate3.add(box93);
  const box94 = new THREE.Mesh(boxGeo9, darkMat);
  box94.position.set(-0.2575, 0.0825, 0.1825);
  fruitCrate3.add(box94);
  const box95 = new THREE.Mesh(boxGeo9, darkMat);
  box95.position.set(0.2575, 0.0825, -0.1825);
  fruitCrate3.add(box95);
  const box96 = new THREE.Mesh(boxGeo9, darkMat);
  box96.position.set(0.2575, 0.0825, 0.1825);
  fruitCrate3.add(box96);
  const box97 = new THREE.Mesh(boxGeo10, darkMat);
  box97.position.set(0, 0.092, 0);
  fruitCrate3.add(box97);
  const fruit31 = new THREE.Mesh(icosahedronGeo, orangeMat);
  fruit31.name = 'fruit';
  fruit31.position.set(-0.1917, 0.1772, -0.1136);
  fruit31.rotation.set(deg(23.0756), deg(26.106), 0);
  fruitCrate3.add(fruit31);
  const fruit32 = new THREE.Mesh(icosahedronGeo, orangeMat);
  fruit32.name = 'fruit';
  fruit32.position.set(-0.19, 0.1691, 0.0012);
  fruit32.rotation.set(deg(62.2379), deg(62.0029), 0);
  fruitCrate3.add(fruit32);
  const fruit33 = new THREE.Mesh(icosahedronGeo, orangeMat);
  fruit33.name = 'fruit';
  fruit33.position.set(-0.2065, 0.17, 0.116);
  fruit33.rotation.set(deg(1.1827), deg(76.9054), 0);
  fruitCrate3.add(fruit33);
  const fruit34 = new THREE.Mesh(icosahedronGeo, orangeMat);
  fruit34.name = 'fruit';
  fruit34.position.set(-0.0625, 0.156, -0.1106);
  fruit34.rotation.set(deg(55.2711), deg(78.597), 0);
  fruitCrate3.add(fruit34);
  const fruit35 = new THREE.Mesh(icosahedronGeo, orangeMat);
  fruit35.name = 'fruit';
  fruit35.position.set(-0.077, 0.1839, -0.0056);
  fruit35.rotation.set(deg(54.7993), deg(63.2379), 0);
  fruitCrate3.add(fruit35);
  const fruit36 = new THREE.Mesh(icosahedronGeo, orangeMat);
  fruit36.name = 'fruit';
  fruit36.position.set(-0.0662, 0.1849, 0.1215);
  fruit36.rotation.set(deg(69.8345), deg(87.2834), 0);
  fruitCrate3.add(fruit36);
  const fruit37 = new THREE.Mesh(icosahedronGeo, orangeMat);
  fruit37.name = 'fruit';
  fruit37.position.set(0.062, 0.1759, -0.1225);
  fruit37.rotation.set(deg(44.4678), deg(49.0467), 0);
  fruitCrate3.add(fruit37);
  const fruit38 = new THREE.Mesh(icosahedronGeo, orangeMat);
  fruit38.name = 'fruit';
  fruit38.position.set(0.0712, 0.1579, -0.0028);
  fruit38.rotation.set(deg(74.6091), deg(57.7697), 0);
  fruitCrate3.add(fruit38);
  const fruit39 = new THREE.Mesh(icosahedronGeo, orangeMat);
  fruit39.name = 'fruit';
  fruit39.position.set(0.0757, 0.1682, 0.1157);
  fruit39.rotation.set(deg(73.7119), deg(29.1452), 0);
  fruitCrate3.add(fruit39);
  const fruit40 = new THREE.Mesh(icosahedronGeo, orangeMat);
  fruit40.name = 'fruit';
  fruit40.position.set(0.1963, 0.1719, -0.1286);
  fruit40.rotation.set(deg(16.8653), deg(7.5422), 0);
  fruitCrate3.add(fruit40);
  const fruit41 = new THREE.Mesh(icosahedronGeo, orangeMat);
  fruit41.name = 'fruit';
  fruit41.position.set(0.2001, 0.1842, -0.0026);
  fruit41.rotation.set(deg(87.3495), deg(7.6649), 0);
  fruitCrate3.add(fruit41);
  const fruit42 = new THREE.Mesh(icosahedronGeo, orangeMat);
  fruit42.name = 'fruit';
  fruit42.position.set(0.2078, 0.1622, 0.1106);
  fruit42.rotation.set(deg(83.842), deg(47.5496), 0);
  fruitCrate3.add(fruit42);
  const fruit43 = new THREE.Mesh(icosahedronGeo, orangeMat);
  fruit43.name = 'fruit';
  fruit43.position.set(-0.13, 0.26, -0.0189);
  fruitCrate3.add(fruit43);
  const fruit44 = new THREE.Mesh(icosahedronGeo, orangeMat);
  fruit44.name = 'fruit';
  fruit44.position.set(0, 0.26, -0.0056);
  fruitCrate3.add(fruit44);
  const fruit45 = new THREE.Mesh(icosahedronGeo, orangeMat);
  fruit45.name = 'fruit';
  fruit45.position.set(0.13, 0.26, 0.0191);
  fruitCrate3.add(fruit45);
  const jar = new THREE.Mesh(cylinderGeo, creamMat);
  jar.name = 'jar';
  jar.position.set(-1.05, 1.2, -0.47);
  root.add(jar);
  const jar2 = new THREE.Mesh(cylinderGeo, clayMat);
  jar2.name = 'jar';
  jar2.position.set(-0.75, 1.2, -0.47);
  root.add(jar2);
  const jar3 = new THREE.Mesh(cylinderGeo, creamMat);
  jar3.name = 'jar';
  jar3.position.set(-0.45, 1.2, -0.47);
  root.add(jar3);
  const jar4 = new THREE.Mesh(cylinderGeo, clayMat);
  jar4.name = 'jar';
  jar4.position.set(-0.15, 1.2, -0.47);
  root.add(jar4);
  const jar5 = new THREE.Mesh(cylinderGeo, creamMat);
  jar5.name = 'jar';
  jar5.position.set(0.15, 1.2, -0.47);
  root.add(jar5);
  const jar6 = new THREE.Mesh(cylinderGeo, clayMat);
  jar6.name = 'jar';
  jar6.position.set(0.45, 1.2, -0.47);
  root.add(jar6);
  const jar7 = new THREE.Mesh(cylinderGeo, creamMat);
  jar7.name = 'jar';
  jar7.position.set(0.75, 1.2, -0.47);
  root.add(jar7);
  const jar8 = new THREE.Mesh(cylinderGeo, clayMat);
  jar8.name = 'jar';
  jar8.position.set(1.05, 1.2, -0.47);
  root.add(jar8);
  const crateStack = new THREE.Group();
  crateStack.name = 'crateStack';
  crateStack.position.set(1.85, 0, 0.55);
  root.add(crateStack);
  const crateA = new THREE.Group();
  crateA.name = 'crateA';
  crateA.rotation.set(0, deg(4), 0);
  crateStack.add(crateA);
  const crate4 = new THREE.Mesh(new THREE.BoxGeometry(0.55, 0.42, 0.5), woodMat);
  crate4.name = 'crate';
  crate4.position.set(0, 0.21, 0);
  crateA.add(crate4);
  const box124 = new THREE.Mesh(boxGeo11, darkMat);
  box124.position.set(-0.2575, 0.2125, -0.2325);
  crateA.add(box124);
  const box125 = new THREE.Mesh(boxGeo11, darkMat);
  box125.position.set(-0.2575, 0.2125, 0.2325);
  crateA.add(box125);
  const box126 = new THREE.Mesh(boxGeo11, darkMat);
  box126.position.set(0.2575, 0.2125, -0.2325);
  crateA.add(box126);
  const box127 = new THREE.Mesh(boxGeo11, darkMat);
  box127.position.set(0.2575, 0.2125, 0.2325);
  crateA.add(box127);
  const box128 = new THREE.Mesh(new THREE.BoxGeometry(0.56, 0.04, 0.51), darkMat);
  box128.position.set(0, 0.209, 0);
  crateA.add(box128);
  const crateB = new THREE.Group();
  crateB.name = 'crateB';
  crateB.position.set(0.02, 0.42, 0);
  crateB.rotation.set(0, deg(-9), 0);
  crateStack.add(crateB);
  const crate5 = new THREE.Mesh(new THREE.BoxGeometry(0.5, 0.38, 0.45), woodMat);
  crate5.name = 'crate';
  crate5.position.set(0, 0.19, 0);
  crateB.add(crate5);
  const box131 = new THREE.Mesh(boxGeo12, darkMat);
  box131.position.set(-0.2325, 0.1925, -0.2075);
  crateB.add(box131);
  const box132 = new THREE.Mesh(boxGeo12, darkMat);
  box132.position.set(-0.2325, 0.1925, 0.2075);
  crateB.add(box132);
  const box133 = new THREE.Mesh(boxGeo12, darkMat);
  box133.position.set(0.2325, 0.1925, -0.2075);
  crateB.add(box133);
  const box134 = new THREE.Mesh(boxGeo12, darkMat);
  box134.position.set(0.2325, 0.1925, 0.2075);
  crateB.add(box134);
  const box135 = new THREE.Mesh(new THREE.BoxGeometry(0.51, 0.04, 0.46), darkMat);
  box135.position.set(0, 0.191, 0);
  crateB.add(box135);
  const barrel = new THREE.Mesh(lathe([[0.24, 0], [0.29, 0.18], [0.31, 0.36], [0.29, 0.54], [0.24, 0.72]], 8), woodMat);
  barrel.name = 'barrel';
  barrel.position.set(-1.82, 0, 0.5);
  root.add(barrel);
  const barrelLid = new THREE.Mesh(new THREE.CircleGeometry(0.24, 8), darkMat);
  barrelLid.name = 'barrelLid';
  barrelLid.position.set(-1.82, 0.721, 0.5);
  barrelLid.rotation.set(deg(-90), 0, 0);
  root.add(barrelLid);
  const barrelHoop = new THREE.Mesh(cylinderGeo2, darkMat);
  barrelHoop.name = 'barrelHoop';
  barrelHoop.position.set(-1.82, 0.12, 0.5);
  root.add(barrelHoop);
  const barrelHoop2 = new THREE.Mesh(cylinderGeo2, darkMat);
  barrelHoop2.name = 'barrelHoop';
  barrelHoop2.position.set(-1.82, 0.6, 0.5);
  root.add(barrelHoop2);
  const basket = new THREE.Group();
  basket.name = 'basket';
  basket.position.set(-1.7, 0, 1.1);
  root.add(basket);
  const basketBody = new THREE.Mesh(new THREE.CylinderGeometry(0.24, 0.19, 0.26, 8), woodMat);
  basketBody.name = 'basketBody';
  basketBody.position.set(0, 0.13, 0);
  basket.add(basketBody);
  const basketRim = new THREE.Mesh(new THREE.TorusGeometry(0.24, 0.025, 4, 8), darkMat);
  basketRim.name = 'basketRim';
  basketRim.position.set(0, 0.26, 0);
  basketRim.rotation.set(deg(90), 0, 0);
  basket.add(basketRim);
  const basketHandle = new THREE.Mesh(new THREE.TorusGeometry(0.2, 0.015, 3, 8, Math.PI), darkMat);
  basketHandle.name = 'basketHandle';
  basketHandle.position.set(0, 0.26, 0);
  basketHandle.scale.set(1, 1.3, 1);
  basket.add(basketHandle);
  const fruit46 = new THREE.Mesh(icosahedronGeo2, greenMat);
  fruit46.name = 'fruit';
  fruit46.position.set(0.12, 0.27, 0);
  basket.add(fruit46);
  const fruit47 = new THREE.Mesh(icosahedronGeo2, greenMat);
  fruit47.name = 'fruit';
  fruit47.position.set(0.0371, 0.27, 0.1141);
  basket.add(fruit47);
  const fruit48 = new THREE.Mesh(icosahedronGeo2, greenMat);
  fruit48.name = 'fruit';
  fruit48.position.set(-0.0971, 0.27, 0.0705);
  basket.add(fruit48);
  const fruit49 = new THREE.Mesh(icosahedronGeo2, greenMat);
  fruit49.name = 'fruit';
  fruit49.position.set(-0.0971, 0.27, -0.0705);
  basket.add(fruit49);
  const fruit50 = new THREE.Mesh(icosahedronGeo2, greenMat);
  fruit50.name = 'fruit';
  fruit50.position.set(0.0371, 0.27, -0.1141);
  basket.add(fruit50);
  const fruit51 = new THREE.Mesh(icosahedronGeo2, greenMat);
  fruit51.name = 'fruit';
  fruit51.position.set(0, 0.33, 0);
  basket.add(fruit51);

  root.traverse((o) => {
    if (o.isMesh) {
      o.castShadow = true;
      o.receiveShadow = true;
    }
  });
  return root;
}

export default createMarketStall;

Avaliações e comentários

—
Nenhuma avaliação ainda — seja o primeiro.
5
0
4
0
3
0
2
0
1
0

Entre para avaliar e comentar.

0 comentário

Nenhum comentário ainda. Conte como você usou este modelo ou o que poderia melhorar.

Modelos relacionados

Mesma categoria ou tags parecidas