2,6 k tris9,20 × 20,9 × 9,20 m
Utiliser dans le code
Remixer dans l’éditeurwater-tower.js · 600 lignes
Module ES autonome — ne dépend que de three. Appelez la fonction factory et ajoutez le groupe à votre scène.
/**
* Water Tower — Codels 3D model library
* License: CC0-1.0 · Units: meters · Y-up · Front: +Z · Origin: center of the base (y = 0)
* Triangles: 2,588 · Size (W × H × D): 9.20 × 20.94 × 9.20 m
*
* Usage:
* import { createWaterTower } from './water-tower.js';
*
* const model = createWaterTower();
* 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);
}
export function createWaterTower() {
const root = new THREE.Group();
root.name = 'WaterTower';
// Materials
const tankMat = new THREE.MeshStandardMaterial({ name: 'tank', color: 0x8fb3c9, roughness: 0.55, metalness: 0.25, flatShading: true });
const stripeMat = new THREE.MeshStandardMaterial({ name: 'stripe', color: 0xf1efe8, roughness: 0.6, flatShading: true });
const steelMat = new THREE.MeshStandardMaterial({ name: 'steel', color: 0x7d858d, roughness: 0.5, metalness: 0.35, flatShading: true });
const darkMat = new THREE.MeshStandardMaterial({ name: 'dark', color: 0x2e3135, roughness: 0.7, metalness: 0.2, flatShading: true });
const concreteMat = new THREE.MeshStandardMaterial({ name: 'concrete', color: 0xb8b3aa, roughness: 0.95, flatShading: true });
// Shared geometries
const boxGeo = new THREE.BoxGeometry(1.1, 0.45, 1.1);
const cylinderGeo = new THREE.CylinderGeometry(0.17, 0.2, 14.6036, 8);
const cylinderGeo2 = new THREE.CylinderGeometry(0.09, 0.09, 6.0093, 6, 1, true);
const cylinderGeo3 = new THREE.CylinderGeometry(0.035, 0.035, 7.3579, 4, 1, true);
const cylinderGeo4 = new THREE.CylinderGeometry(0.09, 0.09, 5.5375, 6, 1, true);
const cylinderGeo5 = new THREE.CylinderGeometry(0.035, 0.035, 6.9619, 4, 1, true);
const cylinderGeo6 = new THREE.CylinderGeometry(0.09, 0.09, 5.0657, 6, 1, true);
const cylinderGeo7 = new THREE.CylinderGeometry(0.035, 0.035, 6.5759, 4, 1, true);
const cylinderGeo8 = new THREE.CylinderGeometry(0.035, 0.035, 1.05, 4);
const torusGeo = new THREE.TorusGeometry(4.55, 0.035, 3, 24);
const boxGeo2 = new THREE.BoxGeometry(0.06, 15.1, 0.06);
const boxGeo3 = new THREE.BoxGeometry(0.44, 0.04, 0.04);
const boxGeo4 = new THREE.BoxGeometry(0.06, 4.45, 0.06);
const torusGeo2 = new THREE.TorusGeometry(0.42, 0.025, 3, 8, Math.PI);
// Parts
const footing = new THREE.Mesh(boxGeo, concreteMat);
footing.name = 'footing';
footing.position.set(3.28, 0.225, 3.28);
footing.rotation.set(0, deg(45), 0);
root.add(footing);
const leg = new THREE.Mesh(cylinderGeo, steelMat);
leg.name = 'leg';
leg.position.set(2.8107, 7.725, 2.8107);
leg.rotation.set(deg(-3.47), deg(-0.1051), deg(3.47));
root.add(leg);
const footing2 = new THREE.Mesh(boxGeo, concreteMat);
footing2.name = 'footing';
footing2.position.set(3.28, 0.225, -3.28);
footing2.rotation.set(0, deg(135), 0);
root.add(footing2);
const leg2 = new THREE.Mesh(cylinderGeo, steelMat);
leg2.name = 'leg';
leg2.position.set(2.8107, 7.725, -2.8107);
leg2.rotation.set(deg(3.47), deg(0.1051), deg(3.47));
root.add(leg2);
const footing3 = new THREE.Mesh(boxGeo, concreteMat);
footing3.name = 'footing';
footing3.position.set(-3.28, 0.225, -3.28);
footing3.rotation.set(0, deg(225), 0);
root.add(footing3);
const leg3 = new THREE.Mesh(cylinderGeo, steelMat);
leg3.name = 'leg';
leg3.position.set(-2.8107, 7.725, -2.8107);
leg3.rotation.set(deg(3.47), deg(-0.1051), deg(-3.47));
root.add(leg3);
const footing4 = new THREE.Mesh(boxGeo, concreteMat);
footing4.name = 'footing';
footing4.position.set(-3.28, 0.225, 3.28);
footing4.rotation.set(0, deg(315), 0);
root.add(footing4);
const leg4 = new THREE.Mesh(cylinderGeo, steelMat);
leg4.name = 'leg';
leg4.position.set(-2.8107, 7.725, 2.8107);
leg4.rotation.set(deg(-3.47), deg(0.1051), deg(-3.47));
root.add(leg4);
const strut = new THREE.Mesh(cylinderGeo2, steelMat);
strut.name = 'strut';
strut.position.set(3.0046, 4.5333, 0);
strut.rotation.set(deg(-90), 0, 0);
root.add(strut);
const tieRod = new THREE.Mesh(cylinderGeo3, darkMat);
tieRod.name = 'tieRod';
tieRod.position.set(3.1226, 2.5917, 0.118);
tieRod.rotation.set(deg(-58.0934), deg(-1.0206), deg(1.8376));
root.add(tieRod);
const tieRod2 = new THREE.Mesh(cylinderGeo3, darkMat);
tieRod2.name = 'tieRod';
tieRod2.position.set(3.1226, 2.5917, -0.118);
tieRod2.rotation.set(deg(58.0934), deg(1.0206), deg(1.8376));
root.add(tieRod2);
const strut2 = new THREE.Mesh(cylinderGeo2, steelMat);
strut2.name = 'strut';
strut2.position.set(0, 4.5333, -3.0046);
strut2.rotation.set(0, 0, deg(90));
root.add(strut2);
const tieRod3 = new THREE.Mesh(cylinderGeo3, darkMat);
tieRod3.name = 'tieRod';
tieRod3.position.set(0.118, 2.5917, -3.1226);
tieRod3.rotation.set(deg(1.8376), deg(1.0206), deg(58.0934));
root.add(tieRod3);
const tieRod4 = new THREE.Mesh(cylinderGeo3, darkMat);
tieRod4.name = 'tieRod';
tieRod4.position.set(-0.118, 2.5917, -3.1226);
tieRod4.rotation.set(deg(1.8376), deg(-1.0206), deg(-58.0934));
root.add(tieRod4);
const strut3 = new THREE.Mesh(cylinderGeo2, steelMat);
strut3.name = 'strut';
strut3.position.set(-3.0046, 4.5333, 0);
strut3.rotation.set(deg(90), 0, 0);
root.add(strut3);
const tieRod5 = new THREE.Mesh(cylinderGeo3, darkMat);
tieRod5.name = 'tieRod';
tieRod5.position.set(-3.1226, 2.5917, -0.118);
tieRod5.rotation.set(deg(58.0934), deg(-1.0206), deg(-1.8376));
root.add(tieRod5);
const tieRod6 = new THREE.Mesh(cylinderGeo3, darkMat);
tieRod6.name = 'tieRod';
tieRod6.position.set(-3.1226, 2.5917, 0.118);
tieRod6.rotation.set(deg(-58.0934), deg(1.0206), deg(-1.8376));
root.add(tieRod6);
const strut4 = new THREE.Mesh(cylinderGeo2, steelMat);
strut4.name = 'strut';
strut4.position.set(0, 4.5333, 3.0046);
strut4.rotation.set(0, 0, deg(-90));
root.add(strut4);
const tieRod7 = new THREE.Mesh(cylinderGeo3, darkMat);
tieRod7.name = 'tieRod';
tieRod7.position.set(-0.118, 2.5917, 3.1226);
tieRod7.rotation.set(deg(-1.8376), deg(1.0206), deg(-58.0934));
root.add(tieRod7);
const tieRod8 = new THREE.Mesh(cylinderGeo3, darkMat);
tieRod8.name = 'tieRod';
tieRod8.position.set(0.118, 2.5917, 3.1226);
tieRod8.rotation.set(deg(-1.8376), deg(-1.0206), deg(58.0934));
root.add(tieRod8);
const strut5 = new THREE.Mesh(cylinderGeo4, steelMat);
strut5.name = 'strut';
strut5.position.set(2.7687, 8.4167, 0);
strut5.rotation.set(deg(-90), 0, 0);
root.add(strut5);
const tieRod9 = new THREE.Mesh(cylinderGeo5, darkMat);
tieRod9.name = 'tieRod';
tieRod9.position.set(2.8867, 6.475, 0.118);
tieRod9.rotation.set(deg(-56.039), deg(-1.0336), deg(1.9422));
root.add(tieRod9);
const tieRod10 = new THREE.Mesh(cylinderGeo5, darkMat);
tieRod10.name = 'tieRod';
tieRod10.position.set(2.8867, 6.475, -0.118);
tieRod10.rotation.set(deg(56.039), deg(1.0336), deg(1.9422));
root.add(tieRod10);
const strut6 = new THREE.Mesh(cylinderGeo4, steelMat);
strut6.name = 'strut';
strut6.position.set(0, 8.4167, -2.7687);
strut6.rotation.set(0, 0, deg(90));
root.add(strut6);
const tieRod11 = new THREE.Mesh(cylinderGeo5, darkMat);
tieRod11.name = 'tieRod';
tieRod11.position.set(0.118, 6.475, -2.8867);
tieRod11.rotation.set(deg(1.9422), deg(1.0336), deg(56.039));
root.add(tieRod11);
const tieRod12 = new THREE.Mesh(cylinderGeo5, darkMat);
tieRod12.name = 'tieRod';
tieRod12.position.set(-0.118, 6.475, -2.8867);
tieRod12.rotation.set(deg(1.9422), deg(-1.0336), deg(-56.039));
root.add(tieRod12);
const strut7 = new THREE.Mesh(cylinderGeo4, steelMat);
strut7.name = 'strut';
strut7.position.set(-2.7687, 8.4167, 0);
strut7.rotation.set(deg(90), 0, 0);
root.add(strut7);
const tieRod13 = new THREE.Mesh(cylinderGeo5, darkMat);
tieRod13.name = 'tieRod';
tieRod13.position.set(-2.8867, 6.475, -0.118);
tieRod13.rotation.set(deg(56.039), deg(-1.0336), deg(-1.9422));
root.add(tieRod13);
const tieRod14 = new THREE.Mesh(cylinderGeo5, darkMat);
tieRod14.name = 'tieRod';
tieRod14.position.set(-2.8867, 6.475, 0.118);
tieRod14.rotation.set(deg(-56.039), deg(1.0336), deg(-1.9422));
root.add(tieRod14);
const strut8 = new THREE.Mesh(cylinderGeo4, steelMat);
strut8.name = 'strut';
strut8.position.set(0, 8.4167, 2.7687);
strut8.rotation.set(0, 0, deg(-90));
root.add(strut8);
const tieRod15 = new THREE.Mesh(cylinderGeo5, darkMat);
tieRod15.name = 'tieRod';
tieRod15.position.set(-0.118, 6.475, 2.8867);
tieRod15.rotation.set(deg(-1.9422), deg(1.0336), deg(-56.039));
root.add(tieRod15);
const tieRod16 = new THREE.Mesh(cylinderGeo5, darkMat);
tieRod16.name = 'tieRod';
tieRod16.position.set(0.118, 6.475, 2.8867);
tieRod16.rotation.set(deg(-1.9422), deg(-1.0336), deg(56.039));
root.add(tieRod16);
const strut9 = new THREE.Mesh(cylinderGeo6, steelMat);
strut9.name = 'strut';
strut9.position.set(2.5328, 12.3, 0);
strut9.rotation.set(deg(-90), 0, 0);
root.add(strut9);
const tieRod17 = new THREE.Mesh(cylinderGeo7, darkMat);
tieRod17.name = 'tieRod';
tieRod17.position.set(2.6508, 10.3583, 0.118);
tieRod17.rotation.set(deg(-53.7402), deg(-1.0419), deg(2.0562));
root.add(tieRod17);
const tieRod18 = new THREE.Mesh(cylinderGeo7, darkMat);
tieRod18.name = 'tieRod';
tieRod18.position.set(2.6508, 10.3583, -0.118);
tieRod18.rotation.set(deg(53.7402), deg(1.0419), deg(2.0562));
root.add(tieRod18);
const strut10 = new THREE.Mesh(cylinderGeo6, steelMat);
strut10.name = 'strut';
strut10.position.set(0, 12.3, -2.5328);
strut10.rotation.set(0, 0, deg(90));
root.add(strut10);
const tieRod19 = new THREE.Mesh(cylinderGeo7, darkMat);
tieRod19.name = 'tieRod';
tieRod19.position.set(0.118, 10.3583, -2.6508);
tieRod19.rotation.set(deg(2.0562), deg(1.0419), deg(53.7402));
root.add(tieRod19);
const tieRod20 = new THREE.Mesh(cylinderGeo7, darkMat);
tieRod20.name = 'tieRod';
tieRod20.position.set(-0.118, 10.3583, -2.6508);
tieRod20.rotation.set(deg(2.0562), deg(-1.0419), deg(-53.7402));
root.add(tieRod20);
const strut11 = new THREE.Mesh(cylinderGeo6, steelMat);
strut11.name = 'strut';
strut11.position.set(-2.5328, 12.3, 0);
strut11.rotation.set(deg(90), 0, 0);
root.add(strut11);
const tieRod21 = new THREE.Mesh(cylinderGeo7, darkMat);
tieRod21.name = 'tieRod';
tieRod21.position.set(-2.6508, 10.3583, -0.118);
tieRod21.rotation.set(deg(53.7402), deg(-1.0419), deg(-2.0562));
root.add(tieRod21);
const tieRod22 = new THREE.Mesh(cylinderGeo7, darkMat);
tieRod22.name = 'tieRod';
tieRod22.position.set(-2.6508, 10.3583, 0.118);
tieRod22.rotation.set(deg(-53.7402), deg(1.0419), deg(-2.0562));
root.add(tieRod22);
const strut12 = new THREE.Mesh(cylinderGeo6, steelMat);
strut12.name = 'strut';
strut12.position.set(0, 12.3, 2.5328);
strut12.rotation.set(0, 0, deg(-90));
root.add(strut12);
const tieRod23 = new THREE.Mesh(cylinderGeo7, darkMat);
tieRod23.name = 'tieRod';
tieRod23.position.set(-0.118, 10.3583, 2.6508);
tieRod23.rotation.set(deg(-2.0562), deg(1.0419), deg(-53.7402));
root.add(tieRod23);
const tieRod24 = new THREE.Mesh(cylinderGeo7, darkMat);
tieRod24.name = 'tieRod';
tieRod24.position.set(0.118, 10.3583, 2.6508);
tieRod24.rotation.set(deg(-2.0562), deg(-1.0419), deg(53.7402));
root.add(tieRod24);
const riser = new THREE.Mesh(new THREE.CylinderGeometry(0.45, 0.45, 12.1, 10), tankMat);
riser.name = 'riser';
riser.position.set(0, 6.05, 0);
root.add(riser);
const riserBase = new THREE.Mesh(new THREE.CylinderGeometry(0.65, 0.65, 0.5, 10), concreteMat);
riserBase.name = 'riserBase';
riserBase.position.set(0, 0.25, 0);
root.add(riserBase);
const catwalk = new THREE.Mesh(lathe([[3.4, 0], [4.6, 0], [4.6, 0.12], [3.4, 0.12], [3.4, 0]], 24), steelMat);
catwalk.name = 'catwalk';
catwalk.position.set(0, 14, 0);
root.add(catwalk);
const railPost = new THREE.Mesh(cylinderGeo8, darkMat);
railPost.name = 'railPost';
railPost.position.set(0.8877, 14.645, 4.4626);
root.add(railPost);
const railPost2 = new THREE.Mesh(cylinderGeo8, darkMat);
railPost2.name = 'railPost';
railPost2.position.set(2.5278, 14.645, 3.7832);
root.add(railPost2);
const railPost3 = new THREE.Mesh(cylinderGeo8, darkMat);
railPost3.name = 'railPost';
railPost3.position.set(3.7832, 14.645, 2.5278);
root.add(railPost3);
const railPost4 = new THREE.Mesh(cylinderGeo8, darkMat);
railPost4.name = 'railPost';
railPost4.position.set(4.4626, 14.645, 0.8877);
root.add(railPost4);
const railPost5 = new THREE.Mesh(cylinderGeo8, darkMat);
railPost5.name = 'railPost';
railPost5.position.set(4.4626, 14.645, -0.8877);
root.add(railPost5);
const railPost6 = new THREE.Mesh(cylinderGeo8, darkMat);
railPost6.name = 'railPost';
railPost6.position.set(3.7832, 14.645, -2.5278);
root.add(railPost6);
const railPost7 = new THREE.Mesh(cylinderGeo8, darkMat);
railPost7.name = 'railPost';
railPost7.position.set(2.5278, 14.645, -3.7832);
root.add(railPost7);
const railPost8 = new THREE.Mesh(cylinderGeo8, darkMat);
railPost8.name = 'railPost';
railPost8.position.set(0.8877, 14.645, -4.4626);
root.add(railPost8);
const railPost9 = new THREE.Mesh(cylinderGeo8, darkMat);
railPost9.name = 'railPost';
railPost9.position.set(-0.8877, 14.645, -4.4626);
root.add(railPost9);
const railPost10 = new THREE.Mesh(cylinderGeo8, darkMat);
railPost10.name = 'railPost';
railPost10.position.set(-2.5278, 14.645, -3.7832);
root.add(railPost10);
const railPost11 = new THREE.Mesh(cylinderGeo8, darkMat);
railPost11.name = 'railPost';
railPost11.position.set(-3.7832, 14.645, -2.5278);
root.add(railPost11);
const railPost12 = new THREE.Mesh(cylinderGeo8, darkMat);
railPost12.name = 'railPost';
railPost12.position.set(-4.4626, 14.645, -0.8877);
root.add(railPost12);
const railPost13 = new THREE.Mesh(cylinderGeo8, darkMat);
railPost13.name = 'railPost';
railPost13.position.set(-4.4626, 14.645, 0.8877);
root.add(railPost13);
const railPost14 = new THREE.Mesh(cylinderGeo8, darkMat);
railPost14.name = 'railPost';
railPost14.position.set(-3.7832, 14.645, 2.5278);
root.add(railPost14);
const railPost15 = new THREE.Mesh(cylinderGeo8, darkMat);
railPost15.name = 'railPost';
railPost15.position.set(-2.5278, 14.645, 3.7832);
root.add(railPost15);
const railPost16 = new THREE.Mesh(cylinderGeo8, darkMat);
railPost16.name = 'railPost';
railPost16.position.set(-0.8877, 14.645, 4.4626);
root.add(railPost16);
const railRing = new THREE.Mesh(torusGeo, darkMat);
railRing.name = 'railRing';
railRing.position.set(0, 14.74, 0);
railRing.rotation.set(deg(90), 0, 0);
root.add(railRing);
const railRing2 = new THREE.Mesh(torusGeo, darkMat);
railRing2.name = 'railRing';
railRing2.position.set(0, 15.27, 0);
railRing2.rotation.set(deg(90), 0, 0);
root.add(railRing2);
const tankBowl = new THREE.Mesh(lathe([[0.001, -2.1], [1.5, -1.85], [2.6, -1.25], [3.3, -0.55], [3.6, 0]], 16), tankMat);
tankBowl.name = 'tankBowl';
tankBowl.position.set(0, 14.12, 0);
root.add(tankBowl);
const tankShell = new THREE.Mesh(new THREE.CylinderGeometry(3.6, 3.6, 4.6, 16), tankMat);
tankShell.name = 'tankShell';
tankShell.position.set(0, 16.42, 0);
root.add(tankShell);
const tankBand = new THREE.Mesh(new THREE.CylinderGeometry(3.63, 3.63, 0.7, 16), stripeMat);
tankBand.name = 'tankBand';
tankBand.position.set(0, 16.678, 0);
root.add(tankBand);
const tankSeam = new THREE.Mesh(new THREE.CylinderGeometry(3.65, 3.65, 0.14, 16), steelMat);
tankSeam.name = 'tankSeam';
tankSeam.position.set(0, 18.69, 0);
root.add(tankSeam);
const roof = new THREE.Mesh(lathe([[3.85, 0], [3.8, 0.1], [2.1175, 0.95], [0.3, 1.805], [0.001, 1.9]], 16), tankMat);
roof.name = 'roof';
roof.position.set(0, 18.64, 0);
root.add(roof);
const finial = new THREE.Mesh(new THREE.SphereGeometry(0.25, 8, 6), steelMat);
finial.name = 'finial';
finial.position.set(0, 20.69, 0);
root.add(finial);
const roofHatch = new THREE.Mesh(new THREE.BoxGeometry(0.9, 0.24, 0.9), steelMat);
roofHatch.name = 'roofHatch';
roofHatch.position.set(0, 19.7806, 1.925);
roofHatch.rotation.set(deg(25.1935), 0, 0);
root.add(roofHatch);
const ladderLower = new THREE.Group();
ladderLower.name = 'ladderLower';
ladderLower.position.set(0, 0, 4.15);
root.add(ladderLower);
const ladderRail = new THREE.Mesh(boxGeo2, darkMat);
ladderRail.name = 'ladderRail';
ladderRail.position.set(-0.22, 7.55, 0);
ladderLower.add(ladderRail);
const ladderRail2 = new THREE.Mesh(boxGeo2, darkMat);
ladderRail2.name = 'ladderRail';
ladderRail2.position.set(0.22, 7.55, 0);
ladderLower.add(ladderRail2);
const ladderRung = new THREE.Mesh(boxGeo3, darkMat);
ladderRung.name = 'ladderRung';
ladderRung.position.set(0, 0.38, 0);
ladderLower.add(ladderRung);
const ladderRung2 = new THREE.Mesh(boxGeo3, darkMat);
ladderRung2.name = 'ladderRung';
ladderRung2.position.set(0, 0.86, 0);
ladderLower.add(ladderRung2);
const ladderRung3 = new THREE.Mesh(boxGeo3, darkMat);
ladderRung3.name = 'ladderRung';
ladderRung3.position.set(0, 1.34, 0);
ladderLower.add(ladderRung3);
const ladderRung4 = new THREE.Mesh(boxGeo3, darkMat);
ladderRung4.name = 'ladderRung';
ladderRung4.position.set(0, 1.82, 0);
ladderLower.add(ladderRung4);
const ladderRung5 = new THREE.Mesh(boxGeo3, darkMat);
ladderRung5.name = 'ladderRung';
ladderRung5.position.set(0, 2.3, 0);
ladderLower.add(ladderRung5);
const ladderRung6 = new THREE.Mesh(boxGeo3, darkMat);
ladderRung6.name = 'ladderRung';
ladderRung6.position.set(0, 2.78, 0);
ladderLower.add(ladderRung6);
const ladderRung7 = new THREE.Mesh(boxGeo3, darkMat);
ladderRung7.name = 'ladderRung';
ladderRung7.position.set(0, 3.26, 0);
ladderLower.add(ladderRung7);
const ladderRung8 = new THREE.Mesh(boxGeo3, darkMat);
ladderRung8.name = 'ladderRung';
ladderRung8.position.set(0, 3.74, 0);
ladderLower.add(ladderRung8);
const ladderRung9 = new THREE.Mesh(boxGeo3, darkMat);
ladderRung9.name = 'ladderRung';
ladderRung9.position.set(0, 4.22, 0);
ladderLower.add(ladderRung9);
const ladderRung10 = new THREE.Mesh(boxGeo3, darkMat);
ladderRung10.name = 'ladderRung';
ladderRung10.position.set(0, 4.7, 0);
ladderLower.add(ladderRung10);
const ladderRung11 = new THREE.Mesh(boxGeo3, darkMat);
ladderRung11.name = 'ladderRung';
ladderRung11.position.set(0, 5.18, 0);
ladderLower.add(ladderRung11);
const ladderRung12 = new THREE.Mesh(boxGeo3, darkMat);
ladderRung12.name = 'ladderRung';
ladderRung12.position.set(0, 5.66, 0);
ladderLower.add(ladderRung12);
const ladderRung13 = new THREE.Mesh(boxGeo3, darkMat);
ladderRung13.name = 'ladderRung';
ladderRung13.position.set(0, 6.14, 0);
ladderLower.add(ladderRung13);
const ladderRung14 = new THREE.Mesh(boxGeo3, darkMat);
ladderRung14.name = 'ladderRung';
ladderRung14.position.set(0, 6.62, 0);
ladderLower.add(ladderRung14);
const ladderRung15 = new THREE.Mesh(boxGeo3, darkMat);
ladderRung15.name = 'ladderRung';
ladderRung15.position.set(0, 7.1, 0);
ladderLower.add(ladderRung15);
const ladderRung16 = new THREE.Mesh(boxGeo3, darkMat);
ladderRung16.name = 'ladderRung';
ladderRung16.position.set(0, 7.58, 0);
ladderLower.add(ladderRung16);
const ladderRung17 = new THREE.Mesh(boxGeo3, darkMat);
ladderRung17.name = 'ladderRung';
ladderRung17.position.set(0, 8.06, 0);
ladderLower.add(ladderRung17);
const ladderRung18 = new THREE.Mesh(boxGeo3, darkMat);
ladderRung18.name = 'ladderRung';
ladderRung18.position.set(0, 8.54, 0);
ladderLower.add(ladderRung18);
const ladderRung19 = new THREE.Mesh(boxGeo3, darkMat);
ladderRung19.name = 'ladderRung';
ladderRung19.position.set(0, 9.02, 0);
ladderLower.add(ladderRung19);
const ladderRung20 = new THREE.Mesh(boxGeo3, darkMat);
ladderRung20.name = 'ladderRung';
ladderRung20.position.set(0, 9.5, 0);
ladderLower.add(ladderRung20);
const ladderRung21 = new THREE.Mesh(boxGeo3, darkMat);
ladderRung21.name = 'ladderRung';
ladderRung21.position.set(0, 9.98, 0);
ladderLower.add(ladderRung21);
const ladderRung22 = new THREE.Mesh(boxGeo3, darkMat);
ladderRung22.name = 'ladderRung';
ladderRung22.position.set(0, 10.46, 0);
ladderLower.add(ladderRung22);
const ladderRung23 = new THREE.Mesh(boxGeo3, darkMat);
ladderRung23.name = 'ladderRung';
ladderRung23.position.set(0, 10.94, 0);
ladderLower.add(ladderRung23);
const ladderRung24 = new THREE.Mesh(boxGeo3, darkMat);
ladderRung24.name = 'ladderRung';
ladderRung24.position.set(0, 11.42, 0);
ladderLower.add(ladderRung24);
const ladderRung25 = new THREE.Mesh(boxGeo3, darkMat);
ladderRung25.name = 'ladderRung';
ladderRung25.position.set(0, 11.9, 0);
ladderLower.add(ladderRung25);
const ladderRung26 = new THREE.Mesh(boxGeo3, darkMat);
ladderRung26.name = 'ladderRung';
ladderRung26.position.set(0, 12.38, 0);
ladderLower.add(ladderRung26);
const ladderRung27 = new THREE.Mesh(boxGeo3, darkMat);
ladderRung27.name = 'ladderRung';
ladderRung27.position.set(0, 12.86, 0);
ladderLower.add(ladderRung27);
const ladderRung28 = new THREE.Mesh(boxGeo3, darkMat);
ladderRung28.name = 'ladderRung';
ladderRung28.position.set(0, 13.34, 0);
ladderLower.add(ladderRung28);
const ladderRung29 = new THREE.Mesh(boxGeo3, darkMat);
ladderRung29.name = 'ladderRung';
ladderRung29.position.set(0, 13.82, 0);
ladderLower.add(ladderRung29);
const ladderRung30 = new THREE.Mesh(boxGeo3, darkMat);
ladderRung30.name = 'ladderRung';
ladderRung30.position.set(0, 14.3, 0);
ladderLower.add(ladderRung30);
const ladderRung31 = new THREE.Mesh(boxGeo3, darkMat);
ladderRung31.name = 'ladderRung';
ladderRung31.position.set(0, 14.78, 0);
ladderLower.add(ladderRung31);
const ladderUpper = new THREE.Group();
ladderUpper.name = 'ladderUpper';
ladderUpper.position.set(0, 14.12, 3.74);
root.add(ladderUpper);
const ladderRail3 = new THREE.Mesh(boxGeo4, darkMat);
ladderRail3.name = 'ladderRail';
ladderRail3.position.set(-0.22, 2.225, 0);
ladderUpper.add(ladderRail3);
const ladderRail4 = new THREE.Mesh(boxGeo4, darkMat);
ladderRail4.name = 'ladderRail';
ladderRail4.position.set(0.22, 2.225, 0);
ladderUpper.add(ladderRail4);
const ladderRung32 = new THREE.Mesh(boxGeo3, darkMat);
ladderRung32.name = 'ladderRung';
ladderRung32.position.set(0, 0.38, 0);
ladderUpper.add(ladderRung32);
const ladderRung33 = new THREE.Mesh(boxGeo3, darkMat);
ladderRung33.name = 'ladderRung';
ladderRung33.position.set(0, 0.86, 0);
ladderUpper.add(ladderRung33);
const ladderRung34 = new THREE.Mesh(boxGeo3, darkMat);
ladderRung34.name = 'ladderRung';
ladderRung34.position.set(0, 1.34, 0);
ladderUpper.add(ladderRung34);
const ladderRung35 = new THREE.Mesh(boxGeo3, darkMat);
ladderRung35.name = 'ladderRung';
ladderRung35.position.set(0, 1.82, 0);
ladderUpper.add(ladderRung35);
const ladderRung36 = new THREE.Mesh(boxGeo3, darkMat);
ladderRung36.name = 'ladderRung';
ladderRung36.position.set(0, 2.3, 0);
ladderUpper.add(ladderRung36);
const ladderRung37 = new THREE.Mesh(boxGeo3, darkMat);
ladderRung37.name = 'ladderRung';
ladderRung37.position.set(0, 2.78, 0);
ladderUpper.add(ladderRung37);
const ladderRung38 = new THREE.Mesh(boxGeo3, darkMat);
ladderRung38.name = 'ladderRung';
ladderRung38.position.set(0, 3.26, 0);
ladderUpper.add(ladderRung38);
const ladderRung39 = new THREE.Mesh(boxGeo3, darkMat);
ladderRung39.name = 'ladderRung';
ladderRung39.position.set(0, 3.74, 0);
ladderUpper.add(ladderRung39);
const ladderRung40 = new THREE.Mesh(boxGeo3, darkMat);
ladderRung40.name = 'ladderRung';
ladderRung40.position.set(0, 4.22, 0);
ladderUpper.add(ladderRung40);
const ladderCage = new THREE.Mesh(torusGeo2, darkMat);
ladderCage.name = 'ladderCage';
ladderCage.position.set(0, 3, 4.15);
ladderCage.rotation.set(deg(90), 0, 0);
root.add(ladderCage);
const ladderCage2 = new THREE.Mesh(torusGeo2, darkMat);
ladderCage2.name = 'ladderCage';
ladderCage2.position.set(0, 6.5, 4.15);
ladderCage2.rotation.set(deg(90), 0, 0);
root.add(ladderCage2);
const ladderCage3 = new THREE.Mesh(torusGeo2, darkMat);
ladderCage3.name = 'ladderCage';
ladderCage3.position.set(0, 10, 4.15);
ladderCage3.rotation.set(deg(90), 0, 0);
root.add(ladderCage3);
const ladderCage4 = new THREE.Mesh(torusGeo2, darkMat);
ladderCage4.name = 'ladderCage';
ladderCage4.position.set(0, 13.5, 4.15);
ladderCage4.rotation.set(deg(90), 0, 0);
root.add(ladderCage4);
root.traverse((o) => {
if (o.isMesh) {
o.castShadow = true;
o.receiveShadow = true;
}
});
return root;
}
export default createWaterTower;
Notes et commentaires
0 commentaire
Aucun commentaire pour l’instant. Dites comment vous avez utilisé ce modèle ou ce qui pourrait être amélioré.
Modèles similaires
Même catégorie ou étiquettes proches









