Codels
1224 三角面2.27 × 7.06 × 2.09 m

在代码中使用

在编辑器中改编
自包含的 ES 模块,仅依赖 three。调用工厂函数,然后把返回的 group 添加到场景中。
/**
 * Scaffold Tower — Codels 3D model library
 * License: CC0-1.0 · Units: meters · Y-up · Front: +Z · Origin: center of the base (y = 0)
 * Triangles: 1,224 · Size (W × H × D): 2.27 × 7.06 × 2.09 m
 *
 * Usage:
 *   import { createScaffold } from './scaffold.js';
 *   
 *   const model = createScaffold();
 *   model.position.set(0, 0, 0);
 *   scene.add(model);
 */
import * as THREE from 'three';

const deg = THREE.MathUtils.degToRad;

export function createScaffold() {
  const root = new THREE.Group();
  root.name = 'Scaffold';

  // Materials
  const tubeMat = new THREE.MeshStandardMaterial({ name: 'tube', color: 0xa3abb3, roughness: 0.45, metalness: 0.6, flatShading: true });
  const couplerMat = new THREE.MeshStandardMaterial({ name: 'coupler', color: 0x4b5057, roughness: 0.5, metalness: 0.6, flatShading: true });
  const plankMat = new THREE.MeshStandardMaterial({ name: 'plank', color: 0xc79d5f, roughness: 0.9, flatShading: true });
  const plank2Mat = new THREE.MeshStandardMaterial({ name: 'plank2', color: 0xae8550, roughness: 0.9, flatShading: true });
  const toeMat = new THREE.MeshStandardMaterial({ name: 'toe', color: 0xe08a2e, roughness: 0.7, flatShading: true });
  const ladderMat = new THREE.MeshStandardMaterial({ name: 'ladder', color: 0xd2b46a, roughness: 0.8, flatShading: true });
  const ropeMat = new THREE.MeshStandardMaterial({ name: 'rope', color: 0xd8c79d, roughness: 1, flatShading: true });

  // Shared geometries
  const boxGeo = new THREE.BoxGeometry(0.24, 0.04, 1.3);
  const boxGeo2 = new THREE.BoxGeometry(0.15, 0.012, 0.15);
  const cylinderGeo = new THREE.CylinderGeometry(0.03, 0.03, 6.998, 6, 1, true);
  const cylinderGeo2 = new THREE.CylinderGeometry(0.027, 0.027, 0.012, 6);
  const cylinderGeo3 = new THREE.CylinderGeometry(0.03, 0.03, 2.06, 6, 1, true);
  const boxGeo3 = new THREE.BoxGeometry(0.08, 0.08, 0.08);
  const cylinderGeo4 = new THREE.CylinderGeometry(0.03, 0.03, 1.06, 6, 1, true);
  const cylinderGeo5 = new THREE.CylinderGeometry(0.03, 0.03, 2.6575, 6, 1, true);
  const cylinderGeo6 = new THREE.CylinderGeometry(0.03, 0.03, 2.0156, 6, 1, true);
  const boxGeo4 = new THREE.BoxGeometry(2, 0.15, 0.025);
  const boxGeo5 = new THREE.BoxGeometry(0.025, 0.15, 1);
  const boxGeo6 = new THREE.BoxGeometry(0.05, 7, 0.06);
  const cylinderGeo7 = new THREE.CylinderGeometry(0.018, 0.018, 0.4, 4, 1, true);
  const boxGeo7 = new THREE.BoxGeometry(0.12, 0.05, 0.05);

  // Parts
  const soleBoard = new THREE.Mesh(boxGeo, plank2Mat);
  soleBoard.name = 'soleBoard';
  soleBoard.position.set(-1, 0.02, 0);
  root.add(soleBoard);
  const basePlate = new THREE.Mesh(boxGeo2, couplerMat);
  basePlate.name = 'basePlate';
  basePlate.position.set(-1, 0.046, -0.5);
  root.add(basePlate);
  const standard = new THREE.Mesh(cylinderGeo, tubeMat);
  standard.name = 'standard';
  standard.position.set(-1, 3.551, -0.5);
  root.add(standard);
  const tubeCap = new THREE.Mesh(cylinderGeo2, couplerMat);
  tubeCap.name = 'tubeCap';
  tubeCap.position.set(-1, 7.056, -0.5);
  root.add(tubeCap);
  const basePlate2 = new THREE.Mesh(boxGeo2, couplerMat);
  basePlate2.name = 'basePlate';
  basePlate2.position.set(-1, 0.046, 0.5);
  root.add(basePlate2);
  const standard2 = new THREE.Mesh(cylinderGeo, tubeMat);
  standard2.name = 'standard';
  standard2.position.set(-1, 3.551, 0.5);
  root.add(standard2);
  const tubeCap2 = new THREE.Mesh(cylinderGeo2, couplerMat);
  tubeCap2.name = 'tubeCap';
  tubeCap2.position.set(-1, 7.056, 0.5);
  root.add(tubeCap2);
  const soleBoard2 = new THREE.Mesh(boxGeo, plank2Mat);
  soleBoard2.name = 'soleBoard';
  soleBoard2.position.set(1, 0.02, 0);
  root.add(soleBoard2);
  const basePlate3 = new THREE.Mesh(boxGeo2, couplerMat);
  basePlate3.name = 'basePlate';
  basePlate3.position.set(1, 0.046, -0.5);
  root.add(basePlate3);
  const standard3 = new THREE.Mesh(cylinderGeo, tubeMat);
  standard3.name = 'standard';
  standard3.position.set(1, 3.551, -0.5);
  root.add(standard3);
  const tubeCap3 = new THREE.Mesh(cylinderGeo2, couplerMat);
  tubeCap3.name = 'tubeCap';
  tubeCap3.position.set(1, 7.056, -0.5);
  root.add(tubeCap3);
  const basePlate4 = new THREE.Mesh(boxGeo2, couplerMat);
  basePlate4.name = 'basePlate';
  basePlate4.position.set(1, 0.046, 0.5);
  root.add(basePlate4);
  const standard4 = new THREE.Mesh(cylinderGeo, tubeMat);
  standard4.name = 'standard';
  standard4.position.set(1, 3.551, 0.5);
  root.add(standard4);
  const tubeCap4 = new THREE.Mesh(cylinderGeo2, couplerMat);
  tubeCap4.name = 'tubeCap';
  tubeCap4.position.set(1, 7.056, 0.5);
  root.add(tubeCap4);
  const ledger = new THREE.Mesh(cylinderGeo3, tubeMat);
  ledger.name = 'ledger';
  ledger.position.set(0, 2, -0.5);
  ledger.rotation.set(0, 0, deg(-90));
  root.add(ledger);
  const guardrail = new THREE.Mesh(cylinderGeo3, tubeMat);
  guardrail.name = 'guardrail';
  guardrail.position.set(0, 3, -0.5);
  guardrail.rotation.set(0, 0, deg(-90));
  root.add(guardrail);
  const ledger2 = new THREE.Mesh(cylinderGeo3, tubeMat);
  ledger2.name = 'ledger';
  ledger2.position.set(0, 2, 0.5);
  ledger2.rotation.set(0, 0, deg(-90));
  root.add(ledger2);
  const guardrail2 = new THREE.Mesh(cylinderGeo3, tubeMat);
  guardrail2.name = 'guardrail';
  guardrail2.position.set(0, 3, 0.5);
  guardrail2.rotation.set(0, 0, deg(-90));
  root.add(guardrail2);
  const coupler = new THREE.Mesh(boxGeo3, couplerMat);
  coupler.name = 'coupler';
  coupler.position.set(-1, 2, 0.5);
  root.add(coupler);
  const coupler2 = new THREE.Mesh(boxGeo3, couplerMat);
  coupler2.name = 'coupler';
  coupler2.position.set(1, 2, 0.5);
  root.add(coupler2);
  const transom = new THREE.Mesh(cylinderGeo4, tubeMat);
  transom.name = 'transom';
  transom.position.set(-1, 1.94, 0);
  transom.rotation.set(deg(90), 0, 0);
  root.add(transom);
  const transom2 = new THREE.Mesh(cylinderGeo4, tubeMat);
  transom2.name = 'transom';
  transom2.position.set(1, 1.94, 0);
  transom2.rotation.set(deg(90), 0, 0);
  root.add(transom2);
  const diagonal = new THREE.Mesh(cylinderGeo5, tubeMat);
  diagonal.name = 'diagonal';
  diagonal.position.set(0, 1.025, -0.55);
  diagonal.rotation.set(0, 0, deg(-131.1859));
  root.add(diagonal);
  const endDiagonal = new THREE.Mesh(cylinderGeo6, tubeMat);
  endDiagonal.name = 'endDiagonal';
  endDiagonal.position.set(1.05, 1.025, 0);
  endDiagonal.rotation.set(deg(29.7449), 0, 0);
  root.add(endDiagonal);
  const plank = new THREE.Mesh(new THREE.BoxGeometry(2.0474, 0.045, 0.3183), plank2Mat);
  plank.name = 'plank';
  plank.position.set(0.0079, 2.0225, -0.3333);
  plank.rotation.set(0, deg(-0.2723), 0);
  root.add(plank);
  const plank2 = new THREE.Mesh(new THREE.BoxGeometry(2.0659, 0.045, 0.3183), plank2Mat);
  plank2.name = 'plank';
  plank2.position.set(0.0007, 2.0225, 0);
  plank2.rotation.set(0, deg(0.6348), 0);
  root.add(plank2);
  const plank3 = new THREE.Mesh(new THREE.BoxGeometry(2.1061, 0.045, 0.3183), plank2Mat);
  plank3.name = 'plank';
  plank3.position.set(0.0125, 2.0225, 0.3333);
  plank3.rotation.set(0, deg(-0.4078), 0);
  root.add(plank3);
  const ledger3 = new THREE.Mesh(cylinderGeo3, tubeMat);
  ledger3.name = 'ledger';
  ledger3.position.set(0, 4, -0.5);
  ledger3.rotation.set(0, 0, deg(-90));
  root.add(ledger3);
  const guardrail3 = new THREE.Mesh(cylinderGeo3, tubeMat);
  guardrail3.name = 'guardrail';
  guardrail3.position.set(0, 5, -0.5);
  guardrail3.rotation.set(0, 0, deg(-90));
  root.add(guardrail3);
  const ledger4 = new THREE.Mesh(cylinderGeo3, tubeMat);
  ledger4.name = 'ledger';
  ledger4.position.set(0, 4, 0.5);
  ledger4.rotation.set(0, 0, deg(-90));
  root.add(ledger4);
  const guardrail4 = new THREE.Mesh(cylinderGeo3, tubeMat);
  guardrail4.name = 'guardrail';
  guardrail4.position.set(0, 5, 0.5);
  guardrail4.rotation.set(0, 0, deg(-90));
  root.add(guardrail4);
  const coupler3 = new THREE.Mesh(boxGeo3, couplerMat);
  coupler3.name = 'coupler';
  coupler3.position.set(-1, 4, 0.5);
  root.add(coupler3);
  const coupler4 = new THREE.Mesh(boxGeo3, couplerMat);
  coupler4.name = 'coupler';
  coupler4.position.set(1, 4, 0.5);
  root.add(coupler4);
  const transom3 = new THREE.Mesh(cylinderGeo4, tubeMat);
  transom3.name = 'transom';
  transom3.position.set(-1, 3.94, 0);
  transom3.rotation.set(deg(90), 0, 0);
  root.add(transom3);
  const transom4 = new THREE.Mesh(cylinderGeo4, tubeMat);
  transom4.name = 'transom';
  transom4.position.set(1, 3.94, 0);
  transom4.rotation.set(deg(90), 0, 0);
  root.add(transom4);
  const diagonal2 = new THREE.Mesh(cylinderGeo5, tubeMat);
  diagonal2.name = 'diagonal';
  diagonal2.position.set(0, 3.025, -0.55);
  diagonal2.rotation.set(0, 0, deg(-48.8141));
  root.add(diagonal2);
  const endDiagonal2 = new THREE.Mesh(cylinderGeo6, tubeMat);
  endDiagonal2.name = 'endDiagonal';
  endDiagonal2.position.set(1.05, 3.025, 0);
  endDiagonal2.rotation.set(deg(150.2551), 0, 0);
  root.add(endDiagonal2);
  const plank4 = new THREE.Mesh(new THREE.BoxGeometry(2.0469, 0.045, 0.3183), plankMat);
  plank4.name = 'plank';
  plank4.position.set(0.0204, 4.0225, -0.3333);
  plank4.rotation.set(0, deg(-0.0389), 0);
  root.add(plank4);
  const plank5 = new THREE.Mesh(new THREE.BoxGeometry(2.0993, 0.045, 0.3183), plank2Mat);
  plank5.name = 'plank';
  plank5.position.set(-0.0029, 4.0225, 0);
  plank5.rotation.set(0, deg(0.2173), 0);
  root.add(plank5);
  const plank6 = new THREE.Mesh(new THREE.BoxGeometry(2.1188, 0.045, 0.3183), plank2Mat);
  plank6.name = 'plank';
  plank6.position.set(0.0208, 4.0225, 0.3333);
  plank6.rotation.set(0, deg(-0.3777), 0);
  root.add(plank6);
  const ledger5 = new THREE.Mesh(cylinderGeo3, tubeMat);
  ledger5.name = 'ledger';
  ledger5.position.set(0, 6, -0.5);
  ledger5.rotation.set(0, 0, deg(-90));
  root.add(ledger5);
  const guardrail5 = new THREE.Mesh(cylinderGeo3, tubeMat);
  guardrail5.name = 'guardrail';
  guardrail5.position.set(0, 7, -0.5);
  guardrail5.rotation.set(0, 0, deg(-90));
  root.add(guardrail5);
  const midRail = new THREE.Mesh(cylinderGeo3, tubeMat);
  midRail.name = 'midRail';
  midRail.position.set(0, 6.5, -0.5);
  midRail.rotation.set(0, 0, deg(-90));
  root.add(midRail);
  const ledger6 = new THREE.Mesh(cylinderGeo3, tubeMat);
  ledger6.name = 'ledger';
  ledger6.position.set(0, 6, 0.5);
  ledger6.rotation.set(0, 0, deg(-90));
  root.add(ledger6);
  const guardrail6 = new THREE.Mesh(cylinderGeo3, tubeMat);
  guardrail6.name = 'guardrail';
  guardrail6.position.set(0, 7, 0.5);
  guardrail6.rotation.set(0, 0, deg(-90));
  root.add(guardrail6);
  const midRail2 = new THREE.Mesh(cylinderGeo3, tubeMat);
  midRail2.name = 'midRail';
  midRail2.position.set(0, 6.5, 0.5);
  midRail2.rotation.set(0, 0, deg(-90));
  root.add(midRail2);
  const coupler5 = new THREE.Mesh(boxGeo3, couplerMat);
  coupler5.name = 'coupler';
  coupler5.position.set(-1, 6, 0.5);
  root.add(coupler5);
  const coupler6 = new THREE.Mesh(boxGeo3, couplerMat);
  coupler6.name = 'coupler';
  coupler6.position.set(1, 6, 0.5);
  root.add(coupler6);
  const transom5 = new THREE.Mesh(cylinderGeo4, tubeMat);
  transom5.name = 'transom';
  transom5.position.set(-1, 5.94, 0);
  transom5.rotation.set(deg(90), 0, 0);
  root.add(transom5);
  const transom6 = new THREE.Mesh(cylinderGeo4, tubeMat);
  transom6.name = 'transom';
  transom6.position.set(1, 5.94, 0);
  transom6.rotation.set(deg(90), 0, 0);
  root.add(transom6);
  const diagonal3 = new THREE.Mesh(cylinderGeo5, tubeMat);
  diagonal3.name = 'diagonal';
  diagonal3.position.set(0, 5.025, -0.55);
  diagonal3.rotation.set(0, 0, deg(-131.1859));
  root.add(diagonal3);
  const endDiagonal3 = new THREE.Mesh(cylinderGeo6, tubeMat);
  endDiagonal3.name = 'endDiagonal';
  endDiagonal3.position.set(1.05, 5.025, 0);
  endDiagonal3.rotation.set(deg(29.7449), 0, 0);
  root.add(endDiagonal3);
  const plank7 = new THREE.Mesh(new THREE.BoxGeometry(2.0553, 0.045, 0.3183), plankMat);
  plank7.name = 'plank';
  plank7.position.set(-0.0206, 6.0225, -0.3333);
  plank7.rotation.set(0, deg(0.3014), 0);
  root.add(plank7);
  const plank8 = new THREE.Mesh(new THREE.BoxGeometry(2.0697, 0.045, 0.3183), plankMat);
  plank8.name = 'plank';
  plank8.position.set(0.0268, 6.0225, 0);
  plank8.rotation.set(0, deg(0.3711), 0);
  root.add(plank8);
  const plank9 = new THREE.Mesh(new THREE.BoxGeometry(2.1116, 0.045, 0.3183), plankMat);
  plank9.name = 'plank';
  plank9.position.set(0.0087, 6.0225, 0.3333);
  plank9.rotation.set(0, deg(0.4362), 0);
  root.add(plank9);
  const toeBoard = new THREE.Mesh(boxGeo4, toeMat);
  toeBoard.name = 'toeBoard';
  toeBoard.position.set(0, 6.12, -0.485);
  root.add(toeBoard);
  const toeBoard2 = new THREE.Mesh(boxGeo4, toeMat);
  toeBoard2.name = 'toeBoard';
  toeBoard2.position.set(0, 6.12, 0.485);
  root.add(toeBoard2);
  const toeBoard3 = new THREE.Mesh(boxGeo5, toeMat);
  toeBoard3.name = 'toeBoard';
  toeBoard3.position.set(-0.995, 6.12, 0);
  root.add(toeBoard3);
  const toeBoard4 = new THREE.Mesh(boxGeo5, toeMat);
  toeBoard4.name = 'toeBoard';
  toeBoard4.position.set(0.995, 6.12, 0);
  root.add(toeBoard4);
  const endGuardrail = new THREE.Mesh(cylinderGeo4, tubeMat);
  endGuardrail.name = 'endGuardrail';
  endGuardrail.position.set(-1, 7, 0);
  endGuardrail.rotation.set(deg(90), 0, 0);
  root.add(endGuardrail);
  const endGuardrail2 = new THREE.Mesh(cylinderGeo4, tubeMat);
  endGuardrail2.name = 'endGuardrail';
  endGuardrail2.position.set(1, 7, 0);
  endGuardrail2.rotation.set(deg(90), 0, 0);
  root.add(endGuardrail2);
  const endMidRail = new THREE.Mesh(cylinderGeo4, tubeMat);
  endMidRail.name = 'endMidRail';
  endMidRail.position.set(1, 6.5, 0);
  endMidRail.rotation.set(deg(90), 0, 0);
  root.add(endMidRail);
  const ladderRail = new THREE.Mesh(boxGeo6, ladderMat);
  ladderRail.name = 'ladderRail';
  ladderRail.position.set(-1.09, 3.54, -0.2);
  root.add(ladderRail);
  const ladderRail2 = new THREE.Mesh(boxGeo6, ladderMat);
  ladderRail2.name = 'ladderRail';
  ladderRail2.position.set(-1.09, 3.54, 0.2);
  root.add(ladderRail2);
  const ladderRung = new THREE.Mesh(cylinderGeo7, ladderMat);
  ladderRung.name = 'ladderRung';
  ladderRung.position.set(-1.09, 0.3, 0);
  ladderRung.rotation.set(deg(90), 0, 0);
  root.add(ladderRung);
  const ladderRung2 = new THREE.Mesh(cylinderGeo7, ladderMat);
  ladderRung2.name = 'ladderRung';
  ladderRung2.position.set(-1.09, 0.6, 0);
  ladderRung2.rotation.set(deg(90), 0, 0);
  root.add(ladderRung2);
  const ladderRung3 = new THREE.Mesh(cylinderGeo7, ladderMat);
  ladderRung3.name = 'ladderRung';
  ladderRung3.position.set(-1.09, 0.9, 0);
  ladderRung3.rotation.set(deg(90), 0, 0);
  root.add(ladderRung3);
  const ladderRung4 = new THREE.Mesh(cylinderGeo7, ladderMat);
  ladderRung4.name = 'ladderRung';
  ladderRung4.position.set(-1.09, 1.2, 0);
  ladderRung4.rotation.set(deg(90), 0, 0);
  root.add(ladderRung4);
  const ladderRung5 = new THREE.Mesh(cylinderGeo7, ladderMat);
  ladderRung5.name = 'ladderRung';
  ladderRung5.position.set(-1.09, 1.5, 0);
  ladderRung5.rotation.set(deg(90), 0, 0);
  root.add(ladderRung5);
  const ladderRung6 = new THREE.Mesh(cylinderGeo7, ladderMat);
  ladderRung6.name = 'ladderRung';
  ladderRung6.position.set(-1.09, 1.8, 0);
  ladderRung6.rotation.set(deg(90), 0, 0);
  root.add(ladderRung6);
  const ladderRung7 = new THREE.Mesh(cylinderGeo7, ladderMat);
  ladderRung7.name = 'ladderRung';
  ladderRung7.position.set(-1.09, 2.1, 0);
  ladderRung7.rotation.set(deg(90), 0, 0);
  root.add(ladderRung7);
  const ladderRung8 = new THREE.Mesh(cylinderGeo7, ladderMat);
  ladderRung8.name = 'ladderRung';
  ladderRung8.position.set(-1.09, 2.4, 0);
  ladderRung8.rotation.set(deg(90), 0, 0);
  root.add(ladderRung8);
  const ladderRung9 = new THREE.Mesh(cylinderGeo7, ladderMat);
  ladderRung9.name = 'ladderRung';
  ladderRung9.position.set(-1.09, 2.7, 0);
  ladderRung9.rotation.set(deg(90), 0, 0);
  root.add(ladderRung9);
  const ladderRung10 = new THREE.Mesh(cylinderGeo7, ladderMat);
  ladderRung10.name = 'ladderRung';
  ladderRung10.position.set(-1.09, 3, 0);
  ladderRung10.rotation.set(deg(90), 0, 0);
  root.add(ladderRung10);
  const ladderRung11 = new THREE.Mesh(cylinderGeo7, ladderMat);
  ladderRung11.name = 'ladderRung';
  ladderRung11.position.set(-1.09, 3.3, 0);
  ladderRung11.rotation.set(deg(90), 0, 0);
  root.add(ladderRung11);
  const ladderRung12 = new THREE.Mesh(cylinderGeo7, ladderMat);
  ladderRung12.name = 'ladderRung';
  ladderRung12.position.set(-1.09, 3.6, 0);
  ladderRung12.rotation.set(deg(90), 0, 0);
  root.add(ladderRung12);
  const ladderRung13 = new THREE.Mesh(cylinderGeo7, ladderMat);
  ladderRung13.name = 'ladderRung';
  ladderRung13.position.set(-1.09, 3.9, 0);
  ladderRung13.rotation.set(deg(90), 0, 0);
  root.add(ladderRung13);
  const ladderRung14 = new THREE.Mesh(cylinderGeo7, ladderMat);
  ladderRung14.name = 'ladderRung';
  ladderRung14.position.set(-1.09, 4.2, 0);
  ladderRung14.rotation.set(deg(90), 0, 0);
  root.add(ladderRung14);
  const ladderRung15 = new THREE.Mesh(cylinderGeo7, ladderMat);
  ladderRung15.name = 'ladderRung';
  ladderRung15.position.set(-1.09, 4.5, 0);
  ladderRung15.rotation.set(deg(90), 0, 0);
  root.add(ladderRung15);
  const ladderRung16 = new THREE.Mesh(cylinderGeo7, ladderMat);
  ladderRung16.name = 'ladderRung';
  ladderRung16.position.set(-1.09, 4.8, 0);
  ladderRung16.rotation.set(deg(90), 0, 0);
  root.add(ladderRung16);
  const ladderRung17 = new THREE.Mesh(cylinderGeo7, ladderMat);
  ladderRung17.name = 'ladderRung';
  ladderRung17.position.set(-1.09, 5.1, 0);
  ladderRung17.rotation.set(deg(90), 0, 0);
  root.add(ladderRung17);
  const ladderRung18 = new THREE.Mesh(cylinderGeo7, ladderMat);
  ladderRung18.name = 'ladderRung';
  ladderRung18.position.set(-1.09, 5.4, 0);
  ladderRung18.rotation.set(deg(90), 0, 0);
  root.add(ladderRung18);
  const ladderRung19 = new THREE.Mesh(cylinderGeo7, ladderMat);
  ladderRung19.name = 'ladderRung';
  ladderRung19.position.set(-1.09, 5.7, 0);
  ladderRung19.rotation.set(deg(90), 0, 0);
  root.add(ladderRung19);
  const ladderRung20 = new THREE.Mesh(cylinderGeo7, ladderMat);
  ladderRung20.name = 'ladderRung';
  ladderRung20.position.set(-1.09, 6, 0);
  ladderRung20.rotation.set(deg(90), 0, 0);
  root.add(ladderRung20);
  const ladderRung21 = new THREE.Mesh(cylinderGeo7, ladderMat);
  ladderRung21.name = 'ladderRung';
  ladderRung21.position.set(-1.09, 6.3, 0);
  ladderRung21.rotation.set(deg(90), 0, 0);
  root.add(ladderRung21);
  const ladderRung22 = new THREE.Mesh(cylinderGeo7, ladderMat);
  ladderRung22.name = 'ladderRung';
  ladderRung22.position.set(-1.09, 6.6, 0);
  ladderRung22.rotation.set(deg(90), 0, 0);
  root.add(ladderRung22);
  const ladderRung23 = new THREE.Mesh(cylinderGeo7, ladderMat);
  ladderRung23.name = 'ladderRung';
  ladderRung23.position.set(-1.09, 6.9, 0);
  ladderRung23.rotation.set(deg(90), 0, 0);
  root.add(ladderRung23);
  const ladderClamp = new THREE.Mesh(boxGeo7, couplerMat);
  ladderClamp.name = 'ladderClamp';
  ladderClamp.position.set(-1.04, 1.85, 0);
  root.add(ladderClamp);
  const ladderClamp2 = new THREE.Mesh(boxGeo7, couplerMat);
  ladderClamp2.name = 'ladderClamp';
  ladderClamp2.position.set(-1.04, 3.85, 0);
  root.add(ladderClamp2);
  const ladderClamp3 = new THREE.Mesh(boxGeo7, couplerMat);
  ladderClamp3.name = 'ladderClamp';
  ladderClamp3.position.set(-1.04, 5.85, 0);
  root.add(ladderClamp3);
  const hoistArm = new THREE.Mesh(new THREE.CylinderGeometry(0.03, 0.03, 0.75, 6, 1, true), tubeMat);
  hoistArm.name = 'hoistArm';
  hoistArm.position.set(1, 7, 0.875);
  hoistArm.rotation.set(deg(90), 0, 0);
  root.add(hoistArm);
  const hoistStrut = new THREE.Mesh(new THREE.CylinderGeometry(0.03, 0.03, 0.7341, 6, 1, true), tubeMat);
  hoistStrut.name = 'hoistStrut';
  hoistStrut.position.set(1, 6.69, 0.725);
  hoistStrut.rotation.set(deg(37.8065), 0, 0);
  root.add(hoistStrut);
  const ginWheel = new THREE.Mesh(new THREE.CylinderGeometry(0.11, 0.11, 0.04, 10), couplerMat);
  ginWheel.name = 'ginWheel';
  ginWheel.position.set(1, 6.84, 1.18);
  ginWheel.rotation.set(0, 0, deg(90));
  root.add(ginWheel);
  const wheelHook = new THREE.Mesh(new THREE.BoxGeometry(0.02, 0.16, 0.05), couplerMat);
  wheelHook.name = 'wheelHook';
  wheelHook.position.set(1, 6.94, 1.18);
  root.add(wheelHook);
  const rope = new THREE.Mesh(new THREE.CylinderGeometry(0.008, 0.008, 6.49, 4), ropeMat);
  rope.name = 'rope';
  rope.position.set(1, 3.595, 1.07);
  root.add(rope);
  const rope2 = new THREE.Mesh(new THREE.CylinderGeometry(0.008, 0.008, 4.14, 4), ropeMat);
  rope2.name = 'rope';
  rope2.position.set(1, 4.77, 1.29);
  root.add(rope2);
  const bucket = new THREE.Mesh(new THREE.CylinderGeometry(0.15, 0.12, 0.28, 8), toeMat);
  bucket.name = 'bucket';
  bucket.position.set(1, 2.54, 1.29);
  root.add(bucket);
  const bucketHandle = new THREE.Mesh(new THREE.TorusGeometry(0.14, 0.008, 3, 8, Math.PI), couplerMat);
  bucketHandle.name = 'bucketHandle';
  bucketHandle.position.set(1, 2.68, 1.29);
  bucketHandle.rotation.set(0, deg(90), 0);
  root.add(bucketHandle);

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

export default createScaffold;

评分与评论

—
暂无评分,快来抢先评分吧。
5
0
4
0
3
0
2
0
1
0

登录后即可评分和评论。

0 条评论

暂无评论。分享一下你是如何使用这个模型的,或者有哪些可以改进的地方。

相关模型

同一分类或相似标签