morfeo 0.6.6 → 0.6.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/index.d.ts +2 -1
- package/lib/config.mjs +1 -1
- package/lib/diccionario.mjs +3 -0
- package/package.json +1 -1
- package/remotion/motor/objetos-varios.tsx +228 -0
package/index.d.ts
CHANGED
|
@@ -30,7 +30,8 @@ export type Estilo = 'datos-curiosos' | 'explicativo' | 'documental' | 'ilustrad
|
|
|
30
30
|
export type Objeto3D = 'corazon' | 'estrella' | 'rayo' | 'diamante' | 'trofeo' | 'cohete' | 'foco' | 'reloj' | 'planeta' | 'arbol' | 'nube' | 'regalo' | 'llave' | 'candado' | 'casa' | 'libro' | 'globo' | 'medalla' | 'escudo' | 'pin' | 'tuberia' | 'muro' | 'viga' | 'columna' | 'escalera' | 'losa' | 'tanque' | 'suelo'
|
|
31
31
|
| 'valvula' | 'grifo' | 'tinaco' | 'calentador' | 'bomba' | 'alcantarilla' | 'codo' | 'interruptor' | 'enchufe' | 'tablero' | 'medidor' | 'transformador' | 'poste' | 'bateria' | 'turbina' | 'torre_electrica' | 'aire' | 'chip' | 'placa' | 'resistor' | 'capacitor' | 'led' | 'disco_duro' | 'tarjeta_grafica' | 'disipador' | 'ram' | 'router' | 'servidor' | 'fuente_poder' | 'engrane' | 'tornillo' | 'tuerca' | 'motor' | 'resorte' | 'piston'
|
|
32
32
|
| 'atomo' | 'molecula' | 'adn' | 'celula' | 'virus' | 'cerebro' | 'neurona' | 'pulmon' | 'ojo' | 'diente' | 'hueso' | 'jeringa' | 'matraz' | 'telescopio' | 'iman' | 'sol' | 'tierra' | 'volcan' | 'tornado' | 'iceberg' | 'agujero_negro' | 'disco' | 'usb' | 'tarjeta_sd' | 'cable_hdmi' | 'microfono' | 'visor_vr' | 'cargador' | 'dron' | 'tanque_gas' | 'calentador_solar' | 'termostato' | 'detector_humo' | 'camara_seguridad' | 'antena_celular' | 'presa' | 'torre_enfriamiento' | 'ascensor' | 'fusible' | 'fibra_optica' | 'buzon' | 'autobus' | 'helicoptero' | 'submarino' | 'bicicleta' | 'lapiz' | 'regla' | 'dado' | 'ancla' | 'paraguas'
|
|
33
|
-
| 'guitarra' | 'piano' | 'tambor' | 'trompeta' | 'zapato' | 'camisa' | 'pulpo' | 'medusa' | 'tortuga' | 'pajaro' | 'buho' | 'moto' | 'pesa' | 'caminadora' | 'raqueta' | 'silbato' | 'golf' | 'tijeras' | 'mapa' | 'sobre' | 'tetera' | 'periodico' | 'pasaporte' | 'ropero' | 'tarjeta' | 'alcancia' | 'grafica' | 'calculadora' | 'pluma' | 'diploma' | 'birrete' | 'estetoscopio' | 'gota' | 'ramen' | 'planta_tratamiento' | 'refineria' | 'pozo_petrolero' | 'subestacion' | 'fosa_septica' | 'tubo_pvc' | 'granero' | 'parada' | 'hospital' | 'galaxia' | 'cometa' | 'lluvia' | 'fosil' | 'wifi' | 'huella' | 'telarana' | 'arbol_navidad'
|
|
33
|
+
| 'guitarra' | 'piano' | 'tambor' | 'trompeta' | 'zapato' | 'camisa' | 'pulpo' | 'medusa' | 'tortuga' | 'pajaro' | 'buho' | 'moto' | 'pesa' | 'caminadora' | 'raqueta' | 'silbato' | 'golf' | 'tijeras' | 'mapa' | 'sobre' | 'tetera' | 'periodico' | 'pasaporte' | 'ropero' | 'tarjeta' | 'alcancia' | 'grafica' | 'calculadora' | 'pluma' | 'diploma' | 'birrete' | 'estetoscopio' | 'gota' | 'ramen' | 'planta_tratamiento' | 'refineria' | 'pozo_petrolero' | 'subestacion' | 'fosa_septica' | 'tubo_pvc' | 'granero' | 'parada' | 'hospital' | 'galaxia' | 'cometa' | 'lluvia' | 'fosil' | 'wifi' | 'huella' | 'telarana' | 'arbol_navidad'
|
|
34
|
+
| 'lago' | 'burbuja' | 'codigo' | 'musculo' | 'doctor' | 'bicicleta_estatica' | 'confeti' | 'registro' | 'cable_submarino';
|
|
34
35
|
|
|
35
36
|
/** Momento: segundos desde que empieza la escena, una palabra de `say` ("orcas"), "voz", "fin", o "palabra+0.3". */
|
|
36
37
|
export type Momento = number | string;
|
package/lib/config.mjs
CHANGED
|
@@ -33,7 +33,7 @@ export const ESCENARIOS = ['bosque', 'cuarto', 'departamento', 'tunel', 'pasillo
|
|
|
33
33
|
export const FORMAS_3D = ['moneda', 'billete', 'lingote', 'cubo', 'esfera', 'corazon', 'estrella', 'rayo', 'diamante', 'trofeo', 'cohete', 'foco', 'reloj', 'planeta', 'arbol', 'nube', 'regalo', 'llave', 'candado', 'casa', 'libro', 'globo', 'medalla', 'escudo', 'pin', 'tuberia', 'muro', 'viga', 'columna', 'escalera', 'losa', 'tanque', 'suelo',
|
|
34
34
|
'valvula', 'grifo', 'tinaco', 'calentador', 'bomba', 'alcantarilla', 'codo', 'interruptor', 'enchufe', 'tablero', 'medidor', 'transformador', 'poste', 'bateria', 'turbina', 'torre_electrica', 'aire', 'chip', 'placa', 'resistor', 'capacitor', 'led', 'disco_duro', 'tarjeta_grafica', 'disipador', 'ram', 'router', 'servidor', 'fuente_poder', 'engrane', 'tornillo', 'tuerca', 'motor', 'resorte', 'piston',
|
|
35
35
|
'atomo', 'molecula', 'adn', 'celula', 'virus', 'cerebro', 'neurona', 'pulmon', 'ojo', 'diente', 'hueso', 'jeringa', 'matraz', 'telescopio', 'iman', 'sol', 'tierra', 'volcan', 'tornado', 'iceberg', 'agujero_negro', 'disco', 'usb', 'tarjeta_sd', 'cable_hdmi', 'microfono', 'visor_vr', 'cargador', 'dron', 'tanque_gas', 'calentador_solar', 'termostato', 'detector_humo', 'camara_seguridad', 'antena_celular', 'presa', 'torre_enfriamiento', 'ascensor', 'fusible', 'fibra_optica', 'buzon', 'autobus', 'helicoptero', 'submarino', 'bicicleta', 'lapiz', 'regla', 'dado', 'ancla', 'paraguas',
|
|
36
|
-
'guitarra', 'piano', 'tambor', 'trompeta', 'zapato', 'camisa', 'pulpo', 'medusa', 'tortuga', 'pajaro', 'buho', 'moto', 'pesa', 'caminadora', 'raqueta', 'silbato', 'golf', 'tijeras', 'mapa', 'sobre', 'tetera', 'periodico', 'pasaporte', 'ropero', 'tarjeta', 'alcancia', 'grafica', 'calculadora', 'pluma', 'diploma', 'birrete', 'estetoscopio', 'gota', 'ramen', 'planta_tratamiento', 'refineria', 'pozo_petrolero', 'subestacion', 'fosa_septica', 'tubo_pvc', 'granero', 'parada', 'hospital', 'galaxia', 'cometa', 'lluvia', 'fosil', 'wifi', 'huella', 'telarana', 'arbol_navidad'];
|
|
36
|
+
'guitarra', 'piano', 'tambor', 'trompeta', 'zapato', 'camisa', 'pulpo', 'medusa', 'tortuga', 'pajaro', 'buho', 'moto', 'pesa', 'caminadora', 'raqueta', 'silbato', 'golf', 'tijeras', 'mapa', 'sobre', 'tetera', 'periodico', 'pasaporte', 'ropero', 'tarjeta', 'alcancia', 'grafica', 'calculadora', 'pluma', 'diploma', 'birrete', 'estetoscopio', 'gota', 'ramen', 'planta_tratamiento', 'refineria', 'pozo_petrolero', 'subestacion', 'fosa_septica', 'tubo_pvc', 'granero', 'parada', 'hospital', 'galaxia', 'cometa', 'lluvia', 'fosil', 'wifi', 'huella', 'telarana', 'arbol_navidad', 'lago', 'burbuja', 'codigo', 'musculo', 'doctor', 'bicicleta_estatica', 'confeti', 'registro', 'cable_submarino'];
|
|
37
37
|
export const PROVEEDORES_VOZ = ['kokoro', 'elevenlabs', 'openai'];
|
|
38
38
|
export const MUSICAS = ['lofi', 'lofi2', 'chillpop', 'synth', 'house', 'ballad', 'trap'];
|
|
39
39
|
|
package/lib/diccionario.mjs
CHANGED
|
@@ -183,6 +183,9 @@ export const PIEZAS = {
|
|
|
183
183
|
// naturaleza, espacio y otros
|
|
184
184
|
galaxia: ['galaxia', 'via_lactea'], cometa: ['cometa'], lluvia: ['lluvia', 'tormenta'], fosil: ['fosil'], wifi: ['wifi', 'senal', 'internet'], huella: ['huella'],
|
|
185
185
|
telarana: ['telarana', 'arana_red'], arbol_navidad: ['arbol_navidad', 'arbol_de_navidad', 'navidad'],
|
|
186
|
+
// lo que faltaba
|
|
187
|
+
lago: ['lago', 'laguna'], burbuja: ['burbuja'], codigo: ['codigo', 'programacion', 'codigo_fuente'], musculo: ['musculo', 'biceps', 'brazo_fuerte'], doctor: ['doctor', 'doctora', 'medico'],
|
|
188
|
+
bicicleta_estatica: ['bicicleta_estatica', 'bici_estatica', 'bicicleta_fija'], confeti: ['confeti'], registro: ['registro', 'registro_sanitario', 'caja_de_registro'], cable_submarino: ['cable_submarino'],
|
|
186
189
|
};
|
|
187
190
|
const PIEZA_DE = new Map();
|
|
188
191
|
for (const [forma, terminos] of Object.entries(PIEZAS)) for (const t of terminos) PIEZA_DE.set(t, forma);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "morfeo",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.7",
|
|
4
4
|
"description": "Genera videos verticales animados (Remotion + Three.js) con voz, música y subtítulos, desde un guion en código o escrito por IA.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "SEE LICENSE IN LICENSE",
|
|
@@ -22,6 +22,8 @@ export const OBJETOS_VARIOS = [
|
|
|
22
22
|
'planta_tratamiento', 'refineria', 'pozo_petrolero', 'subestacion', 'fosa_septica', 'tubo_pvc', 'granero', 'parada', 'hospital',
|
|
23
23
|
// naturaleza, espacio y otros
|
|
24
24
|
'galaxia', 'cometa', 'lluvia', 'fosil', 'wifi', 'huella', 'telarana', 'arbol_navidad',
|
|
25
|
+
// lo que faltaba
|
|
26
|
+
'lago', 'burbuja', 'codigo', 'musculo', 'doctor', 'bicicleta_estatica', 'confeti', 'registro', 'cable_submarino',
|
|
25
27
|
] as const;
|
|
26
28
|
|
|
27
29
|
const MADERA = {c: '#B8793F', r: 0.6};
|
|
@@ -782,6 +784,232 @@ export const ObjetoVario: React.FC<{forma: string; t: number; opciones?: Record<
|
|
|
782
784
|
</group>
|
|
783
785
|
</group>
|
|
784
786
|
);
|
|
787
|
+
// ------------------------------------------------------------ lo que faltaba
|
|
788
|
+
case 'lago':
|
|
789
|
+
return (
|
|
790
|
+
<group rotation={[0.5, 0, 0]} position={[0, -0.15, 0]}>
|
|
791
|
+
<Y p={[0, -0.08, 0]} rad={[1.3, 1.2]} h={0.22} c="#5FA85A" r={0.85} seg={40} />
|
|
792
|
+
<Ov p={[0.05, 0.035, 0.1]} s={[0.98, 0.02, 0.72]} c="#E3CF9A" r={0.9} />
|
|
793
|
+
<Ov p={[0.05, 0.045, 0.1]} s={[0.88, 0.02, 0.62]} c={k('#3D9BE0')} r={0.12} m={0.3} />
|
|
794
|
+
{[0, 1].map((i) => {
|
|
795
|
+
const f = (t * 0.35 + i * 0.5) % 1;
|
|
796
|
+
return (
|
|
797
|
+
<group key={i} position={[0.25, 0.07, 0.15]} scale={[0.15 + f * 0.35, 1, 0.15 + f * 0.35]}>
|
|
798
|
+
<Aro rot={[Math.PI / 2, 0, 0]} rad={1} tubo={0.03} c="#FFFFFF" o={0.7 * (1 - f)} e={0.4} />
|
|
799
|
+
</group>
|
|
800
|
+
);
|
|
801
|
+
})}
|
|
802
|
+
{([[-0.95, -0.45, 1], [-0.7, -0.75, 0.8], [0.85, -0.6, 0.9], [1.0, -0.2, 0.7], [-1.05, 0.1, 0.75]] as V3[]).map(([x, z, s], i) => (
|
|
803
|
+
<group key={i} position={[x, 0.03, z]} scale={s}>
|
|
804
|
+
<Y p={[0, 0.1, 0]} rad={0.05} h={0.2} c="#7A5A3C" r={0.9} />
|
|
805
|
+
<Y p={[0, 0.42, 0]} rad={[0.02, 0.24]} h={0.5} c="#2E8B4E" r={0.75} seg={16} />
|
|
806
|
+
<Y p={[0, 0.68, 0]} rad={[0.01, 0.17]} h={0.36} c="#2E8B4E" r={0.75} seg={16} />
|
|
807
|
+
</group>
|
|
808
|
+
))}
|
|
809
|
+
<Ov p={[0.75, 0.08, 0.72]} s={[0.16, 0.1, 0.13]} c="#8E9199" r={0.9} />
|
|
810
|
+
<Ov p={[0.55, 0.06, 0.82]} s={[0.1, 0.07, 0.09]} c="#A4A7AE" r={0.9} />
|
|
811
|
+
<group position={[-0.25, 0.09, 0.25]} rotation={[0, 0.5, 0]}>
|
|
812
|
+
<C s={[0.34, 0.07, 0.15]} c="#B8793F" r={0.6} />
|
|
813
|
+
<C p={[0, 0.045, 0]} s={[0.05, 0.02, 0.15]} c="#8A5A2E" r={0.6} />
|
|
814
|
+
</group>
|
|
815
|
+
</group>
|
|
816
|
+
);
|
|
817
|
+
case 'burbuja':
|
|
818
|
+
return (
|
|
819
|
+
<group position={[0, Math.sin(t * 1.6) * 0.05, 0]}>
|
|
820
|
+
<E rad={0.9} c={k('#9FD8FF')} o={0.3} r={0.05} m={0.2} e={0.15} />
|
|
821
|
+
<Aro rad={0.9} tubo={0.018} c="#FFFFFF" o={0.75} e={0.5} />
|
|
822
|
+
<Aro p={[0, 0, 0.42]} rot={[0, 0, 1.9]} rad={0.68} tubo={0.035} arco={0.9} c="#FFFFFF" o={0.9} e={0.7} />
|
|
823
|
+
<Ov p={[-0.36, 0.4, 0.7]} s={[0.1, 0.2, 0.03]} rot={[0.3, -0.4, 0.6]} c="#FFFFFF" o={0.85} e={0.7} />
|
|
824
|
+
<E p={[-0.5, 0.14, 0.72]} rad={0.045} c="#FFFFFF" o={0.85} e={0.7} />
|
|
825
|
+
{([[0.95, -0.75, 0.3], [-1.0, -0.55, 0.2], [0.75, 0.95, 0.16]] as V3[]).map(([x, y, r], i) => (
|
|
826
|
+
<group key={i} position={[x, y + Math.sin(t * 2 + i * 2) * 0.07, 0.2]}>
|
|
827
|
+
<E rad={r} c={k('#9FD8FF')} o={0.35} r={0.05} e={0.15} />
|
|
828
|
+
<Aro rad={r} tubo={0.012} c="#FFFFFF" o={0.75} e={0.5} />
|
|
829
|
+
</group>
|
|
830
|
+
))}
|
|
831
|
+
</group>
|
|
832
|
+
);
|
|
833
|
+
case 'codigo': {
|
|
834
|
+
const lineas: [number, number, string][] = [[0, 0.7, '#C792EA'], [1, 0.95, '#82AAFF'], [2, 0.6, '#C3E88D'], [2, 0.85, '#F78C6C'], [1, 0.4, '#82AAFF'], [0, 0.25, '#C792EA'], [0, 0.8, '#FFCB6B'], [1, 0.55, '#C3E88D']];
|
|
835
|
+
const visibles = Math.min(lineas.length, Math.floor((t * 2.2) % (lineas.length + 4)) + 1);
|
|
836
|
+
return (
|
|
837
|
+
<group rotation={[-0.08, 0, 0]}>
|
|
838
|
+
<C s={[2.3, 1.75, 0.1]} c={k('#1E2130')} r={0.5} />
|
|
839
|
+
<C p={[0, 0.76, 0.03]} s={[2.3, 0.23, 0.1]} c="#2D3148" r={0.5} />
|
|
840
|
+
{['#FF5F57', '#FEBC2E', '#28C840'].map((c, i) => (
|
|
841
|
+
<Y key={c} eje="z" p={[-0.98 + i * 0.15, 0.76, 0.085]} rad={0.045} h={0.02} c={c} e={0.3} />
|
|
842
|
+
))}
|
|
843
|
+
<C p={[-1.0, -0.12, 0.055]} s={[0.012, 1.4, 0.01]} c="#3A3F5C" />
|
|
844
|
+
{lineas.slice(0, visibles).map(([sang, largo, c], i) => (
|
|
845
|
+
<C key={i} p={[-0.88 + sang * 0.22 + largo / 2, 0.5 - i * 0.17, 0.06]} s={[largo, 0.07, 0.02]} c={c} e={0.35} r={0.4} />
|
|
846
|
+
))}
|
|
847
|
+
{Math.sin(t * 9) > 0 && visibles <= lineas.length ? (
|
|
848
|
+
<C p={[-0.82 + lineas[visibles - 1][0] * 0.22 + lineas[visibles - 1][1], 0.5 - (visibles - 1) * 0.17, 0.06]} s={[0.04, 0.11, 0.02]} c="#FFFFFF" e={0.8} />
|
|
849
|
+
) : null}
|
|
850
|
+
</group>
|
|
851
|
+
);
|
|
852
|
+
}
|
|
853
|
+
case 'musculo': {
|
|
854
|
+
const fuerza = 1 + Math.max(0, Math.sin(t * 2.4)) * 0.12;
|
|
855
|
+
const piel = k('#E0A27A');
|
|
856
|
+
return (
|
|
857
|
+
<group position={[0.05, -0.1, 0]}>
|
|
858
|
+
<Ov p={[-1.0, -0.5, 0]} s={[0.42, 0.42, 0.36]} c={piel} r={0.6} />
|
|
859
|
+
<Ov p={[-0.42, -0.5, 0]} s={[0.66, 0.3, 0.29]} c={piel} r={0.6} />
|
|
860
|
+
<Ov p={[-0.42, -0.26, 0.02]} s={[0.42, 0.3 * fuerza, 0.27]} c={piel} r={0.6} />
|
|
861
|
+
<Ov p={[0.2, -0.5, 0]} s={[0.27, 0.27, 0.26]} c={piel} r={0.6} />
|
|
862
|
+
<Ov p={[0.24, 0.1, 0]} s={[0.25, 0.6, 0.24]} rot={[0, 0, 0.06]} c={piel} r={0.6} />
|
|
863
|
+
<Ov p={[0.22, 0.86, 0]} s={[0.3, 0.27, 0.27]} c={piel} r={0.6} />
|
|
864
|
+
{[0, 1, 2, 3].map((i) => (
|
|
865
|
+
<Ov key={i} p={[0.02 + i * 0.13, 1.02, 0.08]} s={[0.075, 0.1, 0.13]} c={piel} r={0.6} />
|
|
866
|
+
))}
|
|
867
|
+
<Ov p={[0.42, 0.72, 0.16]} s={[0.1, 0.16, 0.1]} rot={[0, 0, -0.5]} c={piel} r={0.6} />
|
|
868
|
+
<Tubo pts={[[-0.72, -0.24, 0.27], [-0.42, -0.1 + (fuerza - 1), 0.3], [-0.12, -0.24, 0.27]]} rad={0.012} c="#B5754F" r={0.7} />
|
|
869
|
+
</group>
|
|
870
|
+
);
|
|
871
|
+
}
|
|
872
|
+
case 'doctor':
|
|
873
|
+
return (
|
|
874
|
+
<group position={[0, -0.05, 0]}>
|
|
875
|
+
{[-1, 1].map((l) => (
|
|
876
|
+
<group key={l}>
|
|
877
|
+
<C p={[l * 0.17, -0.88, 0]} s={[0.22, 0.6, 0.24]} c="#2F4A7A" r={0.7} />
|
|
878
|
+
<C p={[l * 0.17, -1.2, 0.05]} s={[0.24, 0.1, 0.36]} c="#1B1C22" r={0.5} />
|
|
879
|
+
<Y p={[l * 0.52, 0.02, 0]} rot={[0, 0, l * 0.16]} rad={0.11} h={0.85} c={k('#F7F8FA')} r={0.6} />
|
|
880
|
+
<E p={[l * 0.6, -0.45, 0]} rad={0.11} c="#E0A27A" r={0.6} />
|
|
881
|
+
</group>
|
|
882
|
+
))}
|
|
883
|
+
<Y p={[0, -0.08, 0]} rad={[0.36, 0.46]} h={1.1} c={k('#F7F8FA')} r={0.6} />
|
|
884
|
+
<C p={[0, 0.2, 0.3]} s={[0.2, 0.5, 0.2]} c="#6EC6C0" r={0.6} />
|
|
885
|
+
<C p={[0, -0.25, 0.42]} s={[0.02, 0.7, 0.02]} c="#C9CED6" />
|
|
886
|
+
<C p={[0.24, 0.02, 0.4]} s={[0.17, 0.15, 0.03]} c="#E8EAEE" r={0.6} />
|
|
887
|
+
<C p={[0.24, 0.02, 0.42]} s={[0.1, 0.035, 0.02]} c="#E5484D" e={0.3} />
|
|
888
|
+
<C p={[0.24, 0.02, 0.42]} s={[0.035, 0.1, 0.02]} c="#E5484D" e={0.3} />
|
|
889
|
+
<Y p={[0, 0.52, 0]} rad={0.13} h={0.14} c="#E0A27A" r={0.6} />
|
|
890
|
+
<E p={[0, 0.88, 0]} rad={0.37} c="#E0A27A" r={0.6} />
|
|
891
|
+
<Ov p={[0, 1.02, -0.05]} s={[0.39, 0.28, 0.38]} c="#3A2A1C" r={0.8} />
|
|
892
|
+
{[-1, 1].map((l) => (
|
|
893
|
+
<E key={l} p={[l * 0.13, 0.9, 0.34]} rad={0.04} c="#1B1C22" r={0.3} />
|
|
894
|
+
))}
|
|
895
|
+
<Aro p={[0, 0.82, 0.3]} rot={[0, 0, Math.PI + 0.9]} rad={0.13} tubo={0.022} arco={1.34} c="#8A4B3A" />
|
|
896
|
+
<Aro p={[0, 0.36, 0.22]} rot={[0.5, 0, Math.PI]} rad={0.27} tubo={0.022} arco={Math.PI} c="#2A2D36" r={0.4} />
|
|
897
|
+
<Y eje="z" p={[0.02, 0.03, 0.43]} rad={0.07} h={0.04} {...ACERO} />
|
|
898
|
+
</group>
|
|
899
|
+
);
|
|
900
|
+
case 'bicicleta_estatica':
|
|
901
|
+
return (
|
|
902
|
+
<group position={[0, -0.1, 0]}>
|
|
903
|
+
{[-0.8, 0.8].map((x) => (
|
|
904
|
+
<C key={x} p={[x, -1.02, 0]} s={[0.14, 0.09, 0.9]} c="#1B1C22" r={0.5} />
|
|
905
|
+
))}
|
|
906
|
+
<C p={[0, -0.98, 0]} s={[1.7, 0.09, 0.12]} c={k('#D7372F')} r={0.4} />
|
|
907
|
+
<Tubo pts={[[-0.45, -0.95, 0], [-0.4, -0.2, 0], [-0.52, 0.42, 0]]} rad={0.055} c={k('#D7372F')} r={0.4} />
|
|
908
|
+
<Tubo pts={[[-0.4, -0.3, 0], [0.2, -0.45, 0], [0.62, -0.5, 0]]} rad={0.055} c={k('#D7372F')} r={0.4} />
|
|
909
|
+
<Tubo pts={[[0.62, -0.95, 0], [0.6, -0.1, 0], [0.42, 0.72, 0]]} rad={0.055} c={k('#D7372F')} r={0.4} />
|
|
910
|
+
<Ov p={[-0.58, 0.5, 0]} s={[0.3, 0.07, 0.17]} c="#1B1C22" r={0.5} />
|
|
911
|
+
<Y eje="z" p={[0.4, 0.78, 0]} rad={0.035} h={0.7} c="#1B1C22" r={0.5} />
|
|
912
|
+
{[-1, 1].map((l) => (
|
|
913
|
+
<Y key={l} eje="x" p={[0.3, 0.78, l * 0.34]} rad={0.04} h={0.26} c="#1B1C22" r={0.5} />
|
|
914
|
+
))}
|
|
915
|
+
<C p={[0.5, 0.92, 0]} rot={[0, 0, 0.5]} s={[0.05, 0.24, 0.32]} c="#2A2D36" r={0.4} />
|
|
916
|
+
<C p={[0.475, 0.935, 0]} rot={[0, 0, 0.5]} s={[0.02, 0.17, 0.24]} c="#59E0A0" e={0.6} />
|
|
917
|
+
<group position={[0.62, -0.5, 0]} rotation={[0, 0, -giro * 0.5]}>
|
|
918
|
+
<Y eje="z" rad={0.46} h={0.1} c="#2A2D36" r={0.35} m={0.5} seg={40} />
|
|
919
|
+
<Y eje="z" rad={0.36} h={0.12} {...ACERO} seg={40} />
|
|
920
|
+
{[0, 1, 2].map((i) => (
|
|
921
|
+
<C key={i} rot={[0, 0, (i / 3) * Math.PI]} s={[0.7, 0.07, 0.14]} c="#2A2D36" r={0.4} />
|
|
922
|
+
))}
|
|
923
|
+
<Y eje="z" rad={0.08} h={0.16} c="#1B1C22" />
|
|
924
|
+
</group>
|
|
925
|
+
<group position={[-0.05, -0.42, 0]} rotation={[0, 0, -giro * 0.5]}>
|
|
926
|
+
<Y eje="z" rad={0.13} h={0.3} {...ACERO} />
|
|
927
|
+
{[-1, 1].map((l) => (
|
|
928
|
+
<group key={l}>
|
|
929
|
+
<C p={[l * 0.14, 0, l * 0.19]} s={[0.3, 0.06, 0.04]} {...ACERO} />
|
|
930
|
+
<C p={[l * 0.28, 0, l * 0.3]} s={[0.12, 0.05, 0.2]} c="#1B1C22" r={0.5} />
|
|
931
|
+
</group>
|
|
932
|
+
))}
|
|
933
|
+
</group>
|
|
934
|
+
</group>
|
|
935
|
+
);
|
|
936
|
+
case 'confeti': {
|
|
937
|
+
const colores = ['#E5484D', '#FFD23F', '#3D7BFF', '#2EC27E', '#C061CB', '#FF8A3D'];
|
|
938
|
+
return (
|
|
939
|
+
<group>
|
|
940
|
+
<group position={[-0.75, -0.85, 0]} rotation={[0, 0, -0.6]}>
|
|
941
|
+
<Y p={[0, 0, 0]} rad={[0.3, 0.04]} h={0.75} c={k('#FFD23F')} r={0.4} seg={24} />
|
|
942
|
+
{[0, 1, 2].map((i) => (
|
|
943
|
+
<Y key={i} p={[0, -0.24 + i * 0.22, 0]} rad={[0.115 + i * 0.076, 0.1 + i * 0.076]} h={0.05} c="#E5484D" r={0.4} seg={24} />
|
|
944
|
+
))}
|
|
945
|
+
</group>
|
|
946
|
+
{Array.from({length: 46}, (_, i) => {
|
|
947
|
+
const f = (t * (0.22 + azar(i) * 0.14) + azar(i * 7)) % 1;
|
|
948
|
+
const a = -0.2 + azar(i * 3) * 1.5;
|
|
949
|
+
const d = 0.5 + azar(i * 11) * 1.7;
|
|
950
|
+
const x = -0.55 + Math.cos(a) * d * Math.min(1, f * 2.2);
|
|
951
|
+
const y = -0.55 + Math.sin(a) * d * Math.min(1, f * 2.2) - Math.max(0, f - 0.35) ** 2 * 2.6;
|
|
952
|
+
return (
|
|
953
|
+
<mesh key={i} position={[x, y, (azar(i * 13) - 0.5) * 0.9]} rotation={[t * 3 + i, t * 2.3 + i * 2, i]} scale={f > 0.92 ? (1 - f) / 0.08 : 1}>
|
|
954
|
+
{i % 4 === 0 ? <cylinderGeometry args={[0.05, 0.05, 0.012, 12]} /> : <boxGeometry args={[0.11, 0.06, 0.012]} />}
|
|
955
|
+
<meshStandardMaterial color={colores[i % colores.length]} emissive={colores[i % colores.length]} emissiveIntensity={0.25} roughness={0.5} side={THREE.DoubleSide} />
|
|
956
|
+
</mesh>
|
|
957
|
+
);
|
|
958
|
+
})}
|
|
959
|
+
</group>
|
|
960
|
+
);
|
|
961
|
+
}
|
|
962
|
+
case 'registro':
|
|
963
|
+
// corte: sin la pared ni el suelo de enfrente, para ver el canal y los tubos
|
|
964
|
+
return (
|
|
965
|
+
<group rotation={[0.3, 0.3, 0]} position={[0, 0.1, 0]}>
|
|
966
|
+
{([[-1.05, -0.1, 0.55, 2.0], [1.05, -0.1, 0.55, 2.0], [0, -0.95, 2.65, 0.5]] as [number, number, number, number][]).map(([x, z, sx, sz], i) => (
|
|
967
|
+
<group key={i}>
|
|
968
|
+
<C p={[x, 0.3, z]} s={[sx, 0.14, sz]} c="#7DB46C" r={0.9} />
|
|
969
|
+
<C p={[x, -0.25, z]} s={[sx, 0.96, sz]} c="#9B7653" r={0.95} />
|
|
970
|
+
</group>
|
|
971
|
+
))}
|
|
972
|
+
{([[-0.68, 0, 0.16, 1.52], [0.68, 0, 0.16, 1.52], [0, -0.68, 1.2, 0.16]] as [number, number, number, number][]).map(([x, z, sx, sz], i) => (
|
|
973
|
+
<C key={i} p={[x, -0.15, z]} s={[sx, 1.1, sz]} c={k('#C4C7CD')} r={0.9} />
|
|
974
|
+
))}
|
|
975
|
+
<C p={[0, -0.66, 0]} s={[1.52, 0.14, 1.52]} c="#A9ACB3" r={0.9} />
|
|
976
|
+
<C p={[0, -0.54, 0.25]} s={[1.2, 0.12, 0.34]} c="#3D9BE0" r={0.15} e={0.25} />
|
|
977
|
+
{[-1, 1].map((l) => (
|
|
978
|
+
<group key={l}>
|
|
979
|
+
<Y eje="x" p={[l * 1.0, -0.4, 0.25]} rad={0.2} h={0.8} c="#E0762E" r={0.5} />
|
|
980
|
+
<Y eje="x" p={[l * 0.58, -0.4, 0.25]} rad={0.24} h={0.08} c="#C9601F" r={0.5} />
|
|
981
|
+
<Y eje="x" p={[l * 1.41, -0.4, 0.25]} rad={0.15} h={0.02} c="#5A2E10" r={0.8} />
|
|
982
|
+
</group>
|
|
983
|
+
))}
|
|
984
|
+
<group position={[-0.28, 0.46, -0.3]} rotation={[0, 0.25, 0]}>
|
|
985
|
+
<C s={[1.3, 0.09, 1.3]} c="#3F434C" m={0.6} r={0.45} />
|
|
986
|
+
{Array.from({length: 16}, (_, i) => (
|
|
987
|
+
<C key={i} p={[-0.45 + (i % 4) * 0.3, 0.055, -0.45 + Math.floor(i / 4) * 0.3]} s={[0.2, 0.03, 0.2]} c="#5A5F6B" m={0.6} r={0.45} />
|
|
988
|
+
))}
|
|
989
|
+
</group>
|
|
990
|
+
</group>
|
|
991
|
+
);
|
|
992
|
+
case 'cable_submarino': {
|
|
993
|
+
const fibras = ['#3D7BFF', '#FFD23F', '#2EC27E', '#E5484D', '#F7F8FA', '#C061CB'];
|
|
994
|
+
return (
|
|
995
|
+
<group rotation={[0.12, -0.5, 0.1]} position={[-0.05, 0, 0]}>
|
|
996
|
+
<Y eje="x" p={[-0.85, 0, 0]} rad={0.62} h={0.9} c={k('#1B1C22')} r={0.6} seg={36} />
|
|
997
|
+
<Y eje="x" p={[-0.6, 0, 0]} rad={0.44} h={1.4} c="#3A3D45" r={0.7} seg={36} />
|
|
998
|
+
{Array.from({length: 16}, (_, i) => {
|
|
999
|
+
const a = (i / 16) * Math.PI * 2;
|
|
1000
|
+
return <Y key={i} eje="x" p={[-0.58, Math.cos(a) * 0.48, Math.sin(a) * 0.48]} rad={0.085} h={1.45} {...ACERO} seg={12} />;
|
|
1001
|
+
})}
|
|
1002
|
+
<Y eje="x" p={[-0.38, 0, 0]} rad={0.34} h={1.85} c="#C8733A" m={0.85} r={0.3} seg={36} />
|
|
1003
|
+
<Y eje="x" p={[-0.2, 0, 0]} rad={0.25} h={2.2} c="#F1EEE6" r={0.55} seg={36} />
|
|
1004
|
+
<Y eje="x" p={[-0.05, 0, 0]} rad={0.15} h={2.5} {...ACERO} seg={28} />
|
|
1005
|
+
{fibras.map((c, i) => {
|
|
1006
|
+
const a = (i / fibras.length) * Math.PI * 2;
|
|
1007
|
+
const brillo = 0.5 + 0.5 * Math.max(0, Math.sin(t * 6 - i * 1.1));
|
|
1008
|
+
return <Tubo key={c} pts={[[1.15, Math.cos(a) * 0.06, Math.sin(a) * 0.06], [1.35, Math.cos(a) * 0.1, Math.sin(a) * 0.1], [1.6, Math.cos(a) * 0.3, Math.sin(a) * 0.3]]} rad={0.028} c={c} e={brillo} r={0.3} />;
|
|
1009
|
+
})}
|
|
1010
|
+
</group>
|
|
1011
|
+
);
|
|
1012
|
+
}
|
|
785
1013
|
default:
|
|
786
1014
|
return null;
|
|
787
1015
|
}
|