Codels
3,1 B üçgen11,5 × 10,6 × 10,9 m
Bağımsız bir ES modülü — yalnızca three paketine bağımlıdır. Fabrika fonksiyonunu çağırıp dönen grubu sahnene ekle.
/**
 * Farmhouse — Codels 3D model library
 * License: CC0-1.0 · Units: meters · Y-up · Front: +Z · Origin: center of the base (y = 0)
 * Triangles: 3,092 · Size (W × H × D): 11.53 × 10.64 × 10.92 m
 *
 * Usage:
 *   import { createFarmhouse } from './farmhouse.js';
 *   
 *   const model = createFarmhouse();
 *   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 createFarmhouse() {
  const root = new THREE.Group();
  root.name = 'Farmhouse';

  // Materials
  const wallMat = new THREE.MeshStandardMaterial({ name: 'wall', color: 0xefeadf, roughness: 0.9, flatShading: true });
  const lineMat = new THREE.MeshStandardMaterial({ name: 'line', color: 0xd2cec4, roughness: 0.9, flatShading: true });
  const trimMat = new THREE.MeshStandardMaterial({ name: 'trim', color: 0xfbfaf6, roughness: 0.8, flatShading: true });
  const shutterMat = new THREE.MeshStandardMaterial({ name: 'shutter', color: 0x33553f, roughness: 0.8, flatShading: true });
  const roofMat = new THREE.MeshStandardMaterial({ name: 'roof', color: 0x56616a, roughness: 0.85, flatShading: true });
  const stoneMat = new THREE.MeshStandardMaterial({ name: 'stone', color: 0x8e8981, roughness: 0.95, flatShading: true });
  const brickMat = new THREE.MeshStandardMaterial({ name: 'brick', color: 0xa3553f, roughness: 0.95, flatShading: true });
  const glassMat = new THREE.MeshStandardMaterial({ name: 'glass', color: 0xa6c9d9, roughness: 0.2, metalness: 0.1, flatShading: true });
  const woodMat = new THREE.MeshStandardMaterial({ name: 'wood', color: 0x9a7653, roughness: 0.9, flatShading: true });

  // Shared geometries
  const boxGeo = new THREE.BoxGeometry(10.02, 0.035, 0.02);
  const boxGeo2 = new THREE.BoxGeometry(0.02, 0.035, 7.02);
  const boxGeo3 = new THREE.BoxGeometry(0.18, 5.8, 0.18);
  const boxGeo4 = new THREE.BoxGeometry(1.15, 1.75, 0.06);
  const boxGeo5 = new THREE.BoxGeometry(0.95, 1.55, 0.04);
  const boxGeo6 = new THREE.BoxGeometry(0.95, 0.06, 0.06);
  const boxGeo7 = new THREE.BoxGeometry(1.31, 0.08, 0.16);
  const boxGeo8 = new THREE.BoxGeometry(1.31, 0.14, 0.08);
  const boxGeo9 = new THREE.BoxGeometry(0.475, 1.65, 0.04);
  const boxGeo10 = new THREE.BoxGeometry(0.95, 2.15, 0.06);
  const boxGeo11 = new THREE.BoxGeometry(0.7, 0.6, 0.03);
  const boxGeo12 = new THREE.BoxGeometry(0.8, 1, 0.06);
  const boxGeo13 = new THREE.BoxGeometry(0.6, 0.8, 0.04);
  const boxGeo14 = new THREE.BoxGeometry(0.6, 0.06, 0.06);
  const boxGeo15 = new THREE.BoxGeometry(0.96, 0.08, 0.16);
  const boxGeo16 = new THREE.BoxGeometry(0.96, 0.14, 0.08);
  const boxGeo17 = new THREE.BoxGeometry(10.7, 0.12, 5.0489);
  const boxGeo18 = new THREE.BoxGeometry(10.72, 0.06, 1.0805);
  const boxGeo19 = new THREE.BoxGeometry(0.08, 0.18, 4.9514);
  const boxGeo20 = new THREE.BoxGeometry(10.7, 0.16, 0.14);
  const boxGeo21 = new THREE.BoxGeometry(0.18, 2.6, 0.18);
  const boxGeo22 = new THREE.BoxGeometry(0.26, 0.18, 0.26);
  const boxGeo23 = new THREE.BoxGeometry(1.78, 0.07, 0.1);
  const boxGeo24 = new THREE.BoxGeometry(1.78, 0.06, 0.08);
  const boxGeo25 = new THREE.BoxGeometry(0.05, 0.7, 0.05);
  const boxGeo26 = new THREE.BoxGeometry(0.07, 0.07, 2.25);
  const boxGeo27 = new THREE.BoxGeometry(0.12, 2.6, 0.12);
  const boxGeo28 = new THREE.BoxGeometry(0.05, 0.42, 0.05);
  const boxGeo29 = new THREE.BoxGeometry(0.05, 0.05, 0.8);

  // Parts
  const foundation = new THREE.Mesh(new THREE.BoxGeometry(10.2, 0.6, 7.2), stoneMat);
  foundation.name = 'foundation';
  foundation.position.set(0, 0.3, 0);
  root.add(foundation);
  const walls = new THREE.Mesh(new THREE.BoxGeometry(10, 5.8, 7), wallMat);
  walls.name = 'walls';
  walls.position.set(0, 3.5, 0);
  root.add(walls);
  const gables = new THREE.Mesh(extrude([[-3.5, 0], [3.5, 0], [0, 2.9168]], 10), wallMat);
  gables.name = 'gables';
  gables.position.set(0, 6.4, 0);
  gables.rotation.set(0, deg(90), 0);
  root.add(gables);
  const siding = new THREE.Mesh(boxGeo, lineMat);
  siding.name = 'siding';
  siding.position.set(0, 0.9, -3.51);
  root.add(siding);
  const siding2 = new THREE.Mesh(boxGeo2, lineMat);
  siding2.name = 'siding';
  siding2.position.set(-5.01, 0.9, 0);
  root.add(siding2);
  const siding3 = new THREE.Mesh(boxGeo, lineMat);
  siding3.name = 'siding';
  siding3.position.set(0, 0.9, 3.51);
  root.add(siding3);
  const siding4 = new THREE.Mesh(boxGeo2, lineMat);
  siding4.name = 'siding';
  siding4.position.set(5.01, 0.9, 0);
  root.add(siding4);
  const siding5 = new THREE.Mesh(boxGeo, lineMat);
  siding5.name = 'siding';
  siding5.position.set(0, 1.3, -3.51);
  root.add(siding5);
  const siding6 = new THREE.Mesh(boxGeo2, lineMat);
  siding6.name = 'siding';
  siding6.position.set(-5.01, 1.3, 0);
  root.add(siding6);
  const siding7 = new THREE.Mesh(boxGeo, lineMat);
  siding7.name = 'siding';
  siding7.position.set(0, 1.3, 3.51);
  root.add(siding7);
  const siding8 = new THREE.Mesh(boxGeo2, lineMat);
  siding8.name = 'siding';
  siding8.position.set(5.01, 1.3, 0);
  root.add(siding8);
  const siding9 = new THREE.Mesh(boxGeo, lineMat);
  siding9.name = 'siding';
  siding9.position.set(0, 1.7, -3.51);
  root.add(siding9);
  const siding10 = new THREE.Mesh(boxGeo2, lineMat);
  siding10.name = 'siding';
  siding10.position.set(-5.01, 1.7, 0);
  root.add(siding10);
  const siding11 = new THREE.Mesh(boxGeo, lineMat);
  siding11.name = 'siding';
  siding11.position.set(0, 1.7, 3.51);
  root.add(siding11);
  const siding12 = new THREE.Mesh(boxGeo2, lineMat);
  siding12.name = 'siding';
  siding12.position.set(5.01, 1.7, 0);
  root.add(siding12);
  const siding13 = new THREE.Mesh(boxGeo, lineMat);
  siding13.name = 'siding';
  siding13.position.set(0, 2.1, -3.51);
  root.add(siding13);
  const siding14 = new THREE.Mesh(boxGeo2, lineMat);
  siding14.name = 'siding';
  siding14.position.set(-5.01, 2.1, 0);
  root.add(siding14);
  const siding15 = new THREE.Mesh(boxGeo, lineMat);
  siding15.name = 'siding';
  siding15.position.set(0, 2.1, 3.51);
  root.add(siding15);
  const siding16 = new THREE.Mesh(boxGeo2, lineMat);
  siding16.name = 'siding';
  siding16.position.set(5.01, 2.1, 0);
  root.add(siding16);
  const siding17 = new THREE.Mesh(boxGeo, lineMat);
  siding17.name = 'siding';
  siding17.position.set(0, 2.5, -3.51);
  root.add(siding17);
  const siding18 = new THREE.Mesh(boxGeo2, lineMat);
  siding18.name = 'siding';
  siding18.position.set(-5.01, 2.5, 0);
  root.add(siding18);
  const siding19 = new THREE.Mesh(boxGeo, lineMat);
  siding19.name = 'siding';
  siding19.position.set(0, 2.5, 3.51);
  root.add(siding19);
  const siding20 = new THREE.Mesh(boxGeo2, lineMat);
  siding20.name = 'siding';
  siding20.position.set(5.01, 2.5, 0);
  root.add(siding20);
  const siding21 = new THREE.Mesh(boxGeo, lineMat);
  siding21.name = 'siding';
  siding21.position.set(0, 2.9, -3.51);
  root.add(siding21);
  const siding22 = new THREE.Mesh(boxGeo2, lineMat);
  siding22.name = 'siding';
  siding22.position.set(-5.01, 2.9, 0);
  root.add(siding22);
  const siding23 = new THREE.Mesh(boxGeo, lineMat);
  siding23.name = 'siding';
  siding23.position.set(0, 2.9, 3.51);
  root.add(siding23);
  const siding24 = new THREE.Mesh(boxGeo2, lineMat);
  siding24.name = 'siding';
  siding24.position.set(5.01, 2.9, 0);
  root.add(siding24);
  const siding25 = new THREE.Mesh(boxGeo, lineMat);
  siding25.name = 'siding';
  siding25.position.set(0, 3.3, -3.51);
  root.add(siding25);
  const siding26 = new THREE.Mesh(boxGeo2, lineMat);
  siding26.name = 'siding';
  siding26.position.set(-5.01, 3.3, 0);
  root.add(siding26);
  const siding27 = new THREE.Mesh(boxGeo, lineMat);
  siding27.name = 'siding';
  siding27.position.set(0, 3.3, 3.51);
  root.add(siding27);
  const siding28 = new THREE.Mesh(boxGeo2, lineMat);
  siding28.name = 'siding';
  siding28.position.set(5.01, 3.3, 0);
  root.add(siding28);
  const siding29 = new THREE.Mesh(boxGeo, lineMat);
  siding29.name = 'siding';
  siding29.position.set(0, 3.7, -3.51);
  root.add(siding29);
  const siding30 = new THREE.Mesh(boxGeo2, lineMat);
  siding30.name = 'siding';
  siding30.position.set(-5.01, 3.7, 0);
  root.add(siding30);
  const siding31 = new THREE.Mesh(boxGeo, lineMat);
  siding31.name = 'siding';
  siding31.position.set(0, 3.7, 3.51);
  root.add(siding31);
  const siding32 = new THREE.Mesh(boxGeo2, lineMat);
  siding32.name = 'siding';
  siding32.position.set(5.01, 3.7, 0);
  root.add(siding32);
  const siding33 = new THREE.Mesh(boxGeo, lineMat);
  siding33.name = 'siding';
  siding33.position.set(0, 4.1, -3.51);
  root.add(siding33);
  const siding34 = new THREE.Mesh(boxGeo2, lineMat);
  siding34.name = 'siding';
  siding34.position.set(-5.01, 4.1, 0);
  root.add(siding34);
  const siding35 = new THREE.Mesh(boxGeo, lineMat);
  siding35.name = 'siding';
  siding35.position.set(0, 4.1, 3.51);
  root.add(siding35);
  const siding36 = new THREE.Mesh(boxGeo2, lineMat);
  siding36.name = 'siding';
  siding36.position.set(5.01, 4.1, 0);
  root.add(siding36);
  const siding37 = new THREE.Mesh(boxGeo, lineMat);
  siding37.name = 'siding';
  siding37.position.set(0, 4.5, -3.51);
  root.add(siding37);
  const siding38 = new THREE.Mesh(boxGeo2, lineMat);
  siding38.name = 'siding';
  siding38.position.set(-5.01, 4.5, 0);
  root.add(siding38);
  const siding39 = new THREE.Mesh(boxGeo, lineMat);
  siding39.name = 'siding';
  siding39.position.set(0, 4.5, 3.51);
  root.add(siding39);
  const siding40 = new THREE.Mesh(boxGeo2, lineMat);
  siding40.name = 'siding';
  siding40.position.set(5.01, 4.5, 0);
  root.add(siding40);
  const siding41 = new THREE.Mesh(boxGeo, lineMat);
  siding41.name = 'siding';
  siding41.position.set(0, 4.9, -3.51);
  root.add(siding41);
  const siding42 = new THREE.Mesh(boxGeo2, lineMat);
  siding42.name = 'siding';
  siding42.position.set(-5.01, 4.9, 0);
  root.add(siding42);
  const siding43 = new THREE.Mesh(boxGeo, lineMat);
  siding43.name = 'siding';
  siding43.position.set(0, 4.9, 3.51);
  root.add(siding43);
  const siding44 = new THREE.Mesh(boxGeo2, lineMat);
  siding44.name = 'siding';
  siding44.position.set(5.01, 4.9, 0);
  root.add(siding44);
  const siding45 = new THREE.Mesh(boxGeo, lineMat);
  siding45.name = 'siding';
  siding45.position.set(0, 5.3, -3.51);
  root.add(siding45);
  const siding46 = new THREE.Mesh(boxGeo2, lineMat);
  siding46.name = 'siding';
  siding46.position.set(-5.01, 5.3, 0);
  root.add(siding46);
  const siding47 = new THREE.Mesh(boxGeo, lineMat);
  siding47.name = 'siding';
  siding47.position.set(0, 5.3, 3.51);
  root.add(siding47);
  const siding48 = new THREE.Mesh(boxGeo2, lineMat);
  siding48.name = 'siding';
  siding48.position.set(5.01, 5.3, 0);
  root.add(siding48);
  const siding49 = new THREE.Mesh(boxGeo, lineMat);
  siding49.name = 'siding';
  siding49.position.set(0, 5.7, -3.51);
  root.add(siding49);
  const siding50 = new THREE.Mesh(boxGeo2, lineMat);
  siding50.name = 'siding';
  siding50.position.set(-5.01, 5.7, 0);
  root.add(siding50);
  const siding51 = new THREE.Mesh(boxGeo, lineMat);
  siding51.name = 'siding';
  siding51.position.set(0, 5.7, 3.51);
  root.add(siding51);
  const siding52 = new THREE.Mesh(boxGeo2, lineMat);
  siding52.name = 'siding';
  siding52.position.set(5.01, 5.7, 0);
  root.add(siding52);
  const siding53 = new THREE.Mesh(boxGeo, lineMat);
  siding53.name = 'siding';
  siding53.position.set(0, 6.1, -3.51);
  root.add(siding53);
  const siding54 = new THREE.Mesh(boxGeo2, lineMat);
  siding54.name = 'siding';
  siding54.position.set(-5.01, 6.1, 0);
  root.add(siding54);
  const siding55 = new THREE.Mesh(boxGeo, lineMat);
  siding55.name = 'siding';
  siding55.position.set(0, 6.1, 3.51);
  root.add(siding55);
  const siding56 = new THREE.Mesh(boxGeo2, lineMat);
  siding56.name = 'siding';
  siding56.position.set(5.01, 6.1, 0);
  root.add(siding56);
  const cornerBoard = new THREE.Mesh(boxGeo3, trimMat);
  cornerBoard.name = 'cornerBoard';
  cornerBoard.position.set(-4.95, 3.5, -3.45);
  root.add(cornerBoard);
  const cornerBoard2 = new THREE.Mesh(boxGeo3, trimMat);
  cornerBoard2.name = 'cornerBoard';
  cornerBoard2.position.set(-4.95, 3.5, 3.45);
  root.add(cornerBoard2);
  const cornerBoard3 = new THREE.Mesh(boxGeo3, trimMat);
  cornerBoard3.name = 'cornerBoard';
  cornerBoard3.position.set(4.95, 3.5, -3.45);
  root.add(cornerBoard3);
  const cornerBoard4 = new THREE.Mesh(boxGeo3, trimMat);
  cornerBoard4.name = 'cornerBoard';
  cornerBoard4.position.set(4.95, 3.5, 3.45);
  root.add(cornerBoard4);
  const floorBand = new THREE.Mesh(new THREE.BoxGeometry(10.1, 0.18, 7.1), trimMat);
  floorBand.name = 'floorBand';
  floorBand.position.set(0, 3.5, 0);
  root.add(floorBand);
  const frieze = new THREE.Mesh(new THREE.BoxGeometry(10.12, 0.22, 7.12), trimMat);
  frieze.name = 'frieze';
  frieze.position.set(0, 6.29, 0);
  root.add(frieze);
  const frontFacade = new THREE.Group();
  frontFacade.name = 'frontFacade';
  frontFacade.position.set(0, 0, 3.5);
  root.add(frontFacade);
  const windowCasing = new THREE.Mesh(boxGeo4, trimMat);
  windowCasing.name = 'windowCasing';
  windowCasing.position.set(-3.155, 2.15, 0.03);
  frontFacade.add(windowCasing);
  const windowGlass = new THREE.Mesh(boxGeo5, glassMat);
  windowGlass.name = 'windowGlass';
  windowGlass.position.set(-3.155, 2.15, 0.06);
  frontFacade.add(windowGlass);
  const meetingRail = new THREE.Mesh(boxGeo6, trimMat);
  meetingRail.name = 'meetingRail';
  meetingRail.position.set(-3.155, 2.15, 0.08);
  frontFacade.add(meetingRail);
  const windowSill = new THREE.Mesh(boxGeo7, trimMat);
  windowSill.name = 'windowSill';
  windowSill.position.set(-3.155, 1.255, 0.08);
  frontFacade.add(windowSill);
  const windowHead = new THREE.Mesh(boxGeo8, trimMat);
  windowHead.name = 'windowHead';
  windowHead.position.set(-3.155, 3.095, 0.05);
  frontFacade.add(windowHead);
  const shutter = new THREE.Mesh(boxGeo9, shutterMat);
  shutter.name = 'shutter';
  shutter.position.set(-4.0075, 2.15, 0.04);
  frontFacade.add(shutter);
  const shutter2 = new THREE.Mesh(boxGeo9, shutterMat);
  shutter2.name = 'shutter';
  shutter2.position.set(-2.3025, 2.15, 0.04);
  frontFacade.add(shutter2);
  const windowCasing2 = new THREE.Mesh(boxGeo4, trimMat);
  windowCasing2.name = 'windowCasing';
  windowCasing2.position.set(-3.155, 5, 0.03);
  frontFacade.add(windowCasing2);
  const windowGlass2 = new THREE.Mesh(boxGeo5, glassMat);
  windowGlass2.name = 'windowGlass';
  windowGlass2.position.set(-3.155, 5, 0.06);
  frontFacade.add(windowGlass2);
  const meetingRail2 = new THREE.Mesh(boxGeo6, trimMat);
  meetingRail2.name = 'meetingRail';
  meetingRail2.position.set(-3.155, 5, 0.08);
  frontFacade.add(meetingRail2);
  const windowSill2 = new THREE.Mesh(boxGeo7, trimMat);
  windowSill2.name = 'windowSill';
  windowSill2.position.set(-3.155, 4.105, 0.08);
  frontFacade.add(windowSill2);
  const windowHead2 = new THREE.Mesh(boxGeo8, trimMat);
  windowHead2.name = 'windowHead';
  windowHead2.position.set(-3.155, 5.945, 0.05);
  frontFacade.add(windowHead2);
  const shutter3 = new THREE.Mesh(boxGeo9, shutterMat);
  shutter3.name = 'shutter';
  shutter3.position.set(-4.0075, 5, 0.04);
  frontFacade.add(shutter3);
  const shutter4 = new THREE.Mesh(boxGeo9, shutterMat);
  shutter4.name = 'shutter';
  shutter4.position.set(-2.3025, 5, 0.04);
  frontFacade.add(shutter4);
  const windowCasing3 = new THREE.Mesh(boxGeo4, trimMat);
  windowCasing3.name = 'windowCasing';
  windowCasing3.position.set(3.155, 2.15, 0.03);
  frontFacade.add(windowCasing3);
  const windowGlass3 = new THREE.Mesh(boxGeo5, glassMat);
  windowGlass3.name = 'windowGlass';
  windowGlass3.position.set(3.155, 2.15, 0.06);
  frontFacade.add(windowGlass3);
  const meetingRail3 = new THREE.Mesh(boxGeo6, trimMat);
  meetingRail3.name = 'meetingRail';
  meetingRail3.position.set(3.155, 2.15, 0.08);
  frontFacade.add(meetingRail3);
  const windowSill3 = new THREE.Mesh(boxGeo7, trimMat);
  windowSill3.name = 'windowSill';
  windowSill3.position.set(3.155, 1.255, 0.08);
  frontFacade.add(windowSill3);
  const windowHead3 = new THREE.Mesh(boxGeo8, trimMat);
  windowHead3.name = 'windowHead';
  windowHead3.position.set(3.155, 3.095, 0.05);
  frontFacade.add(windowHead3);
  const shutter5 = new THREE.Mesh(boxGeo9, shutterMat);
  shutter5.name = 'shutter';
  shutter5.position.set(2.3025, 2.15, 0.04);
  frontFacade.add(shutter5);
  const shutter6 = new THREE.Mesh(boxGeo9, shutterMat);
  shutter6.name = 'shutter';
  shutter6.position.set(4.0075, 2.15, 0.04);
  frontFacade.add(shutter6);
  const windowCasing4 = new THREE.Mesh(boxGeo4, trimMat);
  windowCasing4.name = 'windowCasing';
  windowCasing4.position.set(3.155, 5, 0.03);
  frontFacade.add(windowCasing4);
  const windowGlass4 = new THREE.Mesh(boxGeo5, glassMat);
  windowGlass4.name = 'windowGlass';
  windowGlass4.position.set(3.155, 5, 0.06);
  frontFacade.add(windowGlass4);
  const meetingRail4 = new THREE.Mesh(boxGeo6, trimMat);
  meetingRail4.name = 'meetingRail';
  meetingRail4.position.set(3.155, 5, 0.08);
  frontFacade.add(meetingRail4);
  const windowSill4 = new THREE.Mesh(boxGeo7, trimMat);
  windowSill4.name = 'windowSill';
  windowSill4.position.set(3.155, 4.105, 0.08);
  frontFacade.add(windowSill4);
  const windowHead4 = new THREE.Mesh(boxGeo8, trimMat);
  windowHead4.name = 'windowHead';
  windowHead4.position.set(3.155, 5.945, 0.05);
  frontFacade.add(windowHead4);
  const shutter7 = new THREE.Mesh(boxGeo9, shutterMat);
  shutter7.name = 'shutter';
  shutter7.position.set(2.3025, 5, 0.04);
  frontFacade.add(shutter7);
  const shutter8 = new THREE.Mesh(boxGeo9, shutterMat);
  shutter8.name = 'shutter';
  shutter8.position.set(4.0075, 5, 0.04);
  frontFacade.add(shutter8);
  const windowCasing5 = new THREE.Mesh(new THREE.BoxGeometry(0.96, 1.5175, 0.06), trimMat);
  windowCasing5.name = 'windowCasing';
  windowCasing5.position.set(0, 5, 0.03);
  frontFacade.add(windowCasing5);
  const windowGlass5 = new THREE.Mesh(new THREE.BoxGeometry(0.76, 1.3175, 0.04), glassMat);
  windowGlass5.name = 'windowGlass';
  windowGlass5.position.set(0, 5, 0.06);
  frontFacade.add(windowGlass5);
  const meetingRail5 = new THREE.Mesh(new THREE.BoxGeometry(0.76, 0.06, 0.06), trimMat);
  meetingRail5.name = 'meetingRail';
  meetingRail5.position.set(0, 5, 0.08);
  frontFacade.add(meetingRail5);
  const windowSill5 = new THREE.Mesh(new THREE.BoxGeometry(1.12, 0.08, 0.16), trimMat);
  windowSill5.name = 'windowSill';
  windowSill5.position.set(0, 4.2213, 0.08);
  frontFacade.add(windowSill5);
  const windowHead5 = new THREE.Mesh(new THREE.BoxGeometry(1.12, 0.14, 0.08), trimMat);
  windowHead5.name = 'windowHead';
  windowHead5.position.set(0, 5.8287, 0.05);
  frontFacade.add(windowHead5);
  const doorCasing = new THREE.Mesh(new THREE.BoxGeometry(1.5, 2.75, 0.06), trimMat);
  doorCasing.name = 'doorCasing';
  doorCasing.position.set(0, 1.975, 0.03);
  frontFacade.add(doorCasing);
  const frontDoor = new THREE.Mesh(boxGeo10, shutterMat);
  frontDoor.name = 'frontDoor';
  frontDoor.position.set(0, 1.675, 0.06);
  frontFacade.add(frontDoor);
  const doorPanel = new THREE.Mesh(boxGeo11, trimMat);
  doorPanel.name = 'doorPanel';
  doorPanel.position.set(0, 1.15, 0.1);
  frontFacade.add(doorPanel);
  const doorPanel2 = new THREE.Mesh(boxGeo11, trimMat);
  doorPanel2.name = 'doorPanel';
  doorPanel2.position.set(0, 2.05, 0.1);
  frontFacade.add(doorPanel2);
  const transom = new THREE.Mesh(new THREE.BoxGeometry(1.2, 0.36, 0.04), glassMat);
  transom.name = 'transom';
  transom.position.set(0, 3.03, 0.07);
  frontFacade.add(transom);
  const doorKnob = new THREE.Mesh(new THREE.SphereGeometry(0.04, 6, 4), brickMat);
  doorKnob.name = 'doorKnob';
  doorKnob.position.set(0.33, 1.65, 0.13);
  frontFacade.add(doorKnob);
  const backFacade = new THREE.Group();
  backFacade.name = 'backFacade';
  backFacade.position.set(0, 0, -3.5);
  backFacade.rotation.set(0, deg(180), 0);
  root.add(backFacade);
  const windowCasing6 = new THREE.Mesh(boxGeo4, trimMat);
  windowCasing6.name = 'windowCasing';
  windowCasing6.position.set(-2.95, 2.15, 0.03);
  backFacade.add(windowCasing6);
  const windowGlass6 = new THREE.Mesh(boxGeo5, glassMat);
  windowGlass6.name = 'windowGlass';
  windowGlass6.position.set(-2.95, 2.15, 0.06);
  backFacade.add(windowGlass6);
  const meetingRail6 = new THREE.Mesh(boxGeo6, trimMat);
  meetingRail6.name = 'meetingRail';
  meetingRail6.position.set(-2.95, 2.15, 0.08);
  backFacade.add(meetingRail6);
  const windowSill6 = new THREE.Mesh(boxGeo7, trimMat);
  windowSill6.name = 'windowSill';
  windowSill6.position.set(-2.95, 1.255, 0.08);
  backFacade.add(windowSill6);
  const windowHead6 = new THREE.Mesh(boxGeo8, trimMat);
  windowHead6.name = 'windowHead';
  windowHead6.position.set(-2.95, 3.095, 0.05);
  backFacade.add(windowHead6);
  const windowCasing7 = new THREE.Mesh(boxGeo4, trimMat);
  windowCasing7.name = 'windowCasing';
  windowCasing7.position.set(-2.95, 5, 0.03);
  backFacade.add(windowCasing7);
  const windowGlass7 = new THREE.Mesh(boxGeo5, glassMat);
  windowGlass7.name = 'windowGlass';
  windowGlass7.position.set(-2.95, 5, 0.06);
  backFacade.add(windowGlass7);
  const meetingRail7 = new THREE.Mesh(boxGeo6, trimMat);
  meetingRail7.name = 'meetingRail';
  meetingRail7.position.set(-2.95, 5, 0.08);
  backFacade.add(meetingRail7);
  const windowSill7 = new THREE.Mesh(boxGeo7, trimMat);
  windowSill7.name = 'windowSill';
  windowSill7.position.set(-2.95, 4.105, 0.08);
  backFacade.add(windowSill7);
  const windowHead7 = new THREE.Mesh(boxGeo8, trimMat);
  windowHead7.name = 'windowHead';
  windowHead7.position.set(-2.95, 5.945, 0.05);
  backFacade.add(windowHead7);
  const windowCasing8 = new THREE.Mesh(boxGeo4, trimMat);
  windowCasing8.name = 'windowCasing';
  windowCasing8.position.set(2.95, 2.15, 0.03);
  backFacade.add(windowCasing8);
  const windowGlass8 = new THREE.Mesh(boxGeo5, glassMat);
  windowGlass8.name = 'windowGlass';
  windowGlass8.position.set(2.95, 2.15, 0.06);
  backFacade.add(windowGlass8);
  const meetingRail8 = new THREE.Mesh(boxGeo6, trimMat);
  meetingRail8.name = 'meetingRail';
  meetingRail8.position.set(2.95, 2.15, 0.08);
  backFacade.add(meetingRail8);
  const windowSill8 = new THREE.Mesh(boxGeo7, trimMat);
  windowSill8.name = 'windowSill';
  windowSill8.position.set(2.95, 1.255, 0.08);
  backFacade.add(windowSill8);
  const windowHead8 = new THREE.Mesh(boxGeo8, trimMat);
  windowHead8.name = 'windowHead';
  windowHead8.position.set(2.95, 3.095, 0.05);
  backFacade.add(windowHead8);
  const windowCasing9 = new THREE.Mesh(boxGeo4, trimMat);
  windowCasing9.name = 'windowCasing';
  windowCasing9.position.set(2.95, 5, 0.03);
  backFacade.add(windowCasing9);
  const windowGlass9 = new THREE.Mesh(boxGeo5, glassMat);
  windowGlass9.name = 'windowGlass';
  windowGlass9.position.set(2.95, 5, 0.06);
  backFacade.add(windowGlass9);
  const meetingRail9 = new THREE.Mesh(boxGeo6, trimMat);
  meetingRail9.name = 'meetingRail';
  meetingRail9.position.set(2.95, 5, 0.08);
  backFacade.add(meetingRail9);
  const windowSill9 = new THREE.Mesh(boxGeo7, trimMat);
  windowSill9.name = 'windowSill';
  windowSill9.position.set(2.95, 4.105, 0.08);
  backFacade.add(windowSill9);
  const windowHead9 = new THREE.Mesh(boxGeo8, trimMat);
  windowHead9.name = 'windowHead';
  windowHead9.position.set(2.95, 5.945, 0.05);
  backFacade.add(windowHead9);
  const backDoor = new THREE.Mesh(boxGeo10, shutterMat);
  backDoor.name = 'backDoor';
  backDoor.position.set(0, 1.675, 0.04);
  backFacade.add(backDoor);
  const backDoorCasing = new THREE.Mesh(new THREE.BoxGeometry(1.2, 2.35, 0.04), trimMat);
  backDoorCasing.name = 'backDoorCasing';
  backDoorCasing.position.set(0, 1.775, 0.02);
  backFacade.add(backDoorCasing);
  const leftFacade = new THREE.Group();
  leftFacade.name = 'leftFacade';
  leftFacade.position.set(-5, 0, 0);
  leftFacade.rotation.set(0, deg(-90), 0);
  root.add(leftFacade);
  const windowCasing10 = new THREE.Mesh(boxGeo4, trimMat);
  windowCasing10.name = 'windowCasing';
  windowCasing10.position.set(-1.5, 2.15, 0.03);
  leftFacade.add(windowCasing10);
  const windowGlass10 = new THREE.Mesh(boxGeo5, glassMat);
  windowGlass10.name = 'windowGlass';
  windowGlass10.position.set(-1.5, 2.15, 0.06);
  leftFacade.add(windowGlass10);
  const meetingRail10 = new THREE.Mesh(boxGeo6, trimMat);
  meetingRail10.name = 'meetingRail';
  meetingRail10.position.set(-1.5, 2.15, 0.08);
  leftFacade.add(meetingRail10);
  const windowSill10 = new THREE.Mesh(boxGeo7, trimMat);
  windowSill10.name = 'windowSill';
  windowSill10.position.set(-1.5, 1.255, 0.08);
  leftFacade.add(windowSill10);
  const windowHead10 = new THREE.Mesh(boxGeo8, trimMat);
  windowHead10.name = 'windowHead';
  windowHead10.position.set(-1.5, 3.095, 0.05);
  leftFacade.add(windowHead10);
  const shutter9 = new THREE.Mesh(boxGeo9, shutterMat);
  shutter9.name = 'shutter';
  shutter9.position.set(-2.3525, 2.15, 0.04);
  leftFacade.add(shutter9);
  const shutter10 = new THREE.Mesh(boxGeo9, shutterMat);
  shutter10.name = 'shutter';
  shutter10.position.set(-0.6475, 2.15, 0.04);
  leftFacade.add(shutter10);
  const windowCasing11 = new THREE.Mesh(boxGeo4, trimMat);
  windowCasing11.name = 'windowCasing';
  windowCasing11.position.set(-1.5, 5, 0.03);
  leftFacade.add(windowCasing11);
  const windowGlass11 = new THREE.Mesh(boxGeo5, glassMat);
  windowGlass11.name = 'windowGlass';
  windowGlass11.position.set(-1.5, 5, 0.06);
  leftFacade.add(windowGlass11);
  const meetingRail11 = new THREE.Mesh(boxGeo6, trimMat);
  meetingRail11.name = 'meetingRail';
  meetingRail11.position.set(-1.5, 5, 0.08);
  leftFacade.add(meetingRail11);
  const windowSill11 = new THREE.Mesh(boxGeo7, trimMat);
  windowSill11.name = 'windowSill';
  windowSill11.position.set(-1.5, 4.105, 0.08);
  leftFacade.add(windowSill11);
  const windowHead11 = new THREE.Mesh(boxGeo8, trimMat);
  windowHead11.name = 'windowHead';
  windowHead11.position.set(-1.5, 5.945, 0.05);
  leftFacade.add(windowHead11);
  const shutter11 = new THREE.Mesh(boxGeo9, shutterMat);
  shutter11.name = 'shutter';
  shutter11.position.set(-2.3525, 5, 0.04);
  leftFacade.add(shutter11);
  const shutter12 = new THREE.Mesh(boxGeo9, shutterMat);
  shutter12.name = 'shutter';
  shutter12.position.set(-0.6475, 5, 0.04);
  leftFacade.add(shutter12);
  const windowCasing12 = new THREE.Mesh(boxGeo4, trimMat);
  windowCasing12.name = 'windowCasing';
  windowCasing12.position.set(1.5, 2.15, 0.03);
  leftFacade.add(windowCasing12);
  const windowGlass12 = new THREE.Mesh(boxGeo5, glassMat);
  windowGlass12.name = 'windowGlass';
  windowGlass12.position.set(1.5, 2.15, 0.06);
  leftFacade.add(windowGlass12);
  const meetingRail12 = new THREE.Mesh(boxGeo6, trimMat);
  meetingRail12.name = 'meetingRail';
  meetingRail12.position.set(1.5, 2.15, 0.08);
  leftFacade.add(meetingRail12);
  const windowSill12 = new THREE.Mesh(boxGeo7, trimMat);
  windowSill12.name = 'windowSill';
  windowSill12.position.set(1.5, 1.255, 0.08);
  leftFacade.add(windowSill12);
  const windowHead12 = new THREE.Mesh(boxGeo8, trimMat);
  windowHead12.name = 'windowHead';
  windowHead12.position.set(1.5, 3.095, 0.05);
  leftFacade.add(windowHead12);
  const shutter13 = new THREE.Mesh(boxGeo9, shutterMat);
  shutter13.name = 'shutter';
  shutter13.position.set(0.6475, 2.15, 0.04);
  leftFacade.add(shutter13);
  const shutter14 = new THREE.Mesh(boxGeo9, shutterMat);
  shutter14.name = 'shutter';
  shutter14.position.set(2.3525, 2.15, 0.04);
  leftFacade.add(shutter14);
  const windowCasing13 = new THREE.Mesh(boxGeo4, trimMat);
  windowCasing13.name = 'windowCasing';
  windowCasing13.position.set(1.5, 5, 0.03);
  leftFacade.add(windowCasing13);
  const windowGlass13 = new THREE.Mesh(boxGeo5, glassMat);
  windowGlass13.name = 'windowGlass';
  windowGlass13.position.set(1.5, 5, 0.06);
  leftFacade.add(windowGlass13);
  const meetingRail13 = new THREE.Mesh(boxGeo6, trimMat);
  meetingRail13.name = 'meetingRail';
  meetingRail13.position.set(1.5, 5, 0.08);
  leftFacade.add(meetingRail13);
  const windowSill13 = new THREE.Mesh(boxGeo7, trimMat);
  windowSill13.name = 'windowSill';
  windowSill13.position.set(1.5, 4.105, 0.08);
  leftFacade.add(windowSill13);
  const windowHead13 = new THREE.Mesh(boxGeo8, trimMat);
  windowHead13.name = 'windowHead';
  windowHead13.position.set(1.5, 5.945, 0.05);
  leftFacade.add(windowHead13);
  const shutter15 = new THREE.Mesh(boxGeo9, shutterMat);
  shutter15.name = 'shutter';
  shutter15.position.set(0.6475, 5, 0.04);
  leftFacade.add(shutter15);
  const shutter16 = new THREE.Mesh(boxGeo9, shutterMat);
  shutter16.name = 'shutter';
  shutter16.position.set(2.3525, 5, 0.04);
  leftFacade.add(shutter16);
  const windowCasing14 = new THREE.Mesh(boxGeo12, trimMat);
  windowCasing14.name = 'windowCasing';
  windowCasing14.position.set(0, 7.5747, 0.03);
  leftFacade.add(windowCasing14);
  const windowGlass14 = new THREE.Mesh(boxGeo13, glassMat);
  windowGlass14.name = 'windowGlass';
  windowGlass14.position.set(0, 7.5747, 0.06);
  leftFacade.add(windowGlass14);
  const meetingRail14 = new THREE.Mesh(boxGeo14, trimMat);
  meetingRail14.name = 'meetingRail';
  meetingRail14.position.set(0, 7.5747, 0.08);
  leftFacade.add(meetingRail14);
  const windowSill14 = new THREE.Mesh(boxGeo15, trimMat);
  windowSill14.name = 'windowSill';
  windowSill14.position.set(0, 7.0547, 0.08);
  leftFacade.add(windowSill14);
  const windowHead14 = new THREE.Mesh(boxGeo16, trimMat);
  windowHead14.name = 'windowHead';
  windowHead14.position.set(0, 8.1447, 0.05);
  leftFacade.add(windowHead14);
  const rightFacade = new THREE.Group();
  rightFacade.name = 'rightFacade';
  rightFacade.position.set(5, 0, 0);
  rightFacade.rotation.set(0, deg(90), 0);
  root.add(rightFacade);
  const windowCasing15 = new THREE.Mesh(boxGeo4, trimMat);
  windowCasing15.name = 'windowCasing';
  windowCasing15.position.set(-1.9, 2.15, 0.03);
  rightFacade.add(windowCasing15);
  const windowGlass15 = new THREE.Mesh(boxGeo5, glassMat);
  windowGlass15.name = 'windowGlass';
  windowGlass15.position.set(-1.9, 2.15, 0.06);
  rightFacade.add(windowGlass15);
  const meetingRail15 = new THREE.Mesh(boxGeo6, trimMat);
  meetingRail15.name = 'meetingRail';
  meetingRail15.position.set(-1.9, 2.15, 0.08);
  rightFacade.add(meetingRail15);
  const windowSill15 = new THREE.Mesh(boxGeo7, trimMat);
  windowSill15.name = 'windowSill';
  windowSill15.position.set(-1.9, 1.255, 0.08);
  rightFacade.add(windowSill15);
  const windowHead15 = new THREE.Mesh(boxGeo8, trimMat);
  windowHead15.name = 'windowHead';
  windowHead15.position.set(-1.9, 3.095, 0.05);
  rightFacade.add(windowHead15);
  const shutter17 = new THREE.Mesh(boxGeo9, shutterMat);
  shutter17.name = 'shutter';
  shutter17.position.set(-2.7525, 2.15, 0.04);
  rightFacade.add(shutter17);
  const shutter18 = new THREE.Mesh(boxGeo9, shutterMat);
  shutter18.name = 'shutter';
  shutter18.position.set(-1.0475, 2.15, 0.04);
  rightFacade.add(shutter18);
  const windowCasing16 = new THREE.Mesh(boxGeo4, trimMat);
  windowCasing16.name = 'windowCasing';
  windowCasing16.position.set(-1.9, 5, 0.03);
  rightFacade.add(windowCasing16);
  const windowGlass16 = new THREE.Mesh(boxGeo5, glassMat);
  windowGlass16.name = 'windowGlass';
  windowGlass16.position.set(-1.9, 5, 0.06);
  rightFacade.add(windowGlass16);
  const meetingRail16 = new THREE.Mesh(boxGeo6, trimMat);
  meetingRail16.name = 'meetingRail';
  meetingRail16.position.set(-1.9, 5, 0.08);
  rightFacade.add(meetingRail16);
  const windowSill16 = new THREE.Mesh(boxGeo7, trimMat);
  windowSill16.name = 'windowSill';
  windowSill16.position.set(-1.9, 4.105, 0.08);
  rightFacade.add(windowSill16);
  const windowHead16 = new THREE.Mesh(boxGeo8, trimMat);
  windowHead16.name = 'windowHead';
  windowHead16.position.set(-1.9, 5.945, 0.05);
  rightFacade.add(windowHead16);
  const shutter19 = new THREE.Mesh(boxGeo9, shutterMat);
  shutter19.name = 'shutter';
  shutter19.position.set(-2.7525, 5, 0.04);
  rightFacade.add(shutter19);
  const shutter20 = new THREE.Mesh(boxGeo9, shutterMat);
  shutter20.name = 'shutter';
  shutter20.position.set(-1.0475, 5, 0.04);
  rightFacade.add(shutter20);
  const windowCasing17 = new THREE.Mesh(boxGeo12, trimMat);
  windowCasing17.name = 'windowCasing';
  windowCasing17.position.set(0, 7.5747, 0.03);
  rightFacade.add(windowCasing17);
  const windowGlass17 = new THREE.Mesh(boxGeo13, glassMat);
  windowGlass17.name = 'windowGlass';
  windowGlass17.position.set(0, 7.5747, 0.06);
  rightFacade.add(windowGlass17);
  const meetingRail17 = new THREE.Mesh(boxGeo14, trimMat);
  meetingRail17.name = 'meetingRail';
  meetingRail17.position.set(0, 7.5747, 0.08);
  rightFacade.add(meetingRail17);
  const windowSill17 = new THREE.Mesh(boxGeo15, trimMat);
  windowSill17.name = 'windowSill';
  windowSill17.position.set(0, 7.0547, 0.08);
  rightFacade.add(windowSill17);
  const windowHead17 = new THREE.Mesh(boxGeo16, trimMat);
  windowHead17.name = 'windowHead';
  windowHead17.position.set(0, 8.1447, 0.05);
  rightFacade.add(windowHead17);
  const roofSlab = new THREE.Mesh(boxGeo17, roofMat);
  roofSlab.name = 'roofSlab';
  roofSlab.position.set(0, 7.7794, -1.9494);
  roofSlab.rotation.set(deg(-40), 0, 0);
  root.add(roofSlab);
  const roofSlab2 = new THREE.Mesh(boxGeo17, roofMat);
  roofSlab2.name = 'roofSlab';
  roofSlab2.position.set(0, 7.7794, 1.9494);
  roofSlab2.rotation.set(deg(40), 0, 0);
  root.add(roofSlab2);
  const shingles = new THREE.Mesh(boxGeo18, roofMat);
  shingles.name = 'shingles';
  shingles.position.set(0, 9.1465, -0.4602);
  shingles.rotation.set(deg(-45), 0, 0);
  root.add(shingles);
  const shingles2 = new THREE.Mesh(boxGeo18, roofMat);
  shingles2.name = 'shingles';
  shingles2.position.set(0, 9.1465, 0.4602);
  shingles2.rotation.set(deg(45), 0, 0);
  root.add(shingles2);
  const shingles3 = new THREE.Mesh(boxGeo18, roofMat);
  shingles3.name = 'shingles';
  shingles3.position.set(0, 8.4974, -1.2337);
  shingles3.rotation.set(deg(-45), 0, 0);
  root.add(shingles3);
  const shingles4 = new THREE.Mesh(boxGeo18, roofMat);
  shingles4.name = 'shingles';
  shingles4.position.set(0, 8.4974, 1.2337);
  shingles4.rotation.set(deg(45), 0, 0);
  root.add(shingles4);
  const shingles5 = new THREE.Mesh(boxGeo18, roofMat);
  shingles5.name = 'shingles';
  shingles5.position.set(0, 7.8483, -2.0073);
  shingles5.rotation.set(deg(-45), 0, 0);
  root.add(shingles5);
  const shingles6 = new THREE.Mesh(boxGeo18, roofMat);
  shingles6.name = 'shingles';
  shingles6.position.set(0, 7.8483, 2.0073);
  shingles6.rotation.set(deg(45), 0, 0);
  root.add(shingles6);
  const shingles7 = new THREE.Mesh(boxGeo18, roofMat);
  shingles7.name = 'shingles';
  shingles7.position.set(0, 7.1993, -2.7808);
  shingles7.rotation.set(deg(-45), 0, 0);
  root.add(shingles7);
  const shingles8 = new THREE.Mesh(boxGeo18, roofMat);
  shingles8.name = 'shingles';
  shingles8.position.set(0, 7.1993, 2.7808);
  shingles8.rotation.set(deg(45), 0, 0);
  root.add(shingles8);
  const shingles9 = new THREE.Mesh(boxGeo18, roofMat);
  shingles9.name = 'shingles';
  shingles9.position.set(0, 6.5502, -3.5544);
  shingles9.rotation.set(deg(-45), 0, 0);
  root.add(shingles9);
  const shingles10 = new THREE.Mesh(boxGeo18, roofMat);
  shingles10.name = 'shingles';
  shingles10.position.set(0, 6.5502, 3.5544);
  shingles10.rotation.set(deg(45), 0, 0);
  root.add(shingles10);
  const ridge = new THREE.Mesh(new THREE.BoxGeometry(10.76, 0.2, 0.2), roofMat);
  ridge.name = 'ridge';
  ridge.position.set(0, 9.5718, 0);
  ridge.rotation.set(deg(45), 0, 0);
  root.add(ridge);
  const rakeBoard = new THREE.Mesh(boxGeo19, trimMat);
  rakeBoard.name = 'rakeBoard';
  rakeBoard.position.set(-5.31, 7.6855, -1.8965);
  rakeBoard.rotation.set(deg(-40), 0, 0);
  root.add(rakeBoard);
  const rakeBoard2 = new THREE.Mesh(boxGeo19, trimMat);
  rakeBoard2.name = 'rakeBoard';
  rakeBoard2.position.set(-5.31, 7.6855, 1.8965);
  rakeBoard2.rotation.set(deg(40), 0, 0);
  root.add(rakeBoard2);
  const rakeBoard3 = new THREE.Mesh(boxGeo19, trimMat);
  rakeBoard3.name = 'rakeBoard';
  rakeBoard3.position.set(5.31, 7.6855, -1.8965);
  rakeBoard3.rotation.set(deg(-40), 0, 0);
  root.add(rakeBoard3);
  const rakeBoard4 = new THREE.Mesh(boxGeo19, trimMat);
  rakeBoard4.name = 'rakeBoard';
  rakeBoard4.position.set(5.31, 7.6855, 1.8965);
  rakeBoard4.rotation.set(deg(40), 0, 0);
  root.add(rakeBoard4);
  const gutter = new THREE.Mesh(boxGeo20, trimMat);
  gutter.name = 'gutter';
  gutter.position.set(0, 6.0507, -3.8447);
  root.add(gutter);
  const gutter2 = new THREE.Mesh(boxGeo20, trimMat);
  gutter2.name = 'gutter';
  gutter2.position.set(0, 6.0507, 3.8447);
  root.add(gutter2);
  const chimneyBase = new THREE.Mesh(new THREE.BoxGeometry(1.3, 2, 1), brickMat);
  chimneyBase.name = 'chimneyBase';
  chimneyBase.position.set(5.5, 1, -1.2);
  root.add(chimneyBase);
  const chimney = new THREE.Mesh(new THREE.BoxGeometry(0.85, 8.2368, 0.8), brickMat);
  chimney.name = 'chimney';
  chimney.position.set(5.42, 6.1184, -1.2);
  root.add(chimney);
  const chimneyCap = new THREE.Mesh(new THREE.BoxGeometry(1.05, 0.15, 1), stoneMat);
  chimneyCap.name = 'chimneyCap';
  chimneyCap.position.set(5.42, 10.3118, -1.2);
  root.add(chimneyCap);
  const chimneyFlue = new THREE.Mesh(new THREE.BoxGeometry(0.5, 0.25, 0.45), brickMat);
  chimneyFlue.name = 'chimneyFlue';
  chimneyFlue.position.set(5.42, 10.5118, -1.2);
  root.add(chimneyFlue);
  const porchFoundation = new THREE.Mesh(new THREE.BoxGeometry(10.3, 0.55, 2.5), stoneMat);
  porchFoundation.name = 'porchFoundation';
  porchFoundation.position.set(0, 0.275, 4.75);
  root.add(porchFoundation);
  const porchDeck = new THREE.Mesh(new THREE.BoxGeometry(10.4, 0.1, 2.6), woodMat);
  porchDeck.name = 'porchDeck';
  porchDeck.position.set(0, 0.6, 4.77);
  root.add(porchDeck);
  const porchStep = new THREE.Mesh(new THREE.BoxGeometry(2, 0.18, 0.32), woodMat);
  porchStep.name = 'porchStep';
  porchStep.position.set(0, 0.09, 6.8);
  root.add(porchStep);
  const porchStep2 = new THREE.Mesh(new THREE.BoxGeometry(2, 0.38, 0.32), woodMat);
  porchStep2.name = 'porchStep';
  porchStep2.position.set(0, 0.19, 6.48);
  root.add(porchStep2);
  const porchStep3 = new THREE.Mesh(new THREE.BoxGeometry(2, 0.58, 0.32), woodMat);
  porchStep3.name = 'porchStep';
  porchStep3.position.set(0, 0.29, 6.16);
  root.add(porchStep3);
  const porchPost = new THREE.Mesh(boxGeo21, trimMat);
  porchPost.name = 'porchPost';
  porchPost.position.set(-4.9, 1.95, 5.85);
  root.add(porchPost);
  const postCap = new THREE.Mesh(boxGeo22, trimMat);
  postCap.name = 'postCap';
  postCap.position.set(-4.9, 3.16, 5.85);
  root.add(postCap);
  const porchPost2 = new THREE.Mesh(boxGeo21, trimMat);
  porchPost2.name = 'porchPost';
  porchPost2.position.set(-2.94, 1.95, 5.85);
  root.add(porchPost2);
  const postCap2 = new THREE.Mesh(boxGeo22, trimMat);
  postCap2.name = 'postCap';
  postCap2.position.set(-2.94, 3.16, 5.85);
  root.add(postCap2);
  const porchPost3 = new THREE.Mesh(boxGeo21, trimMat);
  porchPost3.name = 'porchPost';
  porchPost3.position.set(-0.98, 1.95, 5.85);
  root.add(porchPost3);
  const postCap3 = new THREE.Mesh(boxGeo22, trimMat);
  postCap3.name = 'postCap';
  postCap3.position.set(-0.98, 3.16, 5.85);
  root.add(postCap3);
  const porchPost4 = new THREE.Mesh(boxGeo21, trimMat);
  porchPost4.name = 'porchPost';
  porchPost4.position.set(0.98, 1.95, 5.85);
  root.add(porchPost4);
  const postCap4 = new THREE.Mesh(boxGeo22, trimMat);
  postCap4.name = 'postCap';
  postCap4.position.set(0.98, 3.16, 5.85);
  root.add(postCap4);
  const porchPost5 = new THREE.Mesh(boxGeo21, trimMat);
  porchPost5.name = 'porchPost';
  porchPost5.position.set(2.94, 1.95, 5.85);
  root.add(porchPost5);
  const postCap5 = new THREE.Mesh(boxGeo22, trimMat);
  postCap5.name = 'postCap';
  postCap5.position.set(2.94, 3.16, 5.85);
  root.add(postCap5);
  const porchPost6 = new THREE.Mesh(boxGeo21, trimMat);
  porchPost6.name = 'porchPost';
  porchPost6.position.set(4.9, 1.95, 5.85);
  root.add(porchPost6);
  const postCap6 = new THREE.Mesh(boxGeo22, trimMat);
  postCap6.name = 'postCap';
  postCap6.position.set(4.9, 3.16, 5.85);
  root.add(postCap6);
  const porchRail = new THREE.Mesh(boxGeo23, trimMat);
  porchRail.name = 'porchRail';
  porchRail.position.set(-3.92, 1.55, 5.85);
  root.add(porchRail);
  const porchRail2 = new THREE.Mesh(boxGeo24, trimMat);
  porchRail2.name = 'porchRail';
  porchRail2.position.set(-3.92, 0.8, 5.85);
  root.add(porchRail2);
  const baluster = new THREE.Mesh(boxGeo25, trimMat);
  baluster.name = 'baluster';
  baluster.position.set(-4.454, 1.17, 5.85);
  root.add(baluster);
  const baluster2 = new THREE.Mesh(boxGeo25, trimMat);
  baluster2.name = 'baluster';
  baluster2.position.set(-4.098, 1.17, 5.85);
  root.add(baluster2);
  const baluster3 = new THREE.Mesh(boxGeo25, trimMat);
  baluster3.name = 'baluster';
  baluster3.position.set(-3.742, 1.17, 5.85);
  root.add(baluster3);
  const baluster4 = new THREE.Mesh(boxGeo25, trimMat);
  baluster4.name = 'baluster';
  baluster4.position.set(-3.386, 1.17, 5.85);
  root.add(baluster4);
  const porchRail3 = new THREE.Mesh(boxGeo23, trimMat);
  porchRail3.name = 'porchRail';
  porchRail3.position.set(-1.96, 1.55, 5.85);
  root.add(porchRail3);
  const porchRail4 = new THREE.Mesh(boxGeo24, trimMat);
  porchRail4.name = 'porchRail';
  porchRail4.position.set(-1.96, 0.8, 5.85);
  root.add(porchRail4);
  const baluster5 = new THREE.Mesh(boxGeo25, trimMat);
  baluster5.name = 'baluster';
  baluster5.position.set(-2.494, 1.17, 5.85);
  root.add(baluster5);
  const baluster6 = new THREE.Mesh(boxGeo25, trimMat);
  baluster6.name = 'baluster';
  baluster6.position.set(-2.138, 1.17, 5.85);
  root.add(baluster6);
  const baluster7 = new THREE.Mesh(boxGeo25, trimMat);
  baluster7.name = 'baluster';
  baluster7.position.set(-1.782, 1.17, 5.85);
  root.add(baluster7);
  const baluster8 = new THREE.Mesh(boxGeo25, trimMat);
  baluster8.name = 'baluster';
  baluster8.position.set(-1.426, 1.17, 5.85);
  root.add(baluster8);
  const porchRail5 = new THREE.Mesh(boxGeo23, trimMat);
  porchRail5.name = 'porchRail';
  porchRail5.position.set(1.96, 1.55, 5.85);
  root.add(porchRail5);
  const porchRail6 = new THREE.Mesh(boxGeo24, trimMat);
  porchRail6.name = 'porchRail';
  porchRail6.position.set(1.96, 0.8, 5.85);
  root.add(porchRail6);
  const baluster9 = new THREE.Mesh(boxGeo25, trimMat);
  baluster9.name = 'baluster';
  baluster9.position.set(1.426, 1.17, 5.85);
  root.add(baluster9);
  const baluster10 = new THREE.Mesh(boxGeo25, trimMat);
  baluster10.name = 'baluster';
  baluster10.position.set(1.782, 1.17, 5.85);
  root.add(baluster10);
  const baluster11 = new THREE.Mesh(boxGeo25, trimMat);
  baluster11.name = 'baluster';
  baluster11.position.set(2.138, 1.17, 5.85);
  root.add(baluster11);
  const baluster12 = new THREE.Mesh(boxGeo25, trimMat);
  baluster12.name = 'baluster';
  baluster12.position.set(2.494, 1.17, 5.85);
  root.add(baluster12);
  const porchRail7 = new THREE.Mesh(boxGeo23, trimMat);
  porchRail7.name = 'porchRail';
  porchRail7.position.set(3.92, 1.55, 5.85);
  root.add(porchRail7);
  const porchRail8 = new THREE.Mesh(boxGeo24, trimMat);
  porchRail8.name = 'porchRail';
  porchRail8.position.set(3.92, 0.8, 5.85);
  root.add(porchRail8);
  const baluster13 = new THREE.Mesh(boxGeo25, trimMat);
  baluster13.name = 'baluster';
  baluster13.position.set(3.386, 1.17, 5.85);
  root.add(baluster13);
  const baluster14 = new THREE.Mesh(boxGeo25, trimMat);
  baluster14.name = 'baluster';
  baluster14.position.set(3.742, 1.17, 5.85);
  root.add(baluster14);
  const baluster15 = new THREE.Mesh(boxGeo25, trimMat);
  baluster15.name = 'baluster';
  baluster15.position.set(4.098, 1.17, 5.85);
  root.add(baluster15);
  const baluster16 = new THREE.Mesh(boxGeo25, trimMat);
  baluster16.name = 'baluster';
  baluster16.position.set(4.454, 1.17, 5.85);
  root.add(baluster16);
  const porchRail9 = new THREE.Mesh(boxGeo26, trimMat);
  porchRail9.name = 'porchRail';
  porchRail9.position.set(-5.1, 1.55, 4.65);
  root.add(porchRail9);
  const porchWallPost = new THREE.Mesh(boxGeo27, trimMat);
  porchWallPost.name = 'porchWallPost';
  porchWallPost.position.set(-5.1, 1.95, 3.6);
  root.add(porchWallPost);
  const porchRail10 = new THREE.Mesh(boxGeo26, trimMat);
  porchRail10.name = 'porchRail';
  porchRail10.position.set(5.1, 1.55, 4.65);
  root.add(porchRail10);
  const porchWallPost2 = new THREE.Mesh(boxGeo27, trimMat);
  porchWallPost2.name = 'porchWallPost';
  porchWallPost2.position.set(5.1, 1.95, 3.6);
  root.add(porchWallPost2);
  const porchRoof = new THREE.Mesh(new THREE.BoxGeometry(10.6, 0.12, 2.9463), roofMat);
  porchRoof.name = 'porchRoof';
  porchRoof.position.set(0, 3.65, 4.95);
  porchRoof.rotation.set(deg(10.1657), 0, 0);
  root.add(porchRoof);
  const porchBeam = new THREE.Mesh(new THREE.BoxGeometry(10.5, 0.22, 0.1), trimMat);
  porchBeam.name = 'porchBeam';
  porchBeam.position.set(0, 3.28, 5.85);
  root.add(porchBeam);
  const rockingChair = new THREE.Group();
  rockingChair.name = 'rockingChair';
  rockingChair.position.set(-3.6, 0.65, 4.7);
  rockingChair.rotation.set(0, deg(25), 0);
  root.add(rockingChair);
  const seat = new THREE.Mesh(new THREE.BoxGeometry(0.55, 0.06, 0.5), woodMat);
  seat.name = 'seat';
  seat.position.set(0, 0.45, 0);
  rockingChair.add(seat);
  const back = new THREE.Mesh(new THREE.BoxGeometry(0.55, 0.6, 0.06), woodMat);
  back.name = 'back';
  back.position.set(0, 0.78, -0.25);
  back.rotation.set(deg(-10), 0, 0);
  rockingChair.add(back);
  const leg = new THREE.Mesh(boxGeo28, woodMat);
  leg.name = 'leg';
  leg.position.set(-0.24, 0.26, 0.18);
  rockingChair.add(leg);
  const leg2 = new THREE.Mesh(boxGeo28, woodMat);
  leg2.name = 'leg';
  leg2.position.set(-0.24, 0.26, -0.18);
  rockingChair.add(leg2);
  const rocker = new THREE.Mesh(boxGeo29, woodMat);
  rocker.name = 'rocker';
  rocker.position.set(-0.24, 0.025, 0);
  rockingChair.add(rocker);
  const leg3 = new THREE.Mesh(boxGeo28, woodMat);
  leg3.name = 'leg';
  leg3.position.set(0.24, 0.26, 0.18);
  rockingChair.add(leg3);
  const leg4 = new THREE.Mesh(boxGeo28, woodMat);
  leg4.name = 'leg';
  leg4.position.set(0.24, 0.26, -0.18);
  rockingChair.add(leg4);
  const rocker2 = new THREE.Mesh(boxGeo29, woodMat);
  rocker2.name = 'rocker';
  rocker2.position.set(0.24, 0.025, 0);
  rockingChair.add(rocker2);

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

export default createFarmhouse;

Puanlar ve yorumlar

—
Henüz puan yok — ilk puanı sen ver.
5
0
4
0
3
0
2
0
1
0

Puan vermek ve yorum yapmak için giriş yap.

0 yorum

Henüz yorum yok. Bu modeli nasıl kullandığını ya da neyin daha iyi olabileceğini paylaş.

Benzer modeller

Aynı kategori ya da benzer etiketler