1 mil tris1,34 × 2,37 × 0,97 m
Use no código
Fazer remix no editorserver-rack.js · 681 linhas
Módulo ES autocontido — depende apenas do three. Chame a factory e adicione o grupo à sua cena.
/**
* 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;
Avaliações e comentários
0 comentário
Nenhum comentário ainda. Conte como você usou este modelo ou o que poderia melhorar.
Modelos relacionados
Mesma categoria ou tags parecidas









