1224 三角面2.27 × 7.06 × 2.09 m
在代码中使用
在编辑器中改编scaffold.js · 515 行
自包含的 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;
评分与评论
0 条评论
暂无评论。分享一下你是如何使用这个模型的,或者有哪些可以改进的地方。
相关模型
同一分类或相似标签









