2,1 mil tris32,0 × 27,8 × 23,0 m
Úsalo en código
Hacer remix en el editoroffice-building.js · 595 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.
/**
* Office Building — Codels 3D model library
* License: CC0-1.0 · Units: meters · Y-up · Front: +Z · Origin: center of the base (y = 0)
* Triangles: 2,136 · Size (W × H × D): 32.00 × 27.75 × 23.00 m
*
* Usage:
* import { createOfficeBuilding } from './office-building.js';
*
* const model = createOfficeBuilding();
* model.position.set(0, 0, 0);
* scene.add(model);
*/
import * as THREE from 'three';
const deg = THREE.MathUtils.degToRad;
// Deterministic vertex displacement (organic low-poly look).
function jitter(geometry, amount, seed) {
const pos = geometry.attributes.position;
const h = (a, b, c, s) => {
let x = Math.imul(a, 73856093) ^ Math.imul(b, 19349663) ^ Math.imul(c, 83492791) ^ Math.imul(s, 2654435761);
x = Math.imul(x ^ (x >>> 16), 2246822507);
x = Math.imul(x ^ (x >>> 13), 3266489909);
return ((x ^ (x >>> 16)) >>> 0) / 4294967295 - 0.5;
};
for (let i = 0; i < pos.count; i++) {
const x = pos.getX(i), y = pos.getY(i), z = pos.getZ(i);
const qx = Math.round(x * 1000), qy = Math.round(y * 1000), qz = Math.round(z * 1000);
pos.setXYZ(i, x + h(qx, qy, qz, seed) * 2 * amount, y + h(qx, qy, qz, seed + 1) * 2 * amount, z + h(qx, qy, qz, seed + 2) * 2 * amount);
}
pos.needsUpdate = true;
geometry.computeVertexNormals();
return geometry;
}
export function createOfficeBuilding() {
const root = new THREE.Group();
root.name = 'OfficeBuilding';
// Materials
const glassMat = new THREE.MeshStandardMaterial({ name: 'glass', color: 0x76a9c6, roughness: 0.18, metalness: 0.2, flatShading: true });
const wallMat = new THREE.MeshStandardMaterial({ name: 'wall', color: 0xe7e3db, roughness: 0.85, flatShading: true });
const accentMat = new THREE.MeshStandardMaterial({ name: 'accent', color: 0xc8663e, roughness: 0.8, flatShading: true });
const darkMat = new THREE.MeshStandardMaterial({ name: 'dark', color: 0x2f343b, roughness: 0.6, metalness: 0.2, flatShading: true });
const pavingMat = new THREE.MeshStandardMaterial({ name: 'paving', color: 0xc7c2b9, roughness: 0.95, flatShading: true });
const metalMat = new THREE.MeshStandardMaterial({ name: 'metal', color: 0xa2a8ae, roughness: 0.5, metalness: 0.3, flatShading: true });
const roofMat = new THREE.MeshStandardMaterial({ name: 'roof', color: 0x6a6e74, roughness: 0.9, flatShading: true });
const leafMat = new THREE.MeshStandardMaterial({ name: 'leaf', color: 0x5f9150, roughness: 0.9, flatShading: true });
// Shared geometries
const cylinderGeo = new THREE.CylinderGeometry(0.3, 0.3, 4.2, 8);
const boxGeo = new THREE.BoxGeometry(0.08, 3.95, 0.08);
const boxGeo2 = new THREE.BoxGeometry(1.45, 2.45, 0.05);
const boxGeo3 = new THREE.BoxGeometry(0.05, 0.9, 0.06);
const cylinderGeo2 = new THREE.CylinderGeometry(0.1, 0.1, 3.3, 8);
const boxGeo4 = new THREE.BoxGeometry(0.4, 0.26, 0.04);
const boxGeo5 = new THREE.BoxGeometry(24.3, 1.05, 14.3);
const boxGeo6 = new THREE.BoxGeometry(24.36, 0.06, 14.7);
const boxGeo7 = new THREE.BoxGeometry(0.08, 13.6, 0.08);
const boxGeo8 = new THREE.BoxGeometry(2.4, 1.3, 1.7);
const cylinderGeo3 = new THREE.CylinderGeometry(0.48, 0.48, 0.08, 10);
const boxGeo9 = new THREE.BoxGeometry(0.12, 0.3, 1.5);
const boxGeo10 = new THREE.BoxGeometry(2, 0.55, 2);
const cylinderGeo4 = new THREE.CylinderGeometry(0.12, 0.16, 2.6, 6);
// Parts
const plaza = new THREE.Mesh(new THREE.BoxGeometry(32, 0.15, 23), pavingMat);
plaza.name = 'plaza';
plaza.position.set(0, 0.075, 1.5);
root.add(plaza);
const lobbyGlass = new THREE.Mesh(new THREE.BoxGeometry(22, 4.2, 12), glassMat);
lobbyGlass.name = 'lobbyGlass';
lobbyGlass.position.set(0, 2.25, 0);
root.add(lobbyGlass);
const lobbyBase = new THREE.Mesh(new THREE.BoxGeometry(22.1, 0.25, 12.1), darkMat);
lobbyBase.name = 'lobbyBase';
lobbyBase.position.set(0, 0.275, 0);
root.add(lobbyBase);
const lobbyTransom = new THREE.Mesh(new THREE.BoxGeometry(22.1, 0.12, 12.1), darkMat);
lobbyTransom.name = 'lobbyTransom';
lobbyTransom.position.set(0, 3.11, 0);
root.add(lobbyTransom);
const column = new THREE.Mesh(cylinderGeo, wallMat);
column.name = 'column';
column.position.set(-11.6, 2.25, -6.6);
root.add(column);
const column2 = new THREE.Mesh(cylinderGeo, wallMat);
column2.name = 'column';
column2.position.set(-11.6, 2.25, 6.6);
root.add(column2);
const column3 = new THREE.Mesh(cylinderGeo, wallMat);
column3.name = 'column';
column3.position.set(-7.7333, 2.25, -6.6);
root.add(column3);
const column4 = new THREE.Mesh(cylinderGeo, wallMat);
column4.name = 'column';
column4.position.set(-7.7333, 2.25, 6.6);
root.add(column4);
const column5 = new THREE.Mesh(cylinderGeo, wallMat);
column5.name = 'column';
column5.position.set(-3.8667, 2.25, -6.6);
root.add(column5);
const column6 = new THREE.Mesh(cylinderGeo, wallMat);
column6.name = 'column';
column6.position.set(-3.8667, 2.25, 6.6);
root.add(column6);
const column7 = new THREE.Mesh(cylinderGeo, wallMat);
column7.name = 'column';
column7.position.set(0, 2.25, -6.6);
root.add(column7);
const column8 = new THREE.Mesh(cylinderGeo, wallMat);
column8.name = 'column';
column8.position.set(0, 2.25, 6.6);
root.add(column8);
const column9 = new THREE.Mesh(cylinderGeo, wallMat);
column9.name = 'column';
column9.position.set(3.8667, 2.25, -6.6);
root.add(column9);
const column10 = new THREE.Mesh(cylinderGeo, wallMat);
column10.name = 'column';
column10.position.set(3.8667, 2.25, 6.6);
root.add(column10);
const column11 = new THREE.Mesh(cylinderGeo, wallMat);
column11.name = 'column';
column11.position.set(7.7333, 2.25, -6.6);
root.add(column11);
const column12 = new THREE.Mesh(cylinderGeo, wallMat);
column12.name = 'column';
column12.position.set(7.7333, 2.25, 6.6);
root.add(column12);
const column13 = new THREE.Mesh(cylinderGeo, wallMat);
column13.name = 'column';
column13.position.set(11.6, 2.25, -6.6);
root.add(column13);
const column14 = new THREE.Mesh(cylinderGeo, wallMat);
column14.name = 'column';
column14.position.set(11.6, 2.25, 6.6);
root.add(column14);
const column15 = new THREE.Mesh(cylinderGeo, wallMat);
column15.name = 'column';
column15.position.set(-11.6, 2.25, 0);
root.add(column15);
const column16 = new THREE.Mesh(cylinderGeo, wallMat);
column16.name = 'column';
column16.position.set(11.6, 2.25, 0);
root.add(column16);
const lobbyMullion = new THREE.Mesh(boxGeo, darkMat);
lobbyMullion.name = 'lobbyMullion';
lobbyMullion.position.set(-7.3333, 2.375, 6.02);
root.add(lobbyMullion);
const lobbyMullion2 = new THREE.Mesh(boxGeo, darkMat);
lobbyMullion2.name = 'lobbyMullion';
lobbyMullion2.position.set(-3.6667, 2.375, 6.02);
root.add(lobbyMullion2);
const lobbyMullion3 = new THREE.Mesh(boxGeo, darkMat);
lobbyMullion3.name = 'lobbyMullion';
lobbyMullion3.position.set(3.6667, 2.375, 6.02);
root.add(lobbyMullion3);
const lobbyMullion4 = new THREE.Mesh(boxGeo, darkMat);
lobbyMullion4.name = 'lobbyMullion';
lobbyMullion4.position.set(7.3333, 2.375, 6.02);
root.add(lobbyMullion4);
const entranceFrame = new THREE.Mesh(new THREE.BoxGeometry(3.4, 2.7, 0.12), darkMat);
entranceFrame.name = 'entranceFrame';
entranceFrame.position.set(0, 1.5, 6.06);
root.add(entranceFrame);
const entranceDoor = new THREE.Mesh(boxGeo2, glassMat);
entranceDoor.name = 'entranceDoor';
entranceDoor.position.set(-0.78, 1.425, 6.14);
root.add(entranceDoor);
const entranceDoor2 = new THREE.Mesh(boxGeo2, glassMat);
entranceDoor2.name = 'entranceDoor';
entranceDoor2.position.set(0.78, 1.425, 6.14);
root.add(entranceDoor2);
const doorHandle = new THREE.Mesh(boxGeo3, metalMat);
doorHandle.name = 'doorHandle';
doorHandle.position.set(-0.18, 1.3, 6.2);
root.add(doorHandle);
const doorHandle2 = new THREE.Mesh(boxGeo3, metalMat);
doorHandle2.name = 'doorHandle';
doorHandle2.position.set(0.18, 1.3, 6.2);
root.add(doorHandle2);
const canopy = new THREE.Mesh(new THREE.BoxGeometry(7.5, 0.4, 4.2), accentMat);
canopy.name = 'canopy';
canopy.position.set(0, 3.65, 8);
root.add(canopy);
const canopySoffit = new THREE.Mesh(new THREE.BoxGeometry(7.2, 0.05, 3.9), darkMat);
canopySoffit.name = 'canopySoffit';
canopySoffit.position.set(0, 3.435, 8);
root.add(canopySoffit);
const canopyColumn = new THREE.Mesh(cylinderGeo2, darkMat);
canopyColumn.name = 'canopyColumn';
canopyColumn.position.set(-3.2, 1.8, 9.7);
root.add(canopyColumn);
const canopyColumn2 = new THREE.Mesh(cylinderGeo2, darkMat);
canopyColumn2.name = 'canopyColumn';
canopyColumn2.position.set(3.2, 1.8, 9.7);
root.add(canopyColumn2);
const canopyLetter = new THREE.Mesh(boxGeo4, wallMat);
canopyLetter.name = 'canopyLetter';
canopyLetter.position.set(-2.1, 3.65, 10.11);
root.add(canopyLetter);
const canopyLetter2 = new THREE.Mesh(boxGeo4, wallMat);
canopyLetter2.name = 'canopyLetter';
canopyLetter2.position.set(-1.4, 3.65, 10.11);
root.add(canopyLetter2);
const canopyLetter3 = new THREE.Mesh(boxGeo4, wallMat);
canopyLetter3.name = 'canopyLetter';
canopyLetter3.position.set(-0.7, 3.65, 10.11);
root.add(canopyLetter3);
const canopyLetter4 = new THREE.Mesh(boxGeo4, wallMat);
canopyLetter4.name = 'canopyLetter';
canopyLetter4.position.set(0, 3.65, 10.11);
root.add(canopyLetter4);
const canopyLetter5 = new THREE.Mesh(boxGeo4, wallMat);
canopyLetter5.name = 'canopyLetter';
canopyLetter5.position.set(0.7, 3.65, 10.11);
root.add(canopyLetter5);
const canopyLetter6 = new THREE.Mesh(boxGeo4, wallMat);
canopyLetter6.name = 'canopyLetter';
canopyLetter6.position.set(1.4, 3.65, 10.11);
root.add(canopyLetter6);
const canopyLetter7 = new THREE.Mesh(boxGeo4, wallMat);
canopyLetter7.name = 'canopyLetter';
canopyLetter7.position.set(2.1, 3.65, 10.11);
root.add(canopyLetter7);
const entranceMat = new THREE.Mesh(new THREE.BoxGeometry(9, 0.1, 5), pavingMat);
entranceMat.name = 'entranceMat';
entranceMat.position.set(0, 0.2, 8.2);
root.add(entranceMat);
const officeGlass = new THREE.Mesh(new THREE.BoxGeometry(24, 13.6, 14), glassMat);
officeGlass.name = 'officeGlass';
officeGlass.position.set(0, 11.15, 0);
root.add(officeGlass);
const spandrel = new THREE.Mesh(boxGeo5, wallMat);
spandrel.name = 'spandrel';
spandrel.position.set(0, 4.875, 0);
root.add(spandrel);
const louver = new THREE.Mesh(boxGeo6, metalMat);
louver.name = 'louver';
louver.position.set(0, 7.46, 0);
root.add(louver);
const spandrel2 = new THREE.Mesh(boxGeo5, wallMat);
spandrel2.name = 'spandrel';
spandrel2.position.set(0, 8.275, 0);
root.add(spandrel2);
const louver2 = new THREE.Mesh(boxGeo6, metalMat);
louver2.name = 'louver';
louver2.position.set(0, 10.86, 0);
root.add(louver2);
const spandrel3 = new THREE.Mesh(boxGeo5, wallMat);
spandrel3.name = 'spandrel';
spandrel3.position.set(0, 11.675, 0);
root.add(spandrel3);
const louver3 = new THREE.Mesh(boxGeo6, metalMat);
louver3.name = 'louver';
louver3.position.set(0, 14.26, 0);
root.add(louver3);
const spandrel4 = new THREE.Mesh(boxGeo5, wallMat);
spandrel4.name = 'spandrel';
spandrel4.position.set(0, 15.075, 0);
root.add(spandrel4);
const louver4 = new THREE.Mesh(boxGeo6, metalMat);
louver4.name = 'louver';
louver4.position.set(0, 17.66, 0);
root.add(louver4);
const parapet = new THREE.Mesh(new THREE.BoxGeometry(24.3, 1.2, 14.3), wallMat);
parapet.name = 'parapet';
parapet.position.set(0, 18.55, 0);
root.add(parapet);
const roofDeck = new THREE.Mesh(new THREE.BoxGeometry(23.7, 0.05, 13.7), roofMat);
roofDeck.name = 'roofDeck';
roofDeck.position.set(0, 19.175, 0);
root.add(roofDeck);
const mullion = new THREE.Mesh(boxGeo7, darkMat);
mullion.name = 'mullion';
mullion.position.set(-10.4, 11.15, -7.03);
root.add(mullion);
const mullion2 = new THREE.Mesh(boxGeo7, darkMat);
mullion2.name = 'mullion';
mullion2.position.set(-10.4, 11.15, 7.03);
root.add(mullion2);
const mullion3 = new THREE.Mesh(boxGeo7, darkMat);
mullion3.name = 'mullion';
mullion3.position.set(-8.8, 11.15, -7.03);
root.add(mullion3);
const mullion4 = new THREE.Mesh(boxGeo7, darkMat);
mullion4.name = 'mullion';
mullion4.position.set(-8.8, 11.15, 7.03);
root.add(mullion4);
const mullion5 = new THREE.Mesh(boxGeo7, darkMat);
mullion5.name = 'mullion';
mullion5.position.set(-7.2, 11.15, -7.03);
root.add(mullion5);
const mullion6 = new THREE.Mesh(boxGeo7, darkMat);
mullion6.name = 'mullion';
mullion6.position.set(-7.2, 11.15, 7.03);
root.add(mullion6);
const mullion7 = new THREE.Mesh(boxGeo7, darkMat);
mullion7.name = 'mullion';
mullion7.position.set(-5.6, 11.15, -7.03);
root.add(mullion7);
const mullion8 = new THREE.Mesh(boxGeo7, darkMat);
mullion8.name = 'mullion';
mullion8.position.set(-5.6, 11.15, 7.03);
root.add(mullion8);
const mullion9 = new THREE.Mesh(boxGeo7, darkMat);
mullion9.name = 'mullion';
mullion9.position.set(-4, 11.15, -7.03);
root.add(mullion9);
const mullion10 = new THREE.Mesh(boxGeo7, darkMat);
mullion10.name = 'mullion';
mullion10.position.set(-4, 11.15, 7.03);
root.add(mullion10);
const mullion11 = new THREE.Mesh(boxGeo7, darkMat);
mullion11.name = 'mullion';
mullion11.position.set(-2.4, 11.15, -7.03);
root.add(mullion11);
const mullion12 = new THREE.Mesh(boxGeo7, darkMat);
mullion12.name = 'mullion';
mullion12.position.set(-2.4, 11.15, 7.03);
root.add(mullion12);
const mullion13 = new THREE.Mesh(boxGeo7, darkMat);
mullion13.name = 'mullion';
mullion13.position.set(-0.8, 11.15, -7.03);
root.add(mullion13);
const mullion14 = new THREE.Mesh(boxGeo7, darkMat);
mullion14.name = 'mullion';
mullion14.position.set(-0.8, 11.15, 7.03);
root.add(mullion14);
const mullion15 = new THREE.Mesh(boxGeo7, darkMat);
mullion15.name = 'mullion';
mullion15.position.set(0.8, 11.15, -7.03);
root.add(mullion15);
const mullion16 = new THREE.Mesh(boxGeo7, darkMat);
mullion16.name = 'mullion';
mullion16.position.set(0.8, 11.15, 7.03);
root.add(mullion16);
const mullion17 = new THREE.Mesh(boxGeo7, darkMat);
mullion17.name = 'mullion';
mullion17.position.set(2.4, 11.15, -7.03);
root.add(mullion17);
const mullion18 = new THREE.Mesh(boxGeo7, darkMat);
mullion18.name = 'mullion';
mullion18.position.set(2.4, 11.15, 7.03);
root.add(mullion18);
const mullion19 = new THREE.Mesh(boxGeo7, darkMat);
mullion19.name = 'mullion';
mullion19.position.set(4, 11.15, -7.03);
root.add(mullion19);
const mullion20 = new THREE.Mesh(boxGeo7, darkMat);
mullion20.name = 'mullion';
mullion20.position.set(4, 11.15, 7.03);
root.add(mullion20);
const mullion21 = new THREE.Mesh(boxGeo7, darkMat);
mullion21.name = 'mullion';
mullion21.position.set(5.6, 11.15, -7.03);
root.add(mullion21);
const mullion22 = new THREE.Mesh(boxGeo7, darkMat);
mullion22.name = 'mullion';
mullion22.position.set(5.6, 11.15, 7.03);
root.add(mullion22);
const mullion23 = new THREE.Mesh(boxGeo7, darkMat);
mullion23.name = 'mullion';
mullion23.position.set(7.2, 11.15, -7.03);
root.add(mullion23);
const mullion24 = new THREE.Mesh(boxGeo7, darkMat);
mullion24.name = 'mullion';
mullion24.position.set(7.2, 11.15, 7.03);
root.add(mullion24);
const mullion25 = new THREE.Mesh(boxGeo7, darkMat);
mullion25.name = 'mullion';
mullion25.position.set(8.8, 11.15, -7.03);
root.add(mullion25);
const mullion26 = new THREE.Mesh(boxGeo7, darkMat);
mullion26.name = 'mullion';
mullion26.position.set(8.8, 11.15, 7.03);
root.add(mullion26);
const mullion27 = new THREE.Mesh(boxGeo7, darkMat);
mullion27.name = 'mullion';
mullion27.position.set(10.4, 11.15, -7.03);
root.add(mullion27);
const mullion28 = new THREE.Mesh(boxGeo7, darkMat);
mullion28.name = 'mullion';
mullion28.position.set(10.4, 11.15, 7.03);
root.add(mullion28);
const mullion29 = new THREE.Mesh(boxGeo7, darkMat);
mullion29.name = 'mullion';
mullion29.position.set(-12.03, 11.15, -5.4444);
root.add(mullion29);
const mullion30 = new THREE.Mesh(boxGeo7, darkMat);
mullion30.name = 'mullion';
mullion30.position.set(12.03, 11.15, -5.4444);
root.add(mullion30);
const mullion31 = new THREE.Mesh(boxGeo7, darkMat);
mullion31.name = 'mullion';
mullion31.position.set(-12.03, 11.15, -3.8889);
root.add(mullion31);
const mullion32 = new THREE.Mesh(boxGeo7, darkMat);
mullion32.name = 'mullion';
mullion32.position.set(12.03, 11.15, -3.8889);
root.add(mullion32);
const mullion33 = new THREE.Mesh(boxGeo7, darkMat);
mullion33.name = 'mullion';
mullion33.position.set(-12.03, 11.15, -2.3333);
root.add(mullion33);
const mullion34 = new THREE.Mesh(boxGeo7, darkMat);
mullion34.name = 'mullion';
mullion34.position.set(12.03, 11.15, -2.3333);
root.add(mullion34);
const mullion35 = new THREE.Mesh(boxGeo7, darkMat);
mullion35.name = 'mullion';
mullion35.position.set(-12.03, 11.15, -0.7778);
root.add(mullion35);
const mullion36 = new THREE.Mesh(boxGeo7, darkMat);
mullion36.name = 'mullion';
mullion36.position.set(12.03, 11.15, -0.7778);
root.add(mullion36);
const mullion37 = new THREE.Mesh(boxGeo7, darkMat);
mullion37.name = 'mullion';
mullion37.position.set(-12.03, 11.15, 0.7778);
root.add(mullion37);
const mullion38 = new THREE.Mesh(boxGeo7, darkMat);
mullion38.name = 'mullion';
mullion38.position.set(12.03, 11.15, 0.7778);
root.add(mullion38);
const mullion39 = new THREE.Mesh(boxGeo7, darkMat);
mullion39.name = 'mullion';
mullion39.position.set(-12.03, 11.15, 2.3333);
root.add(mullion39);
const mullion40 = new THREE.Mesh(boxGeo7, darkMat);
mullion40.name = 'mullion';
mullion40.position.set(12.03, 11.15, 2.3333);
root.add(mullion40);
const mullion41 = new THREE.Mesh(boxGeo7, darkMat);
mullion41.name = 'mullion';
mullion41.position.set(-12.03, 11.15, 3.8889);
root.add(mullion41);
const mullion42 = new THREE.Mesh(boxGeo7, darkMat);
mullion42.name = 'mullion';
mullion42.position.set(12.03, 11.15, 3.8889);
root.add(mullion42);
const mullion43 = new THREE.Mesh(boxGeo7, darkMat);
mullion43.name = 'mullion';
mullion43.position.set(-12.03, 11.15, 5.4444);
root.add(mullion43);
const mullion44 = new THREE.Mesh(boxGeo7, darkMat);
mullion44.name = 'mullion';
mullion44.position.set(12.03, 11.15, 5.4444);
root.add(mullion44);
const stairCore = new THREE.Mesh(new THREE.BoxGeometry(3.2, 21.2, 5.2), accentMat);
stairCore.name = 'stairCore';
stairCore.position.set(-13.6, 10.75, -3.4);
root.add(stairCore);
const stairWindow = new THREE.Mesh(new THREE.BoxGeometry(0.9, 18.7, 0.06), glassMat);
stairWindow.name = 'stairWindow';
stairWindow.position.set(-13.6, 10.5, -0.77);
root.add(stairWindow);
const coreCap = new THREE.Mesh(new THREE.BoxGeometry(3.5, 0.25, 5.5), wallMat);
coreCap.name = 'coreCap';
coreCap.position.set(-13.6, 21.475, -3.4);
root.add(coreCap);
const coreDoor = new THREE.Mesh(new THREE.BoxGeometry(1.1, 2.2, 0.06), darkMat);
coreDoor.name = 'coreDoor';
coreDoor.position.set(-14.2, 1.25, -0.77);
root.add(coreDoor);
const acUnit = new THREE.Group();
acUnit.name = 'acUnit';
acUnit.position.set(-8.8583, 19.15, -3.8);
root.add(acUnit);
const acBody = new THREE.Mesh(boxGeo8, metalMat);
acBody.name = 'acBody';
acBody.position.set(0, 0.65, 0);
acUnit.add(acBody);
const acFan = new THREE.Mesh(cylinderGeo3, darkMat);
acFan.name = 'acFan';
acFan.position.set(-0.55, 1.34, 0);
acUnit.add(acFan);
const acFan2 = new THREE.Mesh(cylinderGeo3, darkMat);
acFan2.name = 'acFan';
acFan2.position.set(0.55, 1.34, 0);
acUnit.add(acFan2);
const acRail = new THREE.Mesh(boxGeo9, darkMat);
acRail.name = 'acRail';
acRail.position.set(0, 1.45, 0);
acUnit.add(acRail);
const acUnit2 = new THREE.Group();
acUnit2.name = 'acUnit';
acUnit2.position.set(-0.2459, 19.15, -3.2);
root.add(acUnit2);
const acBody2 = new THREE.Mesh(boxGeo8, metalMat);
acBody2.name = 'acBody';
acBody2.position.set(0, 0.65, 0);
acUnit2.add(acBody2);
const acFan3 = new THREE.Mesh(cylinderGeo3, darkMat);
acFan3.name = 'acFan';
acFan3.position.set(-0.55, 1.34, 0);
acUnit2.add(acFan3);
const acFan4 = new THREE.Mesh(cylinderGeo3, darkMat);
acFan4.name = 'acFan';
acFan4.position.set(0.55, 1.34, 0);
acUnit2.add(acFan4);
const acRail2 = new THREE.Mesh(boxGeo9, darkMat);
acRail2.name = 'acRail';
acRail2.position.set(0, 1.45, 0);
acUnit2.add(acRail2);
const acUnit3 = new THREE.Group();
acUnit3.name = 'acUnit';
acUnit3.position.set(9.0251, 19.15, -3.8);
root.add(acUnit3);
const acBody3 = new THREE.Mesh(boxGeo8, metalMat);
acBody3.name = 'acBody';
acBody3.position.set(0, 0.65, 0);
acUnit3.add(acBody3);
const acFan5 = new THREE.Mesh(cylinderGeo3, darkMat);
acFan5.name = 'acFan';
acFan5.position.set(-0.55, 1.34, 0);
acUnit3.add(acFan5);
const acFan6 = new THREE.Mesh(cylinderGeo3, darkMat);
acFan6.name = 'acFan';
acFan6.position.set(0.55, 1.34, 0);
acUnit3.add(acFan6);
const acRail3 = new THREE.Mesh(boxGeo9, darkMat);
acRail3.name = 'acRail';
acRail3.position.set(0, 1.45, 0);
acUnit3.add(acRail3);
const duct = new THREE.Mesh(new THREE.BoxGeometry(14.4, 0.55, 0.55), metalMat);
duct.name = 'duct';
duct.position.set(-1.2, 19.425, -2);
root.add(duct);
const duct2 = new THREE.Mesh(new THREE.BoxGeometry(0.55, 0.55, 4), metalMat);
duct2.name = 'duct';
duct2.position.set(6, 19.425, -0.2);
root.add(duct2);
const roofAccess = new THREE.Mesh(new THREE.BoxGeometry(3, 2.6, 2.6), wallMat);
roofAccess.name = 'roofAccess';
roofAccess.position.set(8.8, 20.45, 4);
root.add(roofAccess);
const roofAccessDoor = new THREE.Mesh(new THREE.BoxGeometry(0.9, 2, 0.05), darkMat);
roofAccessDoor.name = 'roofAccessDoor';
roofAccessDoor.position.set(8.8, 20.15, 5.32);
root.add(roofAccessDoor);
const antenna = new THREE.Mesh(new THREE.CylinderGeometry(0.05, 0.08, 6, 6), metalMat);
antenna.name = 'antenna';
antenna.position.set(9.6, 24.75, 3.6);
root.add(antenna);
const dish = new THREE.Mesh(new THREE.CylinderGeometry(0.6, 0.15, 0.25, 10), metalMat);
dish.name = 'dish';
dish.position.set(7.9, 22.1, 4);
dish.rotation.set(deg(-35), deg(20), 0);
root.add(dish);
const planter = new THREE.Mesh(boxGeo10, wallMat);
planter.name = 'planter';
planter.position.set(-10.5, 0.425, 10.4);
root.add(planter);
const trunk = new THREE.Mesh(cylinderGeo4, darkMat);
trunk.name = 'trunk';
trunk.position.set(-10.5, 1.95, 10.4);
root.add(trunk);
const treeCrown = new THREE.Mesh(jitter(new THREE.IcosahedronGeometry(1.25, 0), 0.12, 8), leafMat);
treeCrown.name = 'treeCrown';
treeCrown.position.set(-10.5, 3.75, 10.4);
root.add(treeCrown);
const treeCrown2 = new THREE.Mesh(jitter(new THREE.IcosahedronGeometry(0.85, 0), 0.1, 11), leafMat);
treeCrown2.name = 'treeCrown';
treeCrown2.position.set(-11, 4.55, 10.1);
root.add(treeCrown2);
const planter2 = new THREE.Mesh(boxGeo10, wallMat);
planter2.name = 'planter';
planter2.position.set(10.5, 0.425, 10.4);
root.add(planter2);
const trunk2 = new THREE.Mesh(cylinderGeo4, darkMat);
trunk2.name = 'trunk';
trunk2.position.set(10.5, 1.95, 10.4);
root.add(trunk2);
const treeCrown3 = new THREE.Mesh(jitter(new THREE.IcosahedronGeometry(1.25, 0), 0.12, 10), leafMat);
treeCrown3.name = 'treeCrown';
treeCrown3.position.set(10.5, 3.75, 10.4);
root.add(treeCrown3);
const treeCrown4 = new THREE.Mesh(jitter(new THREE.IcosahedronGeometry(0.85, 0), 0.1, 13), leafMat);
treeCrown4.name = 'treeCrown';
treeCrown4.position.set(11, 4.55, 10.1);
root.add(treeCrown4);
root.traverse((o) => {
if (o.isMesh) {
o.castShadow = true;
o.receiveShadow = true;
}
});
return root;
}
export default createOfficeBuilding;
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









