Codels
1 k tris1,34 × 2,37 × 0,97 m

Utiliser dans le code

Remixer dans l’éditeur
Module ES autonome — ne dépend que de three. Appelez la fonction factory et ajoutez le groupe à votre scène.
/**
 * Server Rack — Codels 3D model library
 * License: CC0-1.0 · Units: meters · Y-up · Front: +Z · Origin: center of the base (y = 0)
 * Triangles: 1,032 · Size (W × H × D): 1.34 × 2.37 × 0.96 m
 *
 * Usage:
 *   import { createServerRack } from './server-rack.js';
 *   
 *   const model = createServerRack();
 *   model.position.set(0, 0, 0);
 *   scene.add(model);
 */
import * as THREE from 'three';

// 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 createServerRack() {
  const root = new THREE.Group();
  root.name = 'ServerRack';

  // Materials
  const shellMat = new THREE.MeshStandardMaterial({ name: 'shell', color: 0xd0d6de, roughness: 0.45, metalness: 0.3, flatShading: true });
  const darkMat = new THREE.MeshStandardMaterial({ name: 'dark', color: 0x262a31, roughness: 0.6, metalness: 0.35, flatShading: true });
  const faceMat = new THREE.MeshStandardMaterial({ name: 'face', color: 0x454c57, roughness: 0.5, metalness: 0.45, flatShading: true });
  const metalMat = new THREE.MeshStandardMaterial({ name: 'metal', color: 0x7d858f, roughness: 0.4, metalness: 0.6, flatShading: true });
  const ledMat = new THREE.MeshStandardMaterial({ name: 'led', color: 0x3ad6ff, roughness: 0.4, emissive: 0x3ad6ff, emissiveIntensity: 1.3, flatShading: true });
  const ledAmberMat = new THREE.MeshStandardMaterial({ name: 'ledAmber', color: 0xffb648, roughness: 0.4, emissive: 0xffa526, emissiveIntensity: 1.2, flatShading: true });
  const ledRedMat = new THREE.MeshStandardMaterial({ name: 'ledRed', color: 0xff5246, roughness: 0.4, emissive: 0xff3b2f, emissiveIntensity: 1.2, flatShading: true });
  const cableAMat = new THREE.MeshStandardMaterial({ name: 'cableA', color: 0xe8783a, roughness: 0.7, flatShading: true });
  const cableBMat = new THREE.MeshStandardMaterial({ name: 'cableB', color: 0x3b6fd6, roughness: 0.7, flatShading: true });

  // Shared geometries
  const boxGeo = new THREE.BoxGeometry(0.62, 0.1, 0.95);
  const boxGeo2 = new THREE.BoxGeometry(0.04, 1.95, 0.95);
  const boxGeo3 = new THREE.BoxGeometry(0.012, 1.75, 0.02);
  const boxGeo4 = new THREE.BoxGeometry(0.62, 0.08, 0.95);
  const boxGeo5 = new THREE.BoxGeometry(0.54, 1.87, 0.87);
  const boxGeo6 = new THREE.BoxGeometry(0.46, 0.02, 0.5);
  const boxGeo7 = new THREE.BoxGeometry(0.012, 1.25, 0.62);
  const boxGeo8 = new THREE.BoxGeometry(0.016, 0.03, 0.5);
  const boxGeo9 = new THREE.BoxGeometry(0.016, 0.36, 0.05);
  const planeGeo = new THREE.PlaneGeometry(0.52, 0.17);
  const planeGeo2 = new THREE.PlaneGeometry(0.1, 0.12);
  const planeGeo3 = new THREE.PlaneGeometry(0.012, 0.012);
  const planeGeo4 = new THREE.PlaneGeometry(0.24, 0.018);
  const planeGeo5 = new THREE.PlaneGeometry(0.022, 0.022);
  const planeGeo6 = new THREE.PlaneGeometry(0.42, 0.03);
  const boxGeo10 = new THREE.BoxGeometry(1.34, 0.08, 0.02);
  const boxGeo11 = new THREE.BoxGeometry(0.03, 0.24, 0.03);

  // Parts
  const rack1 = new THREE.Group();
  rack1.name = 'rack1';
  rack1.position.set(-0.31, 0, 0);
  root.add(rack1);
  const plinth = new THREE.Mesh(boxGeo, darkMat);
  plinth.name = 'plinth';
  plinth.position.set(0, 0.05, 0);
  rack1.add(plinth);
  const sideL = new THREE.Mesh(boxGeo2, shellMat);
  sideL.name = 'sideL';
  sideL.position.set(-0.29, 1.075, 0);
  rack1.add(sideL);
  const edgeGlowL = new THREE.Mesh(boxGeo3, ledMat);
  edgeGlowL.name = 'edgeGlowL';
  edgeGlowL.position.set(-0.275, 1.075, 0.48);
  rack1.add(edgeGlowL);
  const sideR = new THREE.Mesh(boxGeo2, shellMat);
  sideR.name = 'sideR';
  sideR.position.set(0.29, 1.075, 0);
  rack1.add(sideR);
  const edgeGlowR = new THREE.Mesh(boxGeo3, ledMat);
  edgeGlowR.name = 'edgeGlowR';
  edgeGlowR.position.set(0.275, 1.075, 0.48);
  rack1.add(edgeGlowR);
  const topCap = new THREE.Mesh(boxGeo4, shellMat);
  topCap.name = 'topCap';
  topCap.position.set(0, 2.01, 0);
  rack1.add(topCap);
  const chassis = new THREE.Mesh(boxGeo5, darkMat);
  chassis.name = 'chassis';
  chassis.position.set(0, 1.035, -0.04);
  rack1.add(chassis);
  const topVent = new THREE.Mesh(boxGeo6, faceMat);
  topVent.name = 'topVent';
  topVent.position.set(0, 2.055, -0.05);
  rack1.add(topVent);
  const servicePanelL = new THREE.Mesh(boxGeo7, darkMat);
  servicePanelL.name = 'servicePanelL';
  servicePanelL.position.set(-0.316, 1, -0.06);
  rack1.add(servicePanelL);
  const box11 = new THREE.Mesh(boxGeo8, faceMat);
  box11.position.set(-0.318, 0.52, -0.06);
  rack1.add(box11);
  const box12 = new THREE.Mesh(boxGeo8, faceMat);
  box12.position.set(-0.318, 0.595, -0.06);
  rack1.add(box12);
  const box13 = new THREE.Mesh(boxGeo8, faceMat);
  box13.position.set(-0.318, 0.67, -0.06);
  rack1.add(box13);
  const box14 = new THREE.Mesh(boxGeo8, faceMat);
  box14.position.set(-0.318, 0.745, -0.06);
  rack1.add(box14);
  const box15 = new THREE.Mesh(boxGeo8, faceMat);
  box15.position.set(-0.318, 0.82, -0.06);
  rack1.add(box15);
  const box16 = new THREE.Mesh(boxGeo8, faceMat);
  box16.position.set(-0.318, 0.895, -0.06);
  rack1.add(box16);
  const sideTagL = new THREE.Mesh(boxGeo9, ledMat);
  sideTagL.name = 'sideTagL';
  sideTagL.position.set(-0.318, 1.36, 0.12);
  rack1.add(sideTagL);
  const box18 = new THREE.Mesh(boxGeo9, ledAmberMat);
  box18.position.set(-0.318, 1.36, 0.04);
  rack1.add(box18);
  const blade1 = new THREE.Mesh(planeGeo, faceMat);
  blade1.name = 'blade1';
  blade1.position.set(0, 0.255, 0.435);
  rack1.add(blade1);
  const plane20 = new THREE.Mesh(planeGeo2, darkMat);
  plane20.position.set(-0.18, 0.255, 0.44);
  rack1.add(plane20);
  const plane21 = new THREE.Mesh(planeGeo2, darkMat);
  plane21.position.set(-0.06, 0.255, 0.44);
  rack1.add(plane21);
  const plane22 = new THREE.Mesh(planeGeo2, darkMat);
  plane22.position.set(0.06, 0.255, 0.44);
  rack1.add(plane22);
  const plane23 = new THREE.Mesh(planeGeo2, darkMat);
  plane23.position.set(0.18, 0.255, 0.44);
  rack1.add(plane23);
  const plane24 = new THREE.Mesh(planeGeo3, ledMat);
  plane24.position.set(0.2, 0.305, 0.441);
  rack1.add(plane24);
  const blade2 = new THREE.Mesh(planeGeo, faceMat);
  blade2.name = 'blade2';
  blade2.position.set(0, 0.445, 0.435);
  rack1.add(blade2);
  const statusBar2 = new THREE.Mesh(planeGeo4, ledMat);
  statusBar2.name = 'statusBar2';
  statusBar2.position.set(-0.09, 0.475, 0.44);
  rack1.add(statusBar2);
  const plane27 = new THREE.Mesh(planeGeo5, ledAmberMat);
  plane27.position.set(0.07, 0.475, 0.44);
  rack1.add(plane27);
  const plane28 = new THREE.Mesh(planeGeo5, darkMat);
  plane28.position.set(0.112, 0.475, 0.44);
  rack1.add(plane28);
  const plane29 = new THREE.Mesh(planeGeo5, ledMat);
  plane29.position.set(0.154, 0.475, 0.44);
  rack1.add(plane29);
  const plane30 = new THREE.Mesh(planeGeo5, ledMat);
  plane30.position.set(0.196, 0.475, 0.44);
  rack1.add(plane30);
  const plane31 = new THREE.Mesh(planeGeo5, ledMat);
  plane31.position.set(0.238, 0.475, 0.44);
  rack1.add(plane31);
  const plane32 = new THREE.Mesh(planeGeo6, darkMat);
  plane32.position.set(0, 0.41, 0.44);
  rack1.add(plane32);
  const blade3 = new THREE.Mesh(planeGeo, faceMat);
  blade3.name = 'blade3';
  blade3.position.set(0, 0.635, 0.435);
  rack1.add(blade3);
  const statusBar3 = new THREE.Mesh(planeGeo4, ledMat);
  statusBar3.name = 'statusBar3';
  statusBar3.position.set(-0.09, 0.665, 0.44);
  rack1.add(statusBar3);
  const plane35 = new THREE.Mesh(planeGeo5, ledAmberMat);
  plane35.position.set(0.07, 0.665, 0.44);
  rack1.add(plane35);
  const plane36 = new THREE.Mesh(planeGeo5, ledMat);
  plane36.position.set(0.112, 0.665, 0.44);
  rack1.add(plane36);
  const plane37 = new THREE.Mesh(planeGeo5, ledMat);
  plane37.position.set(0.154, 0.665, 0.44);
  rack1.add(plane37);
  const plane38 = new THREE.Mesh(planeGeo5, ledAmberMat);
  plane38.position.set(0.196, 0.665, 0.44);
  rack1.add(plane38);
  const plane39 = new THREE.Mesh(planeGeo5, darkMat);
  plane39.position.set(0.238, 0.665, 0.44);
  rack1.add(plane39);
  const plane40 = new THREE.Mesh(planeGeo6, darkMat);
  plane40.position.set(0, 0.6, 0.44);
  rack1.add(plane40);
  const blade4 = new THREE.Mesh(planeGeo, faceMat);
  blade4.name = 'blade4';
  blade4.position.set(0, 0.825, 0.435);
  rack1.add(blade4);
  const plane42 = new THREE.Mesh(planeGeo2, darkMat);
  plane42.position.set(-0.18, 0.825, 0.44);
  rack1.add(plane42);
  const plane43 = new THREE.Mesh(planeGeo2, darkMat);
  plane43.position.set(-0.06, 0.825, 0.44);
  rack1.add(plane43);
  const plane44 = new THREE.Mesh(planeGeo2, darkMat);
  plane44.position.set(0.06, 0.825, 0.44);
  rack1.add(plane44);
  const plane45 = new THREE.Mesh(planeGeo2, darkMat);
  plane45.position.set(0.18, 0.825, 0.44);
  rack1.add(plane45);
  const plane46 = new THREE.Mesh(planeGeo3, ledMat);
  plane46.position.set(0.2, 0.875, 0.441);
  rack1.add(plane46);
  const blade5 = new THREE.Mesh(planeGeo, faceMat);
  blade5.name = 'blade5';
  blade5.position.set(0, 1.015, 0.435);
  rack1.add(blade5);
  const statusBar5 = new THREE.Mesh(planeGeo4, ledMat);
  statusBar5.name = 'statusBar5';
  statusBar5.position.set(-0.09, 1.045, 0.44);
  rack1.add(statusBar5);
  const plane49 = new THREE.Mesh(planeGeo5, ledMat);
  plane49.position.set(0.07, 1.045, 0.44);
  rack1.add(plane49);
  const plane50 = new THREE.Mesh(planeGeo5, darkMat);
  plane50.position.set(0.112, 1.045, 0.44);
  rack1.add(plane50);
  const plane51 = new THREE.Mesh(planeGeo5, darkMat);
  plane51.position.set(0.154, 1.045, 0.44);
  rack1.add(plane51);
  const plane52 = new THREE.Mesh(planeGeo5, ledMat);
  plane52.position.set(0.196, 1.045, 0.44);
  rack1.add(plane52);
  const plane53 = new THREE.Mesh(planeGeo5, ledMat);
  plane53.position.set(0.238, 1.045, 0.44);
  rack1.add(plane53);
  const plane54 = new THREE.Mesh(planeGeo6, darkMat);
  plane54.position.set(0, 0.98, 0.44);
  rack1.add(plane54);
  const blade6 = new THREE.Mesh(planeGeo, faceMat);
  blade6.name = 'blade6';
  blade6.position.set(0, 1.205, 0.435);
  rack1.add(blade6);
  const statusBar6 = new THREE.Mesh(planeGeo4, ledAmberMat);
  statusBar6.name = 'statusBar6';
  statusBar6.position.set(-0.09, 1.235, 0.44);
  rack1.add(statusBar6);
  const plane57 = new THREE.Mesh(planeGeo5, ledMat);
  plane57.position.set(0.07, 1.235, 0.44);
  rack1.add(plane57);
  const plane58 = new THREE.Mesh(planeGeo5, darkMat);
  plane58.position.set(0.112, 1.235, 0.44);
  rack1.add(plane58);
  const plane59 = new THREE.Mesh(planeGeo5, ledMat);
  plane59.position.set(0.154, 1.235, 0.44);
  rack1.add(plane59);
  const plane60 = new THREE.Mesh(planeGeo5, ledMat);
  plane60.position.set(0.196, 1.235, 0.44);
  rack1.add(plane60);
  const plane61 = new THREE.Mesh(planeGeo5, ledMat);
  plane61.position.set(0.238, 1.235, 0.44);
  rack1.add(plane61);
  const plane62 = new THREE.Mesh(planeGeo6, darkMat);
  plane62.position.set(0, 1.17, 0.44);
  rack1.add(plane62);
  const blade7 = new THREE.Mesh(planeGeo, faceMat);
  blade7.name = 'blade7';
  blade7.position.set(0, 1.395, 0.435);
  rack1.add(blade7);
  const plane64 = new THREE.Mesh(planeGeo2, darkMat);
  plane64.position.set(-0.18, 1.395, 0.44);
  rack1.add(plane64);
  const plane65 = new THREE.Mesh(planeGeo2, darkMat);
  plane65.position.set(-0.06, 1.395, 0.44);
  rack1.add(plane65);
  const plane66 = new THREE.Mesh(planeGeo2, darkMat);
  plane66.position.set(0.06, 1.395, 0.44);
  rack1.add(plane66);
  const plane67 = new THREE.Mesh(planeGeo2, darkMat);
  plane67.position.set(0.18, 1.395, 0.44);
  rack1.add(plane67);
  const plane68 = new THREE.Mesh(planeGeo3, ledMat);
  plane68.position.set(0.2, 1.445, 0.441);
  rack1.add(plane68);
  const blade8 = new THREE.Mesh(planeGeo, faceMat);
  blade8.name = 'blade8';
  blade8.position.set(0, 1.585, 0.435);
  rack1.add(blade8);
  const statusBar8 = new THREE.Mesh(planeGeo4, ledMat);
  statusBar8.name = 'statusBar8';
  statusBar8.position.set(-0.09, 1.615, 0.44);
  rack1.add(statusBar8);
  const plane71 = new THREE.Mesh(planeGeo5, ledMat);
  plane71.position.set(0.07, 1.615, 0.44);
  rack1.add(plane71);
  const plane72 = new THREE.Mesh(planeGeo5, ledMat);
  plane72.position.set(0.112, 1.615, 0.44);
  rack1.add(plane72);
  const plane73 = new THREE.Mesh(planeGeo5, ledMat);
  plane73.position.set(0.154, 1.615, 0.44);
  rack1.add(plane73);
  const plane74 = new THREE.Mesh(planeGeo5, ledAmberMat);
  plane74.position.set(0.196, 1.615, 0.44);
  rack1.add(plane74);
  const plane75 = new THREE.Mesh(planeGeo5, ledMat);
  plane75.position.set(0.238, 1.615, 0.44);
  rack1.add(plane75);
  const plane76 = new THREE.Mesh(planeGeo6, darkMat);
  plane76.position.set(0, 1.55, 0.44);
  rack1.add(plane76);
  const blade9 = new THREE.Mesh(planeGeo, faceMat);
  blade9.name = 'blade9';
  blade9.position.set(0, 1.775, 0.435);
  rack1.add(blade9);
  const statusBar9 = new THREE.Mesh(planeGeo4, ledAmberMat);
  statusBar9.name = 'statusBar9';
  statusBar9.position.set(-0.09, 1.805, 0.44);
  rack1.add(statusBar9);
  const plane79 = new THREE.Mesh(planeGeo5, ledMat);
  plane79.position.set(0.07, 1.805, 0.44);
  rack1.add(plane79);
  const plane80 = new THREE.Mesh(planeGeo5, ledMat);
  plane80.position.set(0.112, 1.805, 0.44);
  rack1.add(plane80);
  const plane81 = new THREE.Mesh(planeGeo5, ledMat);
  plane81.position.set(0.154, 1.805, 0.44);
  rack1.add(plane81);
  const plane82 = new THREE.Mesh(planeGeo5, ledMat);
  plane82.position.set(0.196, 1.805, 0.44);
  rack1.add(plane82);
  const plane83 = new THREE.Mesh(planeGeo5, darkMat);
  plane83.position.set(0.238, 1.805, 0.44);
  rack1.add(plane83);
  const plane84 = new THREE.Mesh(planeGeo6, darkMat);
  plane84.position.set(0, 1.74, 0.44);
  rack1.add(plane84);
  const rack2 = new THREE.Group();
  rack2.name = 'rack2';
  rack2.position.set(0.31, 0, 0);
  root.add(rack2);
  const plinth2 = new THREE.Mesh(boxGeo, darkMat);
  plinth2.name = 'plinth';
  plinth2.position.set(0, 0.05, 0);
  rack2.add(plinth2);
  const sideL2 = new THREE.Mesh(boxGeo2, shellMat);
  sideL2.name = 'sideL';
  sideL2.position.set(-0.29, 1.075, 0);
  rack2.add(sideL2);
  const edgeGlowL2 = new THREE.Mesh(boxGeo3, ledMat);
  edgeGlowL2.name = 'edgeGlowL';
  edgeGlowL2.position.set(-0.275, 1.075, 0.48);
  rack2.add(edgeGlowL2);
  const sideR2 = new THREE.Mesh(boxGeo2, shellMat);
  sideR2.name = 'sideR';
  sideR2.position.set(0.29, 1.075, 0);
  rack2.add(sideR2);
  const edgeGlowR2 = new THREE.Mesh(boxGeo3, ledMat);
  edgeGlowR2.name = 'edgeGlowR';
  edgeGlowR2.position.set(0.275, 1.075, 0.48);
  rack2.add(edgeGlowR2);
  const topCap2 = new THREE.Mesh(boxGeo4, shellMat);
  topCap2.name = 'topCap';
  topCap2.position.set(0, 2.01, 0);
  rack2.add(topCap2);
  const chassis2 = new THREE.Mesh(boxGeo5, darkMat);
  chassis2.name = 'chassis';
  chassis2.position.set(0, 1.035, -0.04);
  rack2.add(chassis2);
  const topVent2 = new THREE.Mesh(boxGeo6, faceMat);
  topVent2.name = 'topVent';
  topVent2.position.set(0, 2.055, -0.05);
  rack2.add(topVent2);
  const servicePanelR = new THREE.Mesh(boxGeo7, darkMat);
  servicePanelR.name = 'servicePanelR';
  servicePanelR.position.set(0.316, 1, -0.06);
  rack2.add(servicePanelR);
  const box95 = new THREE.Mesh(boxGeo8, faceMat);
  box95.position.set(0.318, 0.52, -0.06);
  rack2.add(box95);
  const box96 = new THREE.Mesh(boxGeo8, faceMat);
  box96.position.set(0.318, 0.595, -0.06);
  rack2.add(box96);
  const box97 = new THREE.Mesh(boxGeo8, faceMat);
  box97.position.set(0.318, 0.67, -0.06);
  rack2.add(box97);
  const box98 = new THREE.Mesh(boxGeo8, faceMat);
  box98.position.set(0.318, 0.745, -0.06);
  rack2.add(box98);
  const box99 = new THREE.Mesh(boxGeo8, faceMat);
  box99.position.set(0.318, 0.82, -0.06);
  rack2.add(box99);
  const box100 = new THREE.Mesh(boxGeo8, faceMat);
  box100.position.set(0.318, 0.895, -0.06);
  rack2.add(box100);
  const sideTagR = new THREE.Mesh(boxGeo9, ledMat);
  sideTagR.name = 'sideTagR';
  sideTagR.position.set(0.318, 1.36, 0.12);
  rack2.add(sideTagR);
  const box102 = new THREE.Mesh(boxGeo9, ledAmberMat);
  box102.position.set(0.318, 1.36, 0.04);
  rack2.add(box102);
  const blade12 = new THREE.Mesh(planeGeo, faceMat);
  blade12.name = 'blade1';
  blade12.position.set(0, 0.255, 0.435);
  rack2.add(blade12);
  const plane104 = new THREE.Mesh(planeGeo2, darkMat);
  plane104.position.set(-0.18, 0.255, 0.44);
  rack2.add(plane104);
  const plane105 = new THREE.Mesh(planeGeo2, darkMat);
  plane105.position.set(-0.06, 0.255, 0.44);
  rack2.add(plane105);
  const plane106 = new THREE.Mesh(planeGeo2, darkMat);
  plane106.position.set(0.06, 0.255, 0.44);
  rack2.add(plane106);
  const plane107 = new THREE.Mesh(planeGeo2, darkMat);
  plane107.position.set(0.18, 0.255, 0.44);
  rack2.add(plane107);
  const plane108 = new THREE.Mesh(planeGeo3, ledMat);
  plane108.position.set(0.2, 0.305, 0.441);
  rack2.add(plane108);
  const blade22 = new THREE.Mesh(planeGeo, faceMat);
  blade22.name = 'blade2';
  blade22.position.set(0, 0.445, 0.435);
  rack2.add(blade22);
  const statusBar22 = new THREE.Mesh(planeGeo4, ledMat);
  statusBar22.name = 'statusBar2';
  statusBar22.position.set(-0.09, 0.475, 0.44);
  rack2.add(statusBar22);
  const plane111 = new THREE.Mesh(planeGeo5, darkMat);
  plane111.position.set(0.07, 0.475, 0.44);
  rack2.add(plane111);
  const plane112 = new THREE.Mesh(planeGeo5, ledMat);
  plane112.position.set(0.112, 0.475, 0.44);
  rack2.add(plane112);
  const plane113 = new THREE.Mesh(planeGeo5, ledMat);
  plane113.position.set(0.154, 0.475, 0.44);
  rack2.add(plane113);
  const plane114 = new THREE.Mesh(planeGeo5, darkMat);
  plane114.position.set(0.196, 0.475, 0.44);
  rack2.add(plane114);
  const plane115 = new THREE.Mesh(planeGeo5, ledAmberMat);
  plane115.position.set(0.238, 0.475, 0.44);
  rack2.add(plane115);
  const plane116 = new THREE.Mesh(planeGeo6, darkMat);
  plane116.position.set(0, 0.41, 0.44);
  rack2.add(plane116);
  const blade32 = new THREE.Mesh(planeGeo, faceMat);
  blade32.name = 'blade3';
  blade32.position.set(0, 0.635, 0.435);
  rack2.add(blade32);
  const statusBar32 = new THREE.Mesh(planeGeo4, ledMat);
  statusBar32.name = 'statusBar3';
  statusBar32.position.set(-0.09, 0.665, 0.44);
  rack2.add(statusBar32);
  const plane119 = new THREE.Mesh(planeGeo5, ledMat);
  plane119.position.set(0.07, 0.665, 0.44);
  rack2.add(plane119);
  const plane120 = new THREE.Mesh(planeGeo5, ledMat);
  plane120.position.set(0.112, 0.665, 0.44);
  rack2.add(plane120);
  const plane121 = new THREE.Mesh(planeGeo5, ledMat);
  plane121.position.set(0.154, 0.665, 0.44);
  rack2.add(plane121);
  const plane122 = new THREE.Mesh(planeGeo5, ledMat);
  plane122.position.set(0.196, 0.665, 0.44);
  rack2.add(plane122);
  const plane123 = new THREE.Mesh(planeGeo5, darkMat);
  plane123.position.set(0.238, 0.665, 0.44);
  rack2.add(plane123);
  const plane124 = new THREE.Mesh(planeGeo6, darkMat);
  plane124.position.set(0, 0.6, 0.44);
  rack2.add(plane124);
  const blade42 = new THREE.Mesh(planeGeo, faceMat);
  blade42.name = 'blade4';
  blade42.position.set(0, 0.825, 0.435);
  rack2.add(blade42);
  const plane126 = new THREE.Mesh(planeGeo2, darkMat);
  plane126.position.set(-0.18, 0.825, 0.44);
  rack2.add(plane126);
  const plane127 = new THREE.Mesh(planeGeo2, darkMat);
  plane127.position.set(-0.06, 0.825, 0.44);
  rack2.add(plane127);
  const plane128 = new THREE.Mesh(planeGeo2, darkMat);
  plane128.position.set(0.06, 0.825, 0.44);
  rack2.add(plane128);
  const plane129 = new THREE.Mesh(planeGeo2, darkMat);
  plane129.position.set(0.18, 0.825, 0.44);
  rack2.add(plane129);
  const plane130 = new THREE.Mesh(planeGeo3, ledMat);
  plane130.position.set(0.2, 0.875, 0.441);
  rack2.add(plane130);
  const blade52 = new THREE.Mesh(planeGeo, faceMat);
  blade52.name = 'blade5';
  blade52.position.set(0, 1.015, 0.435);
  rack2.add(blade52);
  const statusBar52 = new THREE.Mesh(planeGeo4, ledMat);
  statusBar52.name = 'statusBar5';
  statusBar52.position.set(-0.09, 1.045, 0.44);
  rack2.add(statusBar52);
  const plane133 = new THREE.Mesh(planeGeo5, ledRedMat);
  plane133.position.set(0.07, 1.045, 0.44);
  rack2.add(plane133);
  const plane134 = new THREE.Mesh(planeGeo5, ledMat);
  plane134.position.set(0.112, 1.045, 0.44);
  rack2.add(plane134);
  const plane135 = new THREE.Mesh(planeGeo5, ledRedMat);
  plane135.position.set(0.154, 1.045, 0.44);
  rack2.add(plane135);
  const plane136 = new THREE.Mesh(planeGeo5, ledMat);
  plane136.position.set(0.196, 1.045, 0.44);
  rack2.add(plane136);
  const plane137 = new THREE.Mesh(planeGeo5, ledRedMat);
  plane137.position.set(0.238, 1.045, 0.44);
  rack2.add(plane137);
  const plane138 = new THREE.Mesh(planeGeo6, darkMat);
  plane138.position.set(0, 0.98, 0.44);
  rack2.add(plane138);
  const blade62 = new THREE.Mesh(planeGeo, faceMat);
  blade62.name = 'blade6';
  blade62.position.set(0, 1.205, 0.435);
  rack2.add(blade62);
  const statusBar62 = new THREE.Mesh(planeGeo4, ledMat);
  statusBar62.name = 'statusBar6';
  statusBar62.position.set(-0.09, 1.235, 0.44);
  rack2.add(statusBar62);
  const plane141 = new THREE.Mesh(planeGeo5, ledMat);
  plane141.position.set(0.07, 1.235, 0.44);
  rack2.add(plane141);
  const plane142 = new THREE.Mesh(planeGeo5, ledMat);
  plane142.position.set(0.112, 1.235, 0.44);
  rack2.add(plane142);
  const plane143 = new THREE.Mesh(planeGeo5, ledMat);
  plane143.position.set(0.154, 1.235, 0.44);
  rack2.add(plane143);
  const plane144 = new THREE.Mesh(planeGeo5, ledMat);
  plane144.position.set(0.196, 1.235, 0.44);
  rack2.add(plane144);
  const plane145 = new THREE.Mesh(planeGeo5, darkMat);
  plane145.position.set(0.238, 1.235, 0.44);
  rack2.add(plane145);
  const plane146 = new THREE.Mesh(planeGeo6, darkMat);
  plane146.position.set(0, 1.17, 0.44);
  rack2.add(plane146);
  const blade72 = new THREE.Mesh(planeGeo, faceMat);
  blade72.name = 'blade7';
  blade72.position.set(0, 1.395, 0.435);
  rack2.add(blade72);
  const plane148 = new THREE.Mesh(planeGeo2, darkMat);
  plane148.position.set(-0.18, 1.395, 0.44);
  rack2.add(plane148);
  const plane149 = new THREE.Mesh(planeGeo2, darkMat);
  plane149.position.set(-0.06, 1.395, 0.44);
  rack2.add(plane149);
  const plane150 = new THREE.Mesh(planeGeo2, darkMat);
  plane150.position.set(0.06, 1.395, 0.44);
  rack2.add(plane150);
  const plane151 = new THREE.Mesh(planeGeo2, darkMat);
  plane151.position.set(0.18, 1.395, 0.44);
  rack2.add(plane151);
  const plane152 = new THREE.Mesh(planeGeo3, ledAmberMat);
  plane152.position.set(0.2, 1.445, 0.441);
  rack2.add(plane152);
  const blade82 = new THREE.Mesh(planeGeo, faceMat);
  blade82.name = 'blade8';
  blade82.position.set(0, 1.585, 0.435);
  rack2.add(blade82);
  const statusBar82 = new THREE.Mesh(planeGeo4, ledMat);
  statusBar82.name = 'statusBar8';
  statusBar82.position.set(-0.09, 1.615, 0.44);
  rack2.add(statusBar82);
  const plane155 = new THREE.Mesh(planeGeo5, darkMat);
  plane155.position.set(0.07, 1.615, 0.44);
  rack2.add(plane155);
  const plane156 = new THREE.Mesh(planeGeo5, ledRedMat);
  plane156.position.set(0.112, 1.615, 0.44);
  rack2.add(plane156);
  const plane157 = new THREE.Mesh(planeGeo5, ledMat);
  plane157.position.set(0.154, 1.615, 0.44);
  rack2.add(plane157);
  const plane158 = new THREE.Mesh(planeGeo5, darkMat);
  plane158.position.set(0.196, 1.615, 0.44);
  rack2.add(plane158);
  const plane159 = new THREE.Mesh(planeGeo5, ledMat);
  plane159.position.set(0.238, 1.615, 0.44);
  rack2.add(plane159);
  const plane160 = new THREE.Mesh(planeGeo6, darkMat);
  plane160.position.set(0, 1.55, 0.44);
  rack2.add(plane160);
  const blade92 = new THREE.Mesh(planeGeo, faceMat);
  blade92.name = 'blade9';
  blade92.position.set(0, 1.775, 0.435);
  rack2.add(blade92);
  const statusBar92 = new THREE.Mesh(planeGeo4, ledMat);
  statusBar92.name = 'statusBar9';
  statusBar92.position.set(-0.09, 1.805, 0.44);
  rack2.add(statusBar92);
  const plane163 = new THREE.Mesh(planeGeo5, ledAmberMat);
  plane163.position.set(0.07, 1.805, 0.44);
  rack2.add(plane163);
  const plane164 = new THREE.Mesh(planeGeo5, ledMat);
  plane164.position.set(0.112, 1.805, 0.44);
  rack2.add(plane164);
  const plane165 = new THREE.Mesh(planeGeo5, ledRedMat);
  plane165.position.set(0.154, 1.805, 0.44);
  rack2.add(plane165);
  const plane166 = new THREE.Mesh(planeGeo5, darkMat);
  plane166.position.set(0.196, 1.805, 0.44);
  rack2.add(plane166);
  const plane167 = new THREE.Mesh(planeGeo5, ledAmberMat);
  plane167.position.set(0.238, 1.805, 0.44);
  rack2.add(plane167);
  const plane168 = new THREE.Mesh(planeGeo6, darkMat);
  plane168.position.set(0, 1.74, 0.44);
  rack2.add(plane168);
  const cableTray = new THREE.Group();
  cableTray.name = 'cableTray';
  root.add(cableTray);
  const trayBase = new THREE.Mesh(new THREE.BoxGeometry(1.34, 0.02, 0.32), metalMat);
  trayBase.name = 'trayBase';
  trayBase.position.set(0, 2.29, -0.12);
  cableTray.add(trayBase);
  const trayBack = new THREE.Mesh(boxGeo10, metalMat);
  trayBack.name = 'trayBack';
  trayBack.position.set(0, 2.33, -0.27);
  cableTray.add(trayBack);
  const trayFront = new THREE.Mesh(boxGeo10, metalMat);
  trayFront.name = 'trayFront';
  trayFront.position.set(0, 2.33, 0.03);
  cableTray.add(trayFront);
  const trunkA = new THREE.Mesh(tube([[-0.65, 2.325, -0.18], [0.65, 2.325, -0.18]], 0.025, 1, 6), cableAMat);
  trunkA.name = 'trunkA';
  cableTray.add(trunkA);
  const trunkB = new THREE.Mesh(tube([[-0.65, 2.325, -0.1], [0.65, 2.325, -0.1]], 0.025, 1, 6), cableBMat);
  trunkB.name = 'trunkB';
  cableTray.add(trunkB);
  const trunkC = new THREE.Mesh(tube([[-0.65, 2.32, -0.03], [0.65, 2.32, -0.03]], 0.02, 1, 6), darkMat);
  trunkC.name = 'trunkC';
  cableTray.add(trunkC);
  const post1L = new THREE.Mesh(boxGeo11, metalMat);
  post1L.name = 'post1L';
  post1L.position.set(-0.53, 2.17, -0.25);
  cableTray.add(post1L);
  const post1R = new THREE.Mesh(boxGeo11, metalMat);
  post1R.name = 'post1R';
  post1R.position.set(-0.09, 2.17, -0.25);
  cableTray.add(post1R);
  const drop11 = new THREE.Mesh(tube([[-0.41, 2.31, -0.18], [-0.39, 2.17, -0.2], [-0.41, 2.06, -0.22]], 0.018, 4, 5), cableAMat);
  drop11.name = 'drop1_1';
  cableTray.add(drop11);
  const drop12 = new THREE.Mesh(tube([[-0.27, 2.31, -0.1], [-0.25, 2.17, -0.12], [-0.27, 2.06, -0.14]], 0.018, 4, 5), cableBMat);
  drop12.name = 'drop1_2';
  cableTray.add(drop12);
  const drop13 = new THREE.Mesh(tube([[-0.17, 2.31, -0.03], [-0.15, 2.17, -0.05], [-0.17, 2.06, -0.07]], 0.018, 4, 5), darkMat);
  drop13.name = 'drop1_3';
  cableTray.add(drop13);
  const post2L = new THREE.Mesh(boxGeo11, metalMat);
  post2L.name = 'post2L';
  post2L.position.set(0.09, 2.17, -0.25);
  cableTray.add(post2L);
  const post2R = new THREE.Mesh(boxGeo11, metalMat);
  post2R.name = 'post2R';
  post2R.position.set(0.53, 2.17, -0.25);
  cableTray.add(post2R);
  const drop21 = new THREE.Mesh(tube([[0.21, 2.31, -0.18], [0.23, 2.17, -0.2], [0.21, 2.06, -0.22]], 0.018, 4, 5), cableAMat);
  drop21.name = 'drop2_1';
  cableTray.add(drop21);
  const drop22 = new THREE.Mesh(tube([[0.35, 2.31, -0.1], [0.37, 2.17, -0.12], [0.35, 2.06, -0.14]], 0.018, 4, 5), cableBMat);
  drop22.name = 'drop2_2';
  cableTray.add(drop22);
  const drop23 = new THREE.Mesh(tube([[0.45, 2.31, -0.03], [0.47, 2.17, -0.05], [0.45, 2.06, -0.07]], 0.018, 4, 5), darkMat);
  drop23.name = 'drop2_3';
  cableTray.add(drop23);

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

export default createServerRack;

Notes et commentaires

—
Aucune note pour l’instant — soyez le premier.
5
0
4
0
3
0
2
0
1
0

Connectez-vous pour noter et commenter.

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