Codels
1308 ポリゴン2.70 × 9.25 × 3.30 m
自己完結型の ES モジュールで、依存先は three のみです。ファクトリー関数を呼び出し、返された group をシーンに追加してください。
/**
 * Antenna Tower — Codels 3D model library
 * License: CC0-1.0 · Units: meters · Y-up · Front: +Z · Origin: center of the base (y = 0)
 * Triangles: 1,308 · Size (W × H × D): 2.70 × 9.25 × 3.30 m
 *
 * Usage:
 *   import { createAntennaTower } from './antenna-tower.js';
 *   
 *   const model = createAntennaTower();
 *   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);
}

// Tube along a smooth curve through the given points.
function tube(path, radius, tubularSegments, radialSegments, closed = false) {
  const curve = new THREE.CatmullRomCurve3(path.map(([x, y, z]) => new THREE.Vector3(x, y, z)), closed);
  return new THREE.TubeGeometry(curve, tubularSegments, radius, radialSegments, closed);
}

export function createAntennaTower() {
  const root = new THREE.Group();
  root.name = 'AntennaTower';

  // Materials
  const steelMat = new THREE.MeshStandardMaterial({ name: 'steel', color: 0x8d959f, roughness: 0.45, metalness: 0.6, flatShading: true });
  const whiteMat = new THREE.MeshStandardMaterial({ name: 'white', color: 0xe4e8ec, roughness: 0.5, metalness: 0.15, flatShading: true });
  const dishMat = new THREE.MeshStandardMaterial({ name: 'dish', color: 0xeef0f3, roughness: 0.45, metalness: 0.1, flatShading: true, side: THREE.DoubleSide });
  const darkMat = new THREE.MeshStandardMaterial({ name: 'dark', color: 0x2f343c, roughness: 0.6, metalness: 0.35, flatShading: true });
  const accentMat = new THREE.MeshStandardMaterial({ name: 'accent', color: 0xe0683a, roughness: 0.5, metalness: 0.2, flatShading: true });
  const concreteMat = new THREE.MeshStandardMaterial({ name: 'concrete', color: 0xa9a49b, roughness: 0.95, flatShading: true });
  const glowMat = new THREE.MeshStandardMaterial({ name: 'glow', color: 0x46d2ff, roughness: 0.4, emissive: 0x38c8ff, emissiveIntensity: 1.1, flatShading: true });
  const beaconMat = new THREE.MeshStandardMaterial({ name: 'beacon', color: 0xff2a1f, roughness: 0.4, emissive: 0xff2a1f, emissiveIntensity: 1.5, flatShading: true });
  const haloMat = new THREE.MeshStandardMaterial({ name: 'halo', color: 0xff2a1f, roughness: 0.3, emissive: 0xff2a1f, emissiveIntensity: 0.8, transparent: true, opacity: 0.3, flatShading: true });

  // Shared geometries
  const boxGeo = new THREE.BoxGeometry(0.36, 0.14, 0.36);
  const cylinderGeo = new THREE.CylinderGeometry(0.045, 0.065, 6.5074, 5);
  const cylinderGeo2 = new THREE.CylinderGeometry(0.024, 0.024, 2.7464, 3, 1, true);
  const cylinderGeo3 = new THREE.CylinderGeometry(0.024, 0.024, 2.5155, 3, 1, true);
  const cylinderGeo4 = new THREE.CylinderGeometry(0.028, 0.028, 1.4933, 3, 1, true);
  const cylinderGeo5 = new THREE.CylinderGeometry(0.024, 0.024, 2.3333, 3, 1, true);
  const cylinderGeo6 = new THREE.CylinderGeometry(0.028, 0.028, 1.0867, 3, 1, true);
  const boxGeo2 = new THREE.BoxGeometry(1.58, 0.035, 0.035);
  const boxGeo3 = new THREE.BoxGeometry(1.58, 0.03, 0.03);
  const boxGeo4 = new THREE.BoxGeometry(0.035, 0.6, 0.035);
  const boxGeo5 = new THREE.BoxGeometry(0.24, 1.1, 0.09);
  const boxGeo6 = new THREE.BoxGeometry(0.08, 0.2, 0.08);
  const cylinderGeo7 = new THREE.CylinderGeometry(0.11, 0.11, 0.12, 6);
  const cylinderGeo8 = new THREE.CylinderGeometry(0.012, 0.012, 0.9, 4);
  const octahedronGeo = new THREE.OctahedronGeometry(0.07, 0);
  const cylinderGeo9 = new THREE.CylinderGeometry(0.04, 0.04, 0.38, 5);
  const latheGeo = lathe([[0.001, 0], [0.1667, 0.0174], [0.3333, 0.0694], [0.5, 0.1563]], 8);
  const torusGeo = new THREE.TorusGeometry(0.5, 0.025, 3, 8);
  const cylinderGeo10 = new THREE.CylinderGeometry(0.1, 0.14, 0.16, 6);
  const cylinderGeo11 = new THREE.CylinderGeometry(0.012, 0.012, 0.4, 3);
  const cylinderGeo12 = new THREE.CylinderGeometry(0.04, 0.06, 0.08, 5);
  const boxGeo7 = new THREE.BoxGeometry(0.05, 0.05, 0.02);

  // Parts
  const pad = new THREE.Mesh(new THREE.BoxGeometry(2.7, 0.12, 3.3), concreteMat);
  pad.name = 'pad';
  pad.position.set(0, 0.06, 0.3);
  root.add(pad);
  const footing1 = new THREE.Mesh(boxGeo, concreteMat);
  footing1.name = 'footing1';
  footing1.position.set(0.95, 0.18, 0.95);
  root.add(footing1);
  const footing2 = new THREE.Mesh(boxGeo, concreteMat);
  footing2.name = 'footing2';
  footing2.position.set(-0.95, 0.18, 0.95);
  root.add(footing2);
  const footing3 = new THREE.Mesh(boxGeo, concreteMat);
  footing3.name = 'footing3';
  footing3.position.set(-0.95, 0.18, -0.95);
  root.add(footing3);
  const footing4 = new THREE.Mesh(boxGeo, concreteMat);
  footing4.name = 'footing4';
  footing4.position.set(0.95, 0.18, -0.95);
  root.add(footing4);
  const lattice = new THREE.Group();
  lattice.name = 'lattice';
  root.add(lattice);
  const leg1 = new THREE.Mesh(cylinderGeo, steelMat);
  leg1.name = 'leg1';
  leg1.position.set(0.645, 3.475, 0.645);
  leg1.rotation.set(deg(-5.3788), deg(-0.2528), deg(5.3788));
  lattice.add(leg1);
  const leg2 = new THREE.Mesh(cylinderGeo, steelMat);
  leg2.name = 'leg2';
  leg2.position.set(-0.645, 3.475, 0.645);
  leg2.rotation.set(deg(-5.3788), deg(0.2528), deg(-5.3788));
  lattice.add(leg2);
  const leg3 = new THREE.Mesh(cylinderGeo, steelMat);
  leg3.name = 'leg3';
  leg3.position.set(-0.645, 3.475, -0.645);
  leg3.rotation.set(deg(5.3788), deg(-0.2528), deg(-5.3788));
  lattice.add(leg3);
  const leg4 = new THREE.Mesh(cylinderGeo, steelMat);
  leg4.name = 'leg4';
  leg4.position.set(0.645, 3.475, -0.645);
  leg4.rotation.set(deg(5.3788), deg(0.2528), deg(5.3788));
  lattice.add(leg4);
  const cylinder11 = new THREE.Mesh(cylinderGeo2, steelMat);
  cylinder11.position.set(0.1017, 1.325, 0.8483);
  cylinder11.rotation.set(deg(-4.2473), deg(-1.4701), deg(38.1695));
  lattice.add(cylinder11);
  const cylinder12 = new THREE.Mesh(cylinderGeo2, steelMat);
  cylinder12.position.set(-0.1017, 1.325, 0.8483);
  cylinder12.rotation.set(deg(-4.2473), deg(1.4701), deg(-38.1695));
  lattice.add(cylinder12);
  const cylinder13 = new THREE.Mesh(cylinderGeo2, steelMat);
  cylinder13.position.set(-0.8483, 1.325, 0.1017);
  cylinder13.rotation.set(deg(-38.1695), deg(1.4701), deg(-4.2473));
  lattice.add(cylinder13);
  const cylinder14 = new THREE.Mesh(cylinderGeo2, steelMat);
  cylinder14.position.set(-0.8483, 1.325, -0.1017);
  cylinder14.rotation.set(deg(38.1695), deg(-1.4701), deg(-4.2473));
  lattice.add(cylinder14);
  const cylinder15 = new THREE.Mesh(cylinderGeo2, steelMat);
  cylinder15.position.set(-0.1017, 1.325, -0.8483);
  cylinder15.rotation.set(deg(4.2473), deg(-1.4701), deg(-38.1695));
  lattice.add(cylinder15);
  const cylinder16 = new THREE.Mesh(cylinderGeo2, steelMat);
  cylinder16.position.set(0.1017, 1.325, -0.8483);
  cylinder16.rotation.set(deg(4.2473), deg(1.4701), deg(38.1695));
  lattice.add(cylinder16);
  const cylinder17 = new THREE.Mesh(cylinderGeo2, steelMat);
  cylinder17.position.set(0.8483, 1.325, -0.1017);
  cylinder17.rotation.set(deg(38.1695), deg(1.4701), deg(4.2473));
  lattice.add(cylinder17);
  const cylinder18 = new THREE.Mesh(cylinderGeo2, steelMat);
  cylinder18.position.set(0.8483, 1.325, 0.1017);
  cylinder18.rotation.set(deg(-38.1695), deg(-1.4701), deg(4.2473));
  lattice.add(cylinder18);
  const cylinder19 = new THREE.Mesh(cylinderGeo3, steelMat);
  cylinder19.position.set(0.1017, 3.475, 0.645);
  cylinder19.rotation.set(deg(-4.6375), deg(-1.2806), deg(30.8599));
  lattice.add(cylinder19);
  const cylinder20 = new THREE.Mesh(cylinderGeo3, steelMat);
  cylinder20.position.set(-0.1017, 3.475, 0.645);
  cylinder20.rotation.set(deg(-4.6375), deg(1.2806), deg(-30.8599));
  lattice.add(cylinder20);
  const cylinder21 = new THREE.Mesh(cylinderGeo4, steelMat);
  cylinder21.position.set(0, 2.4, 0.7467);
  cylinder21.rotation.set(0, 0, deg(90));
  lattice.add(cylinder21);
  const cylinder22 = new THREE.Mesh(cylinderGeo3, steelMat);
  cylinder22.position.set(-0.645, 3.475, 0.1017);
  cylinder22.rotation.set(deg(-30.8599), deg(1.2806), deg(-4.6375));
  lattice.add(cylinder22);
  const cylinder23 = new THREE.Mesh(cylinderGeo3, steelMat);
  cylinder23.position.set(-0.645, 3.475, -0.1017);
  cylinder23.rotation.set(deg(30.8599), deg(-1.2806), deg(-4.6375));
  lattice.add(cylinder23);
  const cylinder24 = new THREE.Mesh(cylinderGeo4, steelMat);
  cylinder24.position.set(-0.7467, 2.4, 0);
  cylinder24.rotation.set(deg(-90), 0, 0);
  lattice.add(cylinder24);
  const cylinder25 = new THREE.Mesh(cylinderGeo3, steelMat);
  cylinder25.position.set(-0.1017, 3.475, -0.645);
  cylinder25.rotation.set(deg(4.6375), deg(-1.2806), deg(-30.8599));
  lattice.add(cylinder25);
  const cylinder26 = new THREE.Mesh(cylinderGeo3, steelMat);
  cylinder26.position.set(0.1017, 3.475, -0.645);
  cylinder26.rotation.set(deg(4.6375), deg(1.2806), deg(30.8599));
  lattice.add(cylinder26);
  const cylinder27 = new THREE.Mesh(cylinderGeo4, steelMat);
  cylinder27.position.set(0, 2.4, -0.7467);
  cylinder27.rotation.set(0, 0, deg(-90));
  lattice.add(cylinder27);
  const cylinder28 = new THREE.Mesh(cylinderGeo3, steelMat);
  cylinder28.position.set(0.645, 3.475, -0.1017);
  cylinder28.rotation.set(deg(30.8599), deg(1.2806), deg(4.6375));
  lattice.add(cylinder28);
  const cylinder29 = new THREE.Mesh(cylinderGeo3, steelMat);
  cylinder29.position.set(0.645, 3.475, 0.1017);
  cylinder29.rotation.set(deg(-30.8599), deg(-1.2806), deg(4.6375));
  lattice.add(cylinder29);
  const cylinder30 = new THREE.Mesh(cylinderGeo4, steelMat);
  cylinder30.position.set(0.7467, 2.4, 0);
  cylinder30.rotation.set(deg(90), 0, 0);
  lattice.add(cylinder30);
  const cylinder31 = new THREE.Mesh(cylinderGeo5, steelMat);
  cylinder31.position.set(0.1017, 5.625, 0.4417);
  cylinder31.rotation.set(deg(-5.0001), deg(-0.9838), deg(22.2494));
  lattice.add(cylinder31);
  const cylinder32 = new THREE.Mesh(cylinderGeo5, steelMat);
  cylinder32.position.set(-0.1017, 5.625, 0.4417);
  cylinder32.rotation.set(deg(-5.0001), deg(0.9838), deg(-22.2494));
  lattice.add(cylinder32);
  const cylinder33 = new THREE.Mesh(cylinderGeo6, steelMat);
  cylinder33.position.set(0, 4.55, 0.5433);
  cylinder33.rotation.set(0, 0, deg(90));
  lattice.add(cylinder33);
  const cylinder34 = new THREE.Mesh(cylinderGeo5, steelMat);
  cylinder34.position.set(-0.4417, 5.625, 0.1017);
  cylinder34.rotation.set(deg(-22.2494), deg(0.9838), deg(-5.0001));
  lattice.add(cylinder34);
  const cylinder35 = new THREE.Mesh(cylinderGeo5, steelMat);
  cylinder35.position.set(-0.4417, 5.625, -0.1017);
  cylinder35.rotation.set(deg(22.2494), deg(-0.9838), deg(-5.0001));
  lattice.add(cylinder35);
  const cylinder36 = new THREE.Mesh(cylinderGeo6, steelMat);
  cylinder36.position.set(-0.5433, 4.55, 0);
  cylinder36.rotation.set(deg(-90), 0, 0);
  lattice.add(cylinder36);
  const cylinder37 = new THREE.Mesh(cylinderGeo5, steelMat);
  cylinder37.position.set(-0.1017, 5.625, -0.4417);
  cylinder37.rotation.set(deg(5.0001), deg(-0.9838), deg(-22.2494));
  lattice.add(cylinder37);
  const cylinder38 = new THREE.Mesh(cylinderGeo5, steelMat);
  cylinder38.position.set(0.1017, 5.625, -0.4417);
  cylinder38.rotation.set(deg(5.0001), deg(0.9838), deg(22.2494));
  lattice.add(cylinder38);
  const cylinder39 = new THREE.Mesh(cylinderGeo6, steelMat);
  cylinder39.position.set(0, 4.55, -0.5433);
  cylinder39.rotation.set(0, 0, deg(-90));
  lattice.add(cylinder39);
  const cylinder40 = new THREE.Mesh(cylinderGeo5, steelMat);
  cylinder40.position.set(0.4417, 5.625, -0.1017);
  cylinder40.rotation.set(deg(22.2494), deg(0.9838), deg(5.0001));
  lattice.add(cylinder40);
  const cylinder41 = new THREE.Mesh(cylinderGeo5, steelMat);
  cylinder41.position.set(0.4417, 5.625, 0.1017);
  cylinder41.rotation.set(deg(-22.2494), deg(-0.9838), deg(5.0001));
  lattice.add(cylinder41);
  const cylinder42 = new THREE.Mesh(cylinderGeo6, steelMat);
  cylinder42.position.set(0.5433, 4.55, 0);
  cylinder42.rotation.set(deg(90), 0, 0);
  lattice.add(cylinder42);
  const cableRun = new THREE.Mesh(tube([[-0.7922, 0.65, 0.8622], [-0.24, 6.7, 0.29]], 0.04, 1, 4), darkMat);
  cableRun.name = 'cableRun';
  lattice.add(cableRun);
  const platform = new THREE.Mesh(new THREE.BoxGeometry(1.58, 0.08, 1.58), steelMat);
  platform.name = 'platform';
  platform.position.set(0, 6.74, 0);
  root.add(platform);
  const platformEdge = new THREE.Mesh(new THREE.BoxGeometry(1.64, 0.05, 1.64), accentMat);
  platformEdge.name = 'platformEdge';
  platformEdge.position.set(0, 6.695, 0);
  root.add(platformEdge);
  const rail1 = new THREE.Group();
  rail1.name = 'rail1';
  root.add(rail1);
  const box47 = new THREE.Mesh(boxGeo2, whiteMat);
  box47.position.set(0, 7.32, 0.79);
  rail1.add(box47);
  const box48 = new THREE.Mesh(boxGeo3, whiteMat);
  box48.position.set(0, 7.04, 0.79);
  rail1.add(box48);
  const box49 = new THREE.Mesh(boxGeo4, whiteMat);
  box49.position.set(0.79, 7.08, 0.79);
  rail1.add(box49);
  const rail2 = new THREE.Group();
  rail2.name = 'rail2';
  rail2.rotation.set(0, deg(90), 0);
  root.add(rail2);
  const box51 = new THREE.Mesh(boxGeo2, whiteMat);
  box51.position.set(0, 7.32, 0.79);
  rail2.add(box51);
  const box52 = new THREE.Mesh(boxGeo3, whiteMat);
  box52.position.set(0, 7.04, 0.79);
  rail2.add(box52);
  const box53 = new THREE.Mesh(boxGeo4, whiteMat);
  box53.position.set(0.79, 7.08, 0.79);
  rail2.add(box53);
  const rail3 = new THREE.Group();
  rail3.name = 'rail3';
  rail3.rotation.set(0, deg(180), 0);
  root.add(rail3);
  const box55 = new THREE.Mesh(boxGeo2, whiteMat);
  box55.position.set(0, 7.32, 0.79);
  rail3.add(box55);
  const box56 = new THREE.Mesh(boxGeo3, whiteMat);
  box56.position.set(0, 7.04, 0.79);
  rail3.add(box56);
  const box57 = new THREE.Mesh(boxGeo4, whiteMat);
  box57.position.set(0.79, 7.08, 0.79);
  rail3.add(box57);
  const rail4 = new THREE.Group();
  rail4.name = 'rail4';
  rail4.rotation.set(0, deg(270), 0);
  root.add(rail4);
  const box59 = new THREE.Mesh(boxGeo2, whiteMat);
  box59.position.set(0, 7.32, 0.79);
  rail4.add(box59);
  const box60 = new THREE.Mesh(boxGeo3, whiteMat);
  box60.position.set(0, 7.04, 0.79);
  rail4.add(box60);
  const box61 = new THREE.Mesh(boxGeo4, whiteMat);
  box61.position.set(0.79, 7.08, 0.79);
  rail4.add(box61);
  const panelAntenna1 = new THREE.Mesh(boxGeo5, whiteMat);
  panelAntenna1.name = 'panelAntenna1';
  panelAntenna1.position.set(0.335, 7.45, 0.5802);
  panelAntenna1.rotation.set(0, deg(30), 0);
  root.add(panelAntenna1);
  const box63 = new THREE.Mesh(boxGeo6, darkMat);
  box63.position.set(0.295, 6.88, 0.511);
  box63.rotation.set(0, deg(30), 0);
  root.add(box63);
  const panelAntenna2 = new THREE.Mesh(boxGeo5, whiteMat);
  panelAntenna2.name = 'panelAntenna2';
  panelAntenna2.position.set(0.335, 7.45, -0.5802);
  panelAntenna2.rotation.set(0, deg(150), 0);
  root.add(panelAntenna2);
  const box65 = new THREE.Mesh(boxGeo6, darkMat);
  box65.position.set(0.295, 6.88, -0.511);
  box65.rotation.set(0, deg(150), 0);
  root.add(box65);
  const panelAntenna3 = new THREE.Mesh(boxGeo5, whiteMat);
  panelAntenna3.name = 'panelAntenna3';
  panelAntenna3.position.set(-0.67, 7.45, 0);
  panelAntenna3.rotation.set(0, deg(270), 0);
  root.add(panelAntenna3);
  const box67 = new THREE.Mesh(boxGeo6, darkMat);
  box67.position.set(-0.59, 6.88, 0);
  box67.rotation.set(0, deg(270), 0);
  root.add(box67);
  const relayBox = new THREE.Mesh(new THREE.BoxGeometry(0.5, 0.42, 0.4), darkMat);
  relayBox.name = 'relayBox';
  relayBox.position.set(-0.12, 6.99, -0.15);
  root.add(relayBox);
  const relayLight = new THREE.Mesh(new THREE.BoxGeometry(0.2, 0.05, 0.02), glowMat);
  relayLight.name = 'relayLight';
  relayLight.position.set(-0.12, 7.06, 0.06);
  root.add(relayLight);
  const mast = new THREE.Mesh(new THREE.CylinderGeometry(0.07, 0.1, 2, 6), whiteMat);
  mast.name = 'mast';
  mast.position.set(0, 7.78, 0);
  root.add(mast);
  const cylinder71 = new THREE.Mesh(cylinderGeo7, accentMat);
  cylinder71.position.set(0, 7.36, 0);
  root.add(cylinder71);
  const cylinder72 = new THREE.Mesh(cylinderGeo7, accentMat);
  cylinder72.position.set(0, 8.06, 0);
  root.add(cylinder72);
  const crossArm = new THREE.Mesh(new THREE.BoxGeometry(0.9, 0.035, 0.035), steelMat);
  crossArm.name = 'crossArm';
  crossArm.position.set(0, 8.35, 0);
  crossArm.rotation.set(0, deg(35), 0);
  root.add(crossArm);
  const whipL = new THREE.Mesh(cylinderGeo8, steelMat);
  whipL.name = 'whipL';
  whipL.position.set(-0.3277, 8.8, 0.2294);
  root.add(whipL);
  const whipR = new THREE.Mesh(cylinderGeo8, steelMat);
  whipR.name = 'whipR';
  whipR.position.set(0.3277, 8.8, -0.2294);
  root.add(whipR);
  const beaconBase = new THREE.Mesh(new THREE.CylinderGeometry(0.09, 0.09, 0.08, 8), darkMat);
  beaconBase.name = 'beaconBase';
  beaconBase.position.set(0, 8.82, 0);
  root.add(beaconBase);
  const beacon = new THREE.Mesh(new THREE.SphereGeometry(0.11, 6, 4), beaconMat);
  beacon.name = 'beacon';
  beacon.position.set(0, 8.92, 0);
  root.add(beacon);
  const beaconHalo = new THREE.Mesh(new THREE.SphereGeometry(0.2, 6, 4), haloMat);
  beaconHalo.name = 'beaconHalo';
  beaconHalo.position.set(0, 8.92, 0);
  root.add(beaconHalo);
  const midBeacon1 = new THREE.Mesh(octahedronGeo, beaconMat);
  midBeacon1.name = 'midBeacon1';
  midBeacon1.position.set(0.6637, 3.7975, 0.6637);
  root.add(midBeacon1);
  const midBeacon2 = new THREE.Mesh(octahedronGeo, beaconMat);
  midBeacon2.name = 'midBeacon2';
  midBeacon2.position.set(-0.6637, 3.7975, 0.6637);
  root.add(midBeacon2);
  const midBeacon3 = new THREE.Mesh(octahedronGeo, beaconMat);
  midBeacon3.name = 'midBeacon3';
  midBeacon3.position.set(-0.6637, 3.7975, -0.6637);
  root.add(midBeacon3);
  const midBeacon4 = new THREE.Mesh(octahedronGeo, beaconMat);
  midBeacon4.name = 'midBeacon4';
  midBeacon4.position.set(0.6637, 3.7975, -0.6637);
  root.add(midBeacon4);
  const dishBracket1 = new THREE.Mesh(cylinderGeo9, steelMat);
  dishBracket1.name = 'dishBracket1';
  dishBracket1.position.set(0.7262, 4.5213, 0.0626);
  dishBracket1.rotation.set(deg(20.1221), deg(-16.7578), deg(-79.3958));
  root.add(dishBracket1);
  const dish1 = new THREE.Group();
  dish1.name = 'dish1';
  dish1.position.set(0.905, 4.5356, 0.1252);
  dish1.rotation.set(deg(-12.875), deg(70.2505), deg(9.0765));
  root.add(dish1);
  const reflector = new THREE.Mesh(latheGeo, dishMat);
  reflector.name = 'reflector';
  reflector.rotation.set(deg(90), 0, 0);
  dish1.add(reflector);
  const rim = new THREE.Mesh(torusGeo, accentMat);
  rim.name = 'rim';
  rim.position.set(0, 0, 0.1563);
  dish1.add(rim);
  const hub = new THREE.Mesh(cylinderGeo10, steelMat);
  hub.name = 'hub';
  hub.position.set(0, 0, -0.06);
  hub.rotation.set(deg(90), 0, 0);
  dish1.add(hub);
  const feedStrut = new THREE.Mesh(cylinderGeo11, steelMat);
  feedStrut.name = 'feedStrut';
  feedStrut.position.set(0, 0, 0.2);
  feedStrut.rotation.set(deg(90), 0, 0);
  dish1.add(feedStrut);
  const feed = new THREE.Mesh(cylinderGeo12, darkMat);
  feed.name = 'feed';
  feed.position.set(0, 0, 0.4);
  feed.rotation.set(deg(90), 0, 0);
  dish1.add(feed);
  const dishBracket2 = new THREE.Mesh(cylinderGeo9, steelMat);
  dishBracket2.name = 'dishBracket2';
  dishBracket2.position.set(-0.046, 3.3552, 0.8413);
  dishBracket2.rotation.set(deg(83.8493), deg(12.9379), deg(14.3924));
  root.add(dishBracket2);
  const dish2 = new THREE.Group();
  dish2.name = 'dish2';
  dish2.position.set(-0.0921, 3.3644, 1.0254);
  dish2.rotation.set(deg(-2.8624), deg(-14.0194), deg(-0.352));
  root.add(dish2);
  const reflector2 = new THREE.Mesh(latheGeo, dishMat);
  reflector2.name = 'reflector';
  reflector2.rotation.set(deg(90), 0, 0);
  dish2.add(reflector2);
  const rim2 = new THREE.Mesh(torusGeo, accentMat);
  rim2.name = 'rim';
  rim2.position.set(0, 0, 0.1563);
  dish2.add(rim2);
  const hub2 = new THREE.Mesh(cylinderGeo10, steelMat);
  hub2.name = 'hub';
  hub2.position.set(0, 0, -0.06);
  hub2.rotation.set(deg(90), 0, 0);
  dish2.add(hub2);
  const feedStrut2 = new THREE.Mesh(cylinderGeo11, steelMat);
  feedStrut2.name = 'feedStrut';
  feedStrut2.position.set(0, 0, 0.2);
  feedStrut2.rotation.set(deg(90), 0, 0);
  dish2.add(feedStrut2);
  const feed2 = new THREE.Mesh(cylinderGeo12, darkMat);
  feed2.name = 'feed';
  feed2.position.set(0, 0, 0.4);
  feed2.rotation.set(deg(90), 0, 0);
  dish2.add(feed2);
  const cabinet = new THREE.Mesh(new THREE.BoxGeometry(0.7, 0.95, 0.42), whiteMat);
  cabinet.name = 'cabinet';
  cabinet.position.set(0.15, 0.595, 1.4);
  root.add(cabinet);
  const cabinetDoor = new THREE.Mesh(new THREE.BoxGeometry(0.5, 0.6, 0.02), darkMat);
  cabinetDoor.name = 'cabinetDoor';
  cabinetDoor.position.set(0.15, 0.6, 1.615);
  root.add(cabinetDoor);
  const cabinetLed1 = new THREE.Mesh(boxGeo7, glowMat);
  cabinetLed1.name = 'cabinetLed1';
  cabinetLed1.position.set(0, 0.98, 1.62);
  root.add(cabinetLed1);
  const cabinetLed2 = new THREE.Mesh(boxGeo7, glowMat);
  cabinetLed2.name = 'cabinetLed2';
  cabinetLed2.position.set(0.08, 0.98, 1.62);
  root.add(cabinetLed2);
  const cabinetLed3 = new THREE.Mesh(boxGeo7, beaconMat);
  cabinetLed3.name = 'cabinetLed3';
  cabinetLed3.position.set(0.16, 0.98, 1.62);
  root.add(cabinetLed3);
  const feedCable = new THREE.Mesh(tube([[-0.05, 1, 1.3], [-0.45, 0.95, 1.08], [-0.7922, 0.65, 0.8622]], 0.04, 6, 4), darkMat);
  feedCable.name = 'feedCable';
  root.add(feedCable);

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

export default createAntennaTower;

評価とコメント

—
まだ評価はありません。最初の評価をしてみましょう。
5
0
4
0
3
0
2
0
1
0

評価やコメントをするにはログインしてください。

0 件のコメント

まだコメントはありません。このモデルの使い方や改善できる点を共有しましょう。

関連モデル

同じカテゴリまたは似たタグ