1,4 mil tris6,22 × 6,28 × 5,88 m
Use no código
Fazer remix no editorsun.js · 301 linhas
Módulo ES autocontido — depende apenas do three. Chame a factory e adicione o grupo à sua cena.
/**
* Sun — Codels 3D model library
* License: CC0-1.0 · Units: meters · Y-up · Front: +Z · Origin: center of the model (it floats — pickups, planets)
* Triangles: 1,356 · Size (W × H × D): 6.22 × 6.28 × 5.88 m
*
* Usage:
* import { createSun } from './sun.js';
*
* const model = createSun();
* model.position.set(0, 0, 0);
* scene.add(model);
*/
import * as THREE from 'three';
const deg = THREE.MathUtils.degToRad;
export function createSun() {
const root = new THREE.Group();
root.name = 'Sun';
// Materials
const coreMat = new THREE.MeshStandardMaterial({ name: 'core', color: 0xffe066, roughness: 0.6, emissive: 0xffb800, emissiveIntensity: 1.2, flatShading: true });
const spotMat = new THREE.MeshStandardMaterial({ name: 'spot', color: 0xd8641a, roughness: 0.8, emissive: 0xd8641a, emissiveIntensity: 0.5, flatShading: true });
const rayMat = new THREE.MeshStandardMaterial({ name: 'ray', color: 0xffa62b, roughness: 0.5, emissive: 0xff7a10, emissiveIntensity: 1.2, flatShading: true });
const rayDeepMat = new THREE.MeshStandardMaterial({ name: 'rayDeep', color: 0xff7a10, roughness: 0.5, emissive: 0xff7a10, flatShading: true });
const flareMat = new THREE.MeshStandardMaterial({ name: 'flare', color: 0xff5a14, roughness: 0.5, emissive: 0xff5a14, emissiveIntensity: 1.3, flatShading: true });
const coronaMat = new THREE.MeshStandardMaterial({ name: 'corona', color: 0xffb43c, roughness: 0.8, emissive: 0xffb800, emissiveIntensity: 0.8, transparent: true, opacity: 0.3 });
// Parts
const sun = new THREE.Group();
sun.name = 'sun';
sun.scale.setScalar(4);
root.add(sun);
const core = new THREE.Mesh(new THREE.IcosahedronGeometry(0.5, 2), coreMat);
core.name = 'core';
sun.add(core);
const sunspot1 = new THREE.Mesh(new THREE.SphereGeometry(0.506, 10, 2, 0, Math.PI * 2, 0, 0.1774), spotMat);
sunspot1.name = 'sunspot1';
sunspot1.rotation.set(deg(-88.9636), deg(-30.7497), deg(31.2838));
sun.add(sunspot1);
const sunspot2 = new THREE.Mesh(new THREE.SphereGeometry(0.507, 10, 2, 0, Math.PI * 2, 0, 0.2212), spotMat);
sunspot2.name = 'sunspot2';
sunspot2.rotation.set(deg(26.7629), deg(7.1531), deg(29.4425));
sun.add(sunspot2);
const sunspot3 = new THREE.Mesh(new THREE.SphereGeometry(0.508, 10, 2, 0, Math.PI * 2, 0, 0.2199), spotMat);
sunspot3.name = 'sunspot3';
sunspot3.rotation.set(deg(-126.0224), deg(42.207), deg(-22.2395));
sun.add(sunspot3);
const sunspot4 = new THREE.Mesh(new THREE.SphereGeometry(0.509, 10, 2, 0, Math.PI * 2, 0, 0.2348), spotMat);
sunspot4.name = 'sunspot4';
sunspot4.rotation.set(deg(20.5173), deg(-27.1604), deg(-106.3162));
sun.add(sunspot4);
const prominence1 = new THREE.Group();
prominence1.name = 'prominence1';
prominence1.position.set(0.0344, 0.2829, -0.3924);
prominence1.rotation.set(deg(121.413), deg(46.9884), deg(-174.0248));
sun.add(prominence1);
const loop = new THREE.Mesh(new THREE.TorusGeometry(0.1134, 0.025, 4, 10, Math.PI), flareMat);
loop.name = 'loop';
prominence1.add(loop);
const prominence2 = new THREE.Group();
prominence2.name = 'prominence2';
prominence2.position.set(-0.1255, -0.0404, 0.4667);
prominence2.rotation.set(deg(88.3332), deg(23.2768), deg(16.3571));
sun.add(prominence2);
const loop2 = new THREE.Mesh(new THREE.TorusGeometry(0.1207, 0.025, 4, 10, Math.PI), flareMat);
loop2.name = 'loop';
prominence2.add(loop2);
const prominence3 = new THREE.Group();
prominence3.name = 'prominence3';
prominence3.position.set(0.136, -0.3637, -0.2906);
prominence3.rotation.set(deg(48.1069), deg(-29.4449), deg(-161.2202));
sun.add(prominence3);
const loop3 = new THREE.Mesh(new THREE.TorusGeometry(0.1104, 0.025, 4, 10, Math.PI), flareMat);
loop3.name = 'loop';
prominence3.add(loop3);
const ray1 = new THREE.Mesh(new THREE.ConeGeometry(0.0509, 0.4025, 5), flareMat);
ray1.name = 'ray1';
ray1.position.set(0.1413, 0.6357, 0);
ray1.rotation.set(deg(7.0935), deg(29.0628), deg(-14.3688));
sun.add(ray1);
const ray2 = new THREE.Mesh(new THREE.ConeGeometry(0.0694, 0.1646, 5), rayMat);
ray2.name = 'ray2';
ray2.position.set(-0.1457, 0.4943, 0.1335);
ray2.rotation.set(deg(-27.2746), deg(67.115), deg(44.7289));
sun.add(ray2);
const ray3 = new THREE.Mesh(new THREE.ConeGeometry(0.0694, 0.2932, 5), rayDeepMat);
ray3.name = 'ray3';
ray3.position.set(0.0247, 0.5256, -0.2812);
ray3.rotation.set(deg(-25.1437), deg(51.7182), deg(-3.8289));
sun.add(ray3);
const ray4 = new THREE.Mesh(new THREE.ConeGeometry(0.0509, 0.3848, 5), flareMat);
ray4.name = 'ray4';
ray4.position.set(0.2161, 0.5353, 0.2818);
ray4.rotation.set(deg(29.1658), deg(3.9214), deg(-19.7013));
sun.add(ray4);
const ray5 = new THREE.Mesh(new THREE.ConeGeometry(0.0694, 0.1543, 5), rayMat);
ray5.name = 'ray5';
ray5.position.set(-0.3211, 0.4142, -0.0568);
ray5.rotation.set(deg(-32.4861), deg(28.5279), deg(43.8929));
sun.add(ray5);
const ray6 = new THREE.Mesh(new THREE.ConeGeometry(0.0694, 0.2896, 5), rayDeepMat);
ray6.name = 'ray6';
ray6.position.set(0.3386, 0.439, -0.2154);
ray6.rotation.set(deg(29.3984), deg(49.9739), deg(-62.2712));
sun.add(ray6);
const ray7 = new THREE.Mesh(new THREE.ConeGeometry(0.0509, 0.3377, 5), flareMat);
ray7.name = 'ray7';
ray7.position.set(-0.1162, 0.4273, 0.4323);
ray7.rotation.set(deg(42.1779), deg(16.0612), deg(11.2689));
sun.add(ray7);
const ray8 = new THREE.Mesh(new THREE.ConeGeometry(0.0694, 0.1721, 5), rayMat);
ray8.name = 'ray8';
ray8.position.set(-0.1893, 0.3446, -0.3644);
ray8.rotation.set(deg(-49.3224), deg(7.1773), deg(20.8447));
sun.add(ray8);
const ray9 = new THREE.Mesh(new THREE.ConeGeometry(0.0694, 0.3212, 5), rayDeepMat);
ray9.name = 'ray9';
ray9.position.set(0.4609, 0.3635, 0.1683);
ray9.rotation.set(deg(57.2185), deg(24.952), deg(-56.3559));
sun.add(ray9);
const ray10 = new THREE.Mesh(new THREE.ConeGeometry(0.0509, 0.3479, 5), flareMat);
ray10.name = 'ray10';
ray10.position.set(-0.4826, 0.3417, 0.1992);
ray10.rotation.set(deg(-25.1009), deg(33.9865), deg(68.871));
sun.add(ray10);
const ray11 = new THREE.Mesh(new THREE.ConeGeometry(0.0694, 0.1726, 5), rayMat);
ray11.name = 'ray11';
ray11.position.set(0.1969, 0.2681, -0.4207);
ray11.rotation.set(deg(-36.0776), deg(42.7677), deg(-30.0005));
sun.add(ray11);
const ray12 = new THREE.Mesh(new THREE.ConeGeometry(0.0694, 0.2965, 5), rayDeepMat);
ray12.name = 'ray12';
ray12.position.set(0.1597, 0.2706, 0.5091);
ray12.rotation.set(deg(61.9379), deg(-0.2385), deg(-15.4805));
sun.add(ray12);
const ray13 = new THREE.Mesh(new THREE.ConeGeometry(0.0509, 0.3557, 5), flareMat);
ray13.name = 'ray13';
ray13.position.set(-0.4967, 0.2541, -0.2879);
ray13.rotation.set(deg(-59.2318), deg(8.1453), deg(53.0567));
sun.add(ray13);
const ray14 = new THREE.Mesh(new THREE.ConeGeometry(0.0694, 0.1971, 5), rayMat);
ray14.name = 'ray14';
ray14.position.set(0.5004, 0.1959, -0.11);
ray14.rotation.set(deg(32.1752), deg(21.532), deg(-78.7264));
sun.add(ray14);
const ray15 = new THREE.Mesh(new THREE.ConeGeometry(0.0694, 0.2777, 5), rayDeepMat);
ray15.name = 'ray15';
ray15.position.set(-0.322, 0.1823, 0.4581);
ray15.rotation.set(deg(8.6472), deg(52.877), deg(64.9784));
sun.add(ray15);
const ray16 = new THREE.Mesh(new THREE.ConeGeometry(0.0509, 0.3597, 5), flareMat);
ray16.name = 'ray16';
ray16.position.set(-0.0781, 0.165, -0.6028);
ray16.rotation.set(deg(-83.4515), deg(50.6102), deg(11.2704));
sun.add(ray16);
const ray17 = new THREE.Mesh(new THREE.ConeGeometry(0.0694, 0.1603, 5), rayMat);
ray17.name = 'ray17';
ray17.position.set(0.396, 0.1136, 0.3337);
ray17.rotation.set(deg(92.5353), deg(17.9474), deg(-51.729));
sun.add(ray17);
const ray18 = new THREE.Mesh(new THREE.ConeGeometry(0.0694, 0.3125, 5), rayDeepMat);
ray18.name = 'ray18';
ray18.position.set(-0.5972, 0.101, 0.0247);
ray18.rotation.set(deg(-54.817), deg(9.2074), deg(86.4032));
sun.add(ray18);
const ray19 = new THREE.Mesh(new THREE.ConeGeometry(0.0509, 0.3831, 5), flareMat);
ray19.name = 'ray19';
ray19.position.set(0.4515, 0.0764, -0.4493);
ray19.rotation.set(deg(-41.8546), deg(32.1432), deg(-56.2215));
sun.add(ray19);
const ray20 = new THREE.Mesh(new THREE.ConeGeometry(0.0694, 0.1999, 5), rayMat);
ray20.name = 'ray20';
ray20.position.set(-0.0253, 0.0393, 0.5479);
ray20.rotation.set(deg(82.7125), deg(50.3211), deg(4.1381));
sun.add(ray20);
const ray21 = new THREE.Mesh(new THREE.ConeGeometry(0.0694, 0.3022, 5), rayDeepMat);
ray21.name = 'ray21';
ray21.position.set(-0.385, 0.0143, -0.4614);
ray21.rotation.set(deg(-87.0126), deg(-1.4511), deg(39.8465));
sun.add(ray21);
const ray22 = new THREE.Mesh(new THREE.ConeGeometry(0.0509, 0.3616, 5), flareMat);
ray22.name = 'ray22';
ray22.position.set(0.625, -0.015, 0.0841);
ray22.rotation.set(deg(33.2627), deg(-7.1637), deg(-86.9499));
sun.add(ray22);
const ray23 = new THREE.Mesh(new THREE.ConeGeometry(0.0694, 0.1825, 5), rayMat);
ray23.name = 'ray23';
ray23.position.set(-0.4431, -0.0387, 0.3083);
ray23.rotation.set(deg(7.8327), deg(35.037), deg(89.6062));
sun.add(ray23);
const ray24 = new THREE.Mesh(new THREE.ConeGeometry(0.0694, 0.2757, 5), rayDeepMat);
ray24.name = 'ray24';
ray24.position.set(0.1281, -0.07, -0.5694);
ray24.rotation.set(deg(-81.8276), deg(49.5427), deg(-19.6237));
sun.add(ray24);
const ray25 = new THREE.Mesh(new THREE.ConeGeometry(0.0509, 0.3593, 5), flareMat);
ray25.name = 'ray25';
ray25.position.set(0.3087, -0.1049, 0.5387);
ray25.rotation.set(deg(92.5011), deg(-14.7619), deg(-30.4616));
sun.add(ray25);
const ray26 = new THREE.Mesh(new THREE.ConeGeometry(0.0694, 0.1981, 5), rayMat);
ray26.name = 'ray26';
ray26.position.set(-0.5109, -0.1177, -0.163);
ray26.rotation.set(deg(-35.7134), deg(-21.4773), deg(90.0397));
sun.add(ray26);
const ray27 = new THREE.Mesh(new THREE.ConeGeometry(0.0694, 0.2964, 5), rayDeepMat);
ray27.name = 'ray27';
ray27.position.set(0.5241, -0.1567, -0.2422);
ray27.rotation.set(deg(37.2641), deg(10.5752), deg(-116.9703));
sun.add(ray27);
const ray28 = new THREE.Mesh(new THREE.ConeGeometry(0.0509, 0.3428, 5), flareMat);
ray28.name = 'ray28';
ray28.position.set(-0.2281, -0.1923, 0.5451);
ray28.rotation.set(deg(89.7365), deg(40.5018), deg(28.8674));
sun.add(ray28);
const ray29 = new THREE.Mesh(new THREE.ConeGeometry(0.0694, 0.1912, 5), rayMat);
ray29.name = 'ray29';
ray29.position.set(-0.1725, -0.1949, -0.4795);
ray29.rotation.set(deg(-105.341), deg(-19.4899), deg(19.5936));
sun.add(ray29);
const ray30 = new THREE.Mesh(new THREE.ConeGeometry(0.0694, 0.2489, 5), rayDeepMat);
ray30.name = 'ray30';
ray30.position.set(0.465, -0.2325, 0.2444);
ray30.rotation.set(deg(79.2809), deg(-30.5016), deg(-69.9579));
sun.add(ray30);
const ray31 = new THREE.Mesh(new THREE.ConeGeometry(0.0509, 0.3605, 5), flareMat);
ray31.name = 'ray31';
ray31.position.set(-0.5435, -0.2851, 0.1433);
ray31.rotation.set(deg(-43.2283), deg(-9.4934), deg(119.0328));
sun.add(ray31);
const ray32 = new THREE.Mesh(new THREE.ConeGeometry(0.0694, 0.1837, 5), rayMat);
ray32.name = 'ray32';
ray32.position.set(0.2538, -0.2709, -0.3947);
ray32.rotation.set(deg(-75.7664), deg(54.7913), deg(-54.3285));
sun.add(ray32);
const ray33 = new THREE.Mesh(new THREE.ConeGeometry(0.0694, 0.2457, 5), rayDeepMat);
ray33.name = 'ray33';
ray33.position.set(0.0812, -0.3137, 0.4724);
ray33.rotation.set(deg(127.0569), deg(22.916), deg(-8.851));
sun.add(ray33);
const ray34 = new THREE.Mesh(new THREE.ConeGeometry(0.0509, 0.3318, 5), flareMat);
ray34.name = 'ray34';
ray34.position.set(-0.3913, -0.3666, -0.303);
ray34.rotation.set(deg(-128.1879), deg(-14.4462), deg(40.9991));
sun.add(ray34);
const ray35 = new THREE.Mesh(new THREE.ConeGeometry(0.0694, 0.1775, 5), rayMat);
ray35.name = 'ray35';
ray35.position.set(0.4113, -0.3464, -0.0341);
ray35.rotation.set(deg(41.0709), deg(-26.1424), deg(-121.749));
sun.add(ray35);
const ray36 = new THREE.Mesh(new THREE.ConeGeometry(0.0694, 0.3198, 5), rayDeepMat);
ray36.name = 'ray36';
ray36.position.set(-0.2996, -0.4211, 0.3238);
ray36.rotation.set(deg(2.3817), deg(48.7043), deg(131.8986));
sun.add(ray36);
const ray37 = new THREE.Mesh(new THREE.ConeGeometry(0.0509, 0.3858, 5), flareMat);
ray37.name = 'ray37';
ray37.position.set(0.0021, -0.4745, -0.4337);
ray37.rotation.set(deg(-137.393), deg(43.1412), deg(-0.2584));
sun.add(ray37);
const ray38 = new THREE.Mesh(new THREE.ConeGeometry(0.0694, 0.1546, 5), rayMat);
ray38.name = 'ray38';
ray38.position.set(0.2192, -0.4143, 0.2416);
ray38.rotation.set(deg(133.5186), deg(-31.4582), deg(-29.159));
sun.add(ray38);
const ray39 = new THREE.Mesh(new THREE.ConeGeometry(0.0694, 0.2756, 5), rayDeepMat);
ray39.name = 'ray39';
ray39.position.set(-0.3235, -0.4898, -0.03);
ray39.rotation.set(deg(-11.4225), deg(-21.3397), deg(143.7772));
sun.add(ray39);
const ray40 = new THREE.Mesh(new THREE.ConeGeometry(0.0509, 0.3788, 5), flareMat);
ray40.name = 'ray40';
ray40.position.set(0.241, -0.5633, -0.1829);
ray40.rotation.set(deg(4.256), deg(30.2604), deg(-154.1257));
sun.add(ray40);
const ray41 = new THREE.Mesh(new THREE.ConeGeometry(0.0694, 0.1567, 5), rayMat);
ray41.name = 'ray41';
ray41.position.set(-0.0351, -0.4906, 0.1929);
ray41.rotation.set(deg(152.9616), deg(55.5581), deg(6.7454));
sun.add(ray41);
const ray42 = new THREE.Mesh(new THREE.ConeGeometry(0.0694, 0.3051, 5), rayDeepMat);
ray42.name = 'ray42';
ray42.position.set(-0.0696, -0.5882, -0.1106);
ray42.rotation.set(deg(-165.8319), deg(-27.809), deg(7.5051));
sun.add(ray42);
const halo = new THREE.Mesh(new THREE.SphereGeometry(0.6, 18, 12), coronaMat);
halo.name = 'halo';
sun.add(halo);
root.traverse((o) => {
if (o.isMesh) {
o.castShadow = true;
o.receiveShadow = true;
}
});
return root;
}
export default createSun;
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









