1678 Tris1,46 × 0,74 × 1,39 m
Im Code verwenden
Im Editor remixenspider.js · 382 Zeilen
Eigenständiges ES-Modul — hängt nur von three ab. Ruf die Factory auf und füge die Gruppe deiner Szene hinzu.
/**
* Giant Spider — Codels 3D model library
* License: CC0-1.0 · Units: meters · Y-up · Front: +Z · Origin: center of the base (y = 0)
* Triangles: 1,678 · Size (W × H × D): 1.46 × 0.74 × 1.39 m
*
* Usage:
* import { createSpider } from './spider.js';
*
* const model = createSpider();
* model.position.set(0, 0, 0);
* scene.add(model);
*/
import * as THREE from 'three';
const deg = THREE.MathUtils.degToRad;
export function createSpider() {
const root = new THREE.Group();
root.name = 'Spider';
// Materials
const bodyMat = new THREE.MeshStandardMaterial({ name: 'body', color: 0x3d3448, roughness: 0.6, flatShading: true });
const jointMat = new THREE.MeshStandardMaterial({ name: 'joint', color: 0x605969, roughness: 0.6, flatShading: true });
const markMat = new THREE.MeshStandardMaterial({ name: 'mark', color: 0xe5493b, roughness: 0.55, flatShading: true });
const eyeWhiteMat = new THREE.MeshStandardMaterial({ name: 'eyeWhite', color: 0xfbfaf6, roughness: 0.3, flatShading: true });
const pupilMat = new THREE.MeshStandardMaterial({ name: 'pupil', color: 0x141116, roughness: 0.2, flatShading: true });
const fangMat = new THREE.MeshStandardMaterial({ name: 'fang', color: 0xefe6d2, roughness: 0.5, flatShading: true });
// Shared geometries
const sphereGeo = new THREE.SphereGeometry(0.055, 8, 3);
const sphereGeo2 = new THREE.SphereGeometry(0.042, 8, 3);
const sphereGeo3 = new THREE.SphereGeometry(0.075, 8, 6);
const sphereGeo4 = new THREE.SphereGeometry(0.038, 8, 6);
const boxGeo = new THREE.BoxGeometry(0.014, 0.014, 0.006);
const sphereGeo5 = new THREE.SphereGeometry(0.022, 6, 4);
const sphereGeo6 = new THREE.SphereGeometry(0.018, 6, 4);
const sphereGeo7 = new THREE.SphereGeometry(0.05, 6, 4);
const coneGeo = new THREE.ConeGeometry(0.022, 0.07, 5);
const cylinderGeo = new THREE.CylinderGeometry(0.046, 0.058, 0.4292, 6, 1, true);
const sphereGeo8 = new THREE.SphereGeometry(0.054, 6, 3);
const cylinderGeo2 = new THREE.CylinderGeometry(0.016, 0.044, 0.6881, 6);
const cylinderGeo3 = new THREE.CylinderGeometry(0.041, 0.044, 0.0688, 6, 1, true);
const cylinderGeo4 = new THREE.CylinderGeometry(0.046, 0.058, 0.4105, 6, 1, true);
const cylinderGeo5 = new THREE.CylinderGeometry(0.016, 0.044, 0.6756, 6);
const cylinderGeo6 = new THREE.CylinderGeometry(0.041, 0.044, 0.0676, 6, 1, true);
// Parts
const spider = new THREE.Group();
spider.name = 'spider';
spider.position.set(0, -0.0074, 0);
root.add(spider);
const abdomen = new THREE.Group();
abdomen.name = 'abdomen';
abdomen.position.set(0, 0.36, -0.05);
spider.add(abdomen);
const abdomenShell = new THREE.Mesh(new THREE.SphereGeometry(1, 12, 8), bodyMat);
abdomenShell.name = 'abdomenShell';
abdomenShell.position.set(0, 0.1, -0.32);
abdomenShell.scale.set(0.32, 0.27, 0.36);
abdomen.add(abdomenShell);
const markSpot1 = new THREE.Mesh(new THREE.SphereGeometry(0.085, 8, 3), markMat);
markSpot1.name = 'markSpot1';
markSpot1.position.set(0, 0.3447, -0.18);
markSpot1.rotation.set(deg(17.5671), 0, 0);
markSpot1.scale.set(1, 0.28, 1);
abdomen.add(markSpot1);
const markSpot2 = new THREE.Mesh(new THREE.SphereGeometry(0.07, 8, 3), markMat);
markSpot2.name = 'markSpot2';
markSpot2.position.set(0, 0.3643, -0.36);
markSpot2.rotation.set(deg(-4.7932), 0, 0);
markSpot2.scale.set(1, 0.28, 1);
abdomen.add(markSpot2);
const markSpot3 = new THREE.Mesh(new THREE.SphereGeometry(0.05, 8, 3), markMat);
markSpot3.name = 'markSpot3';
markSpot3.position.set(0, 0.3205, -0.52);
markSpot3.rotation.set(deg(-26.6161), 0, 0);
markSpot3.scale.set(1, 0.28, 1);
abdomen.add(markSpot3);
const markSide = new THREE.Mesh(sphereGeo, markMat);
markSide.name = 'markSide';
markSide.position.set(0.15, 0.3315, -0.27);
markSide.rotation.set(deg(6.2085), deg(-1.3347), deg(-24.2437));
markSide.scale.set(1, 0.28, 1);
abdomen.add(markSide);
const markSide2 = new THREE.Mesh(sphereGeo2, markMat);
markSide2.name = 'markSide';
markSide2.position.set(0.13, 0.3226, -0.45);
markSide2.rotation.set(deg(-16.6574), deg(3.1495), deg(-21.2716));
markSide2.scale.set(1, 0.28, 1);
abdomen.add(markSide2);
const markSide3 = new THREE.Mesh(sphereGeo, markMat);
markSide3.name = 'markSide';
markSide3.position.set(-0.15, 0.3315, -0.27);
markSide3.rotation.set(deg(6.2085), deg(1.3347), deg(24.2437));
markSide3.scale.set(1, 0.28, 1);
abdomen.add(markSide3);
const markSide4 = new THREE.Mesh(sphereGeo2, markMat);
markSide4.name = 'markSide';
markSide4.position.set(-0.13, 0.3226, -0.45);
markSide4.rotation.set(deg(-16.6574), deg(-3.1495), deg(21.2716));
markSide4.scale.set(1, 0.28, 1);
abdomen.add(markSide4);
const spinneret = new THREE.Mesh(new THREE.ConeGeometry(0.04, 0.06, 5), jointMat);
spinneret.name = 'spinneret';
spinneret.position.set(0, 0.06, -0.67);
spinneret.rotation.set(deg(-110), 0, 0);
abdomen.add(spinneret);
const head = new THREE.Group();
head.name = 'head';
head.position.set(0, 0.36, 0);
spider.add(head);
const cephalothorax = new THREE.Mesh(new THREE.SphereGeometry(0.22, 10, 7), bodyMat);
cephalothorax.name = 'cephalothorax';
cephalothorax.position.set(0, 0.02, 0.1);
cephalothorax.scale.set(1, 0.72, 1.08);
head.add(cephalothorax);
const eyeL = new THREE.Mesh(sphereGeo3, eyeWhiteMat);
eyeL.name = 'eyeL';
eyeL.position.set(0.075, 0.07, 0.2776);
head.add(eyeL);
const pupilL = new THREE.Mesh(sphereGeo4, pupilMat);
pupilL.name = 'pupilL';
pupilL.position.set(0.07, 0.065, 0.3426);
pupilL.scale.set(1, 1.1, 0.55);
head.add(pupilL);
const eyeShineL = new THREE.Mesh(boxGeo, eyeWhiteMat);
eyeShineL.name = 'eyeShineL';
eyeShineL.position.set(0.082, 0.08, 0.3626);
head.add(eyeShineL);
const eyeSmall = new THREE.Mesh(sphereGeo5, pupilMat);
eyeSmall.name = 'eyeSmall';
eyeSmall.position.set(0.045, 0.14, 0.2676);
head.add(eyeSmall);
const eyeSmall2 = new THREE.Mesh(sphereGeo6, pupilMat);
eyeSmall2.name = 'eyeSmall';
eyeSmall2.position.set(0.105, 0.125, 0.2376);
head.add(eyeSmall2);
const eyeR = new THREE.Mesh(sphereGeo3, eyeWhiteMat);
eyeR.name = 'eyeR';
eyeR.position.set(-0.075, 0.07, 0.2776);
head.add(eyeR);
const pupilR = new THREE.Mesh(sphereGeo4, pupilMat);
pupilR.name = 'pupilR';
pupilR.position.set(-0.07, 0.065, 0.3426);
pupilR.scale.set(1, 1.1, 0.55);
head.add(pupilR);
const eyeShineR = new THREE.Mesh(boxGeo, eyeWhiteMat);
eyeShineR.name = 'eyeShineR';
eyeShineR.position.set(-0.058, 0.08, 0.3626);
head.add(eyeShineR);
const eyeSmall3 = new THREE.Mesh(sphereGeo5, pupilMat);
eyeSmall3.name = 'eyeSmall';
eyeSmall3.position.set(-0.045, 0.14, 0.2676);
head.add(eyeSmall3);
const eyeSmall4 = new THREE.Mesh(sphereGeo6, pupilMat);
eyeSmall4.name = 'eyeSmall';
eyeSmall4.position.set(-0.105, 0.125, 0.2376);
head.add(eyeSmall4);
const chelicera = new THREE.Mesh(sphereGeo7, bodyMat);
chelicera.name = 'chelicera';
chelicera.position.set(0.045, -0.06, 0.2976);
chelicera.scale.set(1, 1.2, 1);
head.add(chelicera);
const fang = new THREE.Mesh(coneGeo, fangMat);
fang.name = 'fang';
fang.position.set(0.045, -0.12, 0.3176);
fang.rotation.set(deg(160), 0, deg(8));
head.add(fang);
const chelicera2 = new THREE.Mesh(sphereGeo7, bodyMat);
chelicera2.name = 'chelicera';
chelicera2.position.set(-0.045, -0.06, 0.2976);
chelicera2.scale.set(1, 1.2, 1);
head.add(chelicera2);
const fang2 = new THREE.Mesh(coneGeo, fangMat);
fang2.name = 'fang';
fang2.position.set(-0.045, -0.12, 0.3176);
fang2.rotation.set(deg(160), 0, deg(-8));
head.add(fang2);
const legL1 = new THREE.Group();
legL1.name = 'legL1';
legL1.position.set(0.12, 0.36, 0.1);
spider.add(legL1);
const femur = new THREE.Mesh(cylinderGeo, bodyMat);
femur.name = 'femur';
femur.position.set(0.0997, 0.125, 0.1277);
femur.rotation.set(deg(39.4424), deg(-10.8813), deg(-29.759));
legL1.add(femur);
const knee = new THREE.Mesh(sphereGeo8, jointMat);
knee.name = 'knee';
knee.position.set(0.1995, 0.25, 0.2553);
legL1.add(knee);
const tibia = new THREE.Mesh(cylinderGeo2, bodyMat);
tibia.name = 'tibia';
tibia.position.set(0.3059, -0.0475, 0.3915);
tibia.rotation.set(deg(111.7515), deg(-64.7779), deg(-46.5236));
legL1.add(tibia);
const legBand = new THREE.Mesh(cylinderGeo3, markMat);
legBand.name = 'legBand';
legBand.position.set(0.2484, 0.1132, 0.318);
legBand.rotation.set(deg(111.7515), deg(-64.7779), deg(-46.5236));
legBand.scale.set(1.12, 1, 1.12);
legL1.add(legBand);
const legL2 = new THREE.Group();
legL2.name = 'legL2';
legL2.position.set(0.12, 0.36, 0.03);
spider.add(legL2);
const femur2 = new THREE.Mesh(cylinderGeo4, bodyMat);
femur2.name = 'femur';
femur2.position.set(0.1427, 0.125, 0.0464);
femur2.rotation.set(deg(13.8117), deg(-6.0702), deg(-47.2854));
legL2.add(femur2);
const knee2 = new THREE.Mesh(sphereGeo8, jointMat);
knee2.name = 'knee';
knee2.position.set(0.2853, 0.25, 0.0927);
legL2.add(knee2);
const tibia2 = new THREE.Mesh(cylinderGeo5, bodyMat);
tibia2.name = 'tibia';
tibia2.position.set(0.4375, -0.0475, 0.1421);
tibia2.rotation.set(deg(10.1157), deg(-33.5543), deg(-147.2788));
legL2.add(tibia2);
const legBand2 = new THREE.Mesh(cylinderGeo6, markMat);
legBand2.name = 'legBand';
legBand2.position.set(0.3553, 0.1132, 0.1154);
legBand2.rotation.set(deg(10.1157), deg(-33.5543), deg(-147.2788));
legBand2.scale.set(1.12, 1, 1.12);
legL2.add(legBand2);
const legL3 = new THREE.Group();
legL3.name = 'legL3';
legL3.position.set(0.12, 0.36, -0.04);
spider.add(legL3);
const femur3 = new THREE.Mesh(cylinderGeo4, bodyMat);
femur3.name = 'femur';
femur3.position.set(0.1442, 0.125, -0.0413);
femur3.rotation.set(deg(-12.2818), deg(5.4707), deg(-47.8885));
legL3.add(femur3);
const knee3 = new THREE.Mesh(sphereGeo8, jointMat);
knee3.name = 'knee';
knee3.position.set(0.2884, 0.25, -0.0827);
legL3.add(knee3);
const tibia3 = new THREE.Mesh(cylinderGeo5, bodyMat);
tibia3.name = 'tibia';
tibia3.position.set(0.4422, -0.0475, -0.1268);
tibia3.rotation.set(deg(-8.6609), deg(29.8884), deg(-148.3212));
legL3.add(tibia3);
const legBand3 = new THREE.Mesh(cylinderGeo6, markMat);
legBand3.name = 'legBand';
legBand3.position.set(0.3591, 0.1132, -0.103);
legBand3.rotation.set(deg(-8.6609), deg(29.8884), deg(-148.3212));
legBand3.scale.set(1.12, 1, 1.12);
legL3.add(legBand3);
const legL4 = new THREE.Group();
legL4.name = 'legL4';
legL4.position.set(0.12, 0.36, -0.11);
spider.add(legL4);
const femur4 = new THREE.Mesh(cylinderGeo, bodyMat);
femur4.name = 'femur';
femur4.position.set(0.1041, 0.125, -0.1241);
femur4.rotation.set(deg(-38.1656), deg(11.0461), deg(-31.2324));
legL4.add(femur4);
const knee4 = new THREE.Mesh(sphereGeo8, jointMat);
knee4.name = 'knee';
knee4.position.set(0.2083, 0.25, -0.2482);
legL4.add(knee4);
const tibia4 = new THREE.Mesh(cylinderGeo2, bodyMat);
tibia4.name = 'tibia';
tibia4.position.set(0.3193, -0.0475, -0.3806);
tibia4.rotation.set(deg(-103.7656), deg(66.6634), deg(-54.5872));
legL4.add(tibia4);
const legBand4 = new THREE.Mesh(cylinderGeo3, markMat);
legBand4.name = 'legBand';
legBand4.position.set(0.2594, 0.1132, -0.3091);
legBand4.rotation.set(deg(-103.7656), deg(66.6634), deg(-54.5872));
legBand4.scale.set(1.12, 1, 1.12);
legL4.add(legBand4);
const legR1 = new THREE.Group();
legR1.name = 'legR1';
legR1.position.set(-0.12, 0.36, 0.1);
spider.add(legR1);
const femur5 = new THREE.Mesh(cylinderGeo, bodyMat);
femur5.name = 'femur';
femur5.position.set(-0.0997, 0.125, 0.1277);
femur5.rotation.set(deg(39.4424), deg(10.8813), deg(29.759));
legR1.add(femur5);
const knee5 = new THREE.Mesh(sphereGeo8, jointMat);
knee5.name = 'knee';
knee5.position.set(-0.1995, 0.25, 0.2553);
legR1.add(knee5);
const tibia5 = new THREE.Mesh(cylinderGeo2, bodyMat);
tibia5.name = 'tibia';
tibia5.position.set(-0.3059, -0.0475, 0.3915);
tibia5.rotation.set(deg(111.7515), deg(64.7779), deg(46.5236));
legR1.add(tibia5);
const legBand5 = new THREE.Mesh(cylinderGeo3, markMat);
legBand5.name = 'legBand';
legBand5.position.set(-0.2484, 0.1132, 0.318);
legBand5.rotation.set(deg(111.7515), deg(64.7779), deg(46.5236));
legBand5.scale.set(1.12, 1, 1.12);
legR1.add(legBand5);
const legR2 = new THREE.Group();
legR2.name = 'legR2';
legR2.position.set(-0.12, 0.36, 0.03);
spider.add(legR2);
const femur6 = new THREE.Mesh(cylinderGeo4, bodyMat);
femur6.name = 'femur';
femur6.position.set(-0.1427, 0.125, 0.0464);
femur6.rotation.set(deg(13.8117), deg(6.0702), deg(47.2854));
legR2.add(femur6);
const knee6 = new THREE.Mesh(sphereGeo8, jointMat);
knee6.name = 'knee';
knee6.position.set(-0.2853, 0.25, 0.0927);
legR2.add(knee6);
const tibia6 = new THREE.Mesh(cylinderGeo5, bodyMat);
tibia6.name = 'tibia';
tibia6.position.set(-0.4375, -0.0475, 0.1421);
tibia6.rotation.set(deg(10.1157), deg(33.5543), deg(147.2788));
legR2.add(tibia6);
const legBand6 = new THREE.Mesh(cylinderGeo6, markMat);
legBand6.name = 'legBand';
legBand6.position.set(-0.3553, 0.1132, 0.1154);
legBand6.rotation.set(deg(10.1157), deg(33.5543), deg(147.2788));
legBand6.scale.set(1.12, 1, 1.12);
legR2.add(legBand6);
const legR3 = new THREE.Group();
legR3.name = 'legR3';
legR3.position.set(-0.12, 0.36, -0.04);
spider.add(legR3);
const femur7 = new THREE.Mesh(cylinderGeo4, bodyMat);
femur7.name = 'femur';
femur7.position.set(-0.1442, 0.125, -0.0413);
femur7.rotation.set(deg(-12.2818), deg(-5.4707), deg(47.8885));
legR3.add(femur7);
const knee7 = new THREE.Mesh(sphereGeo8, jointMat);
knee7.name = 'knee';
knee7.position.set(-0.2884, 0.25, -0.0827);
legR3.add(knee7);
const tibia7 = new THREE.Mesh(cylinderGeo5, bodyMat);
tibia7.name = 'tibia';
tibia7.position.set(-0.4422, -0.0475, -0.1268);
tibia7.rotation.set(deg(-8.6609), deg(-29.8884), deg(148.3212));
legR3.add(tibia7);
const legBand7 = new THREE.Mesh(cylinderGeo6, markMat);
legBand7.name = 'legBand';
legBand7.position.set(-0.3591, 0.1132, -0.103);
legBand7.rotation.set(deg(-8.6609), deg(-29.8884), deg(148.3212));
legBand7.scale.set(1.12, 1, 1.12);
legR3.add(legBand7);
const legR4 = new THREE.Group();
legR4.name = 'legR4';
legR4.position.set(-0.12, 0.36, -0.11);
spider.add(legR4);
const femur8 = new THREE.Mesh(cylinderGeo, bodyMat);
femur8.name = 'femur';
femur8.position.set(-0.1041, 0.125, -0.1241);
femur8.rotation.set(deg(-38.1656), deg(-11.0461), deg(31.2324));
legR4.add(femur8);
const knee8 = new THREE.Mesh(sphereGeo8, jointMat);
knee8.name = 'knee';
knee8.position.set(-0.2083, 0.25, -0.2482);
legR4.add(knee8);
const tibia8 = new THREE.Mesh(cylinderGeo2, bodyMat);
tibia8.name = 'tibia';
tibia8.position.set(-0.3193, -0.0475, -0.3806);
tibia8.rotation.set(deg(-103.7656), deg(-66.6634), deg(54.5872));
legR4.add(tibia8);
const legBand8 = new THREE.Mesh(cylinderGeo3, markMat);
legBand8.name = 'legBand';
legBand8.position.set(-0.2594, 0.1132, -0.3091);
legBand8.rotation.set(deg(-103.7656), deg(-66.6634), deg(54.5872));
legBand8.scale.set(1.12, 1, 1.12);
legR4.add(legBand8);
root.traverse((o) => {
if (o.isMesh) {
o.castShadow = true;
o.receiveShadow = true;
}
});
return root;
}
export default createSpider;
Bewertungen & Kommentare
—
Noch keine Bewertungen — gib die erste ab.
5
0
4
0
3
0
2
0
1
0
Melde dich an, um zu bewerten und zu kommentieren.
0 Kommentare
Noch keine Kommentare. Erzähl, wie du dieses Modell genutzt hast oder was besser sein könnte.
Ähnliche Modelle
Gleiche Kategorie oder ähnliche Tags









