Compare commits

...

82 Commits

Author SHA1 Message Date
Tonton Th
c37530d999 reglage texture 2026-03-04 21:40:09 +01:00
Tonton Th
15849c4aa2 ajustement horloge double 2026-03-04 21:39:25 +01:00
Tonton Th
3f57aec353 another another camera twiddling 2026-03-03 19:42:05 +01:00
Tonton Th
90562d2ce6 camera tuning 2026-03-01 21:09:10 +01:00
Tonton Th
daaa8eeb01 better metadata in vidz 2026-02-27 22:38:56 +01:00
Tonton Th
35e6c0dfb5 camera change 2026-02-25 14:14:45 +01:00
Tonton Th
6ee8932ba4 typographic perversity 2026-02-20 23:20:17 +01:00
Tonton Th
a3558cc1db adjust cameras before the next rendering batch 2026-02-20 23:14:10 +01:00
Tonton Th
2eea147f82 another bunch of little changes 2026-02-20 12:54:57 +01:00
Tonton Th
4dca1e7d79 geometry tuning 2026-02-20 12:52:50 +01:00
Tonton Th
0207fc942b add the "Vase" concept 2026-02-20 12:51:23 +01:00
Tonton Th
59c2b266ef small changes 2026-02-19 13:04:02 +01:00
Tonton Th
f6104c8b5d that was a bad idea 2026-02-18 19:19:20 +01:00
Tonton Th
676cf5bd87 clean the brotch 2026-02-18 02:02:10 +01:00
Tonton Th
c0a0d2467e hardening the camera 2026-02-17 23:15:31 +01:00
Tonton Th
5e5d0ae116 fix an excessive psychedelic effect 2026-02-17 23:14:51 +01:00
Tonton Th
b6ac4f8ce5 dynamic and camera tuning 2026-02-17 22:28:18 +01:00
Tonton Th
3fdfa5a0c0 swap two elements 2026-02-17 14:16:36 +01:00
Tonton Th
fd452889ea correction du planning 2026-02-17 14:16:08 +01:00
Tonton Th
b3030b886d Blob_Boxed is alive 2026-02-16 23:55:40 +01:00
Tonton Th
b246f3ba23 another try... 2026-02-16 23:53:20 +01:00
Tonton Th
27b37f17dd fix an of-by-0.2 bug 2026-02-16 19:51:47 +01:00
Tonton Th
ffd3f48b9d moving Blob_Boxed to the right file 2026-02-16 18:22:43 +01:00
Tonton Th
dfedf5f52c fine tuning 2026-02-16 18:10:58 +01:00
Tonton Th
dd4fe05229 radical change of the camera position 2026-02-16 12:44:06 +01:00
Tonton Th
0649930f7e hexablob + openbox -> boxed_blob 2026-02-15 16:12:53 +01:00
Tonton Th
606536c3f3 welcome here, hexa-patrol 2026-02-14 13:35:54 +01:00
Tonton Th
6a983ee560 add the "patrouille" sequence 2026-02-13 23:28:37 +01:00
Tonton Th
d349b23a91 fix a bug & enhance cli 2026-02-13 12:11:52 +01:00
Tonton Th
77c82f6e96 essential adjustements 2026-02-12 10:35:40 +01:00
Tonton Th
e5439eee54 nice try, but... 2026-02-12 10:21:52 +01:00
Tonton Th
fe3bdff7dd better hole borders 2026-02-11 00:00:47 +01:00
Tonton Th
f1fcebd77d a better name 2026-02-10 20:15:14 +01:00
Tonton Th
c47606438f last commits of this night 2026-02-10 04:59:43 +01:00
Tonton Th
ceb4dea907 add border to the hole 2026-02-10 04:08:49 +01:00
Tonton Th
1bef5baa93 tweak the dynamic 2026-02-10 01:21:32 +01:00
Tonton Th
2d5093eab9 changes are to small to be commited 2026-02-09 18:53:47 +01:00
Tonton Th
1ed6ce79d1 pour faire plaisir à brunus 2026-02-09 14:40:34 +01:00
Tonton Th
47a2089561 un bon gros paquet de changements :) 2026-02-09 12:29:28 +01:00
Tonton Th
9de6929b48 keep cool, bro ! 2026-02-02 14:41:01 +01:00
Tonton Th
9779b15176 slow down, bro ! 2026-02-02 14:39:38 +01:00
Tonton Th
8a6f4b3e12 + archi things 2026-01-31 09:27:58 +01:00
Tonton Th
a4025b907f add a new sequence: "around" 2026-01-26 22:23:49 +01:00
Tonton Th
957fb39ec2 add a new sequence: "around" 2026-01-26 22:22:32 +01:00
Tonton Th
438cb71b43 increase zoom-out 2026-01-25 08:42:30 +01:00
Tonton Th
d479b566b3 patch emerging tridents 2026-01-25 08:41:18 +01:00
Tonton Th
02556e71d3 commit su soir, espoir 2026-01-22 02:38:31 +01:00
Tonton Th
c08cd56637 silent superflous msg 2026-01-20 21:37:07 +01:00
Tonton Th
a51a963ba0 commit for rabbit 2026-01-16 18:29:15 +01:00
Tonton Th
77ebfd9018 some tweaks... 2026-01-15 20:30:08 +01:00
Tonton Th
4e88f481ff on the way to a new hexastar 2026-01-15 20:29:32 +01:00
Tonton Th
f251fbb825 mettre le Repere au bon endroit 2026-01-14 15:34:39 +01:00
Tonton Th
0c4aa1a31c a lot of patches 2026-01-14 14:01:20 +01:00
Tonton Th
83c8ce3f79 comment off an useless message 2026-01-14 13:50:54 +01:00
Tonton Th
243490996f slow down render for // builds 2026-01-11 13:49:18 +01:00
Tonton Th
5ae1cd149c small changes to the cam 2026-01-11 13:02:05 +01:00
Tonton Th
32eb08a0c1 typographic consmetic changes 2026-01-11 12:48:15 +01:00
Tonton Th
80044acb4c a little more doc 2026-01-11 12:22:21 +01:00
Tonton Th
6350c799db tuning 2026-01-09 20:28:50 +01:00
Tonton Th
fb126ec1b0 add comment & fix a bug ? 2026-01-08 12:01:28 +01:00
Tonton Th
eda56a4ac1 downsizing hexastar 2026-01-08 11:43:50 +01:00
Tonton Th
6032290f5e ops 2026-01-08 11:41:54 +01:00
Tonton Th
722795a45f adjust new objects 2026-01-06 06:47:42 +01:00
Tonton Th
e321cd510b oups camera 2026-01-06 06:46:10 +01:00
Tonton Th
297d0f478b adjuste the cam 2026-01-06 06:45:33 +01:00
Tonton Th
324198eb3f cosmetic 2026-01-06 06:44:43 +01:00
Tonton Th
4efc950a50 smaller is better 2026-01-06 06:44:04 +01:00
Tonton Th
ad0272bff1 rotación de la estrella 2026-01-06 06:42:37 +01:00
Tonton Th
bdd3a53a8c oups again... 2026-01-06 06:40:19 +01:00
Tonton Th
cf3fa8f1ce oupsss... 2026-01-06 06:12:44 +01:00
Tonton Th
0803d45d5c little cleanup 2026-01-05 12:38:25 +01:00
Tonton Th
111a7519f1 commits du dimanche soir, espoir 2026-01-04 23:01:37 +01:00
Tonton Th
90894f8008 explorations 2026-01-04 04:16:52 +01:00
Tonton Th
b0c0cc3140 little cosmetic change 2026-01-03 12:53:54 +01:00
Tonton Th
f5eb6cfe78 omfg, a bug in the Makefile ! 2026-01-03 08:39:40 +01:00
Tonton Th
36f1e1df37 fix an include order bug 2026-01-03 08:30:54 +01:00
Tonton Th
a575e428b2 big revamping, part 1 2026-01-02 21:15:55 +01:00
Tonton Th
f5b2e1c227 cosmetic again 2026-01-02 19:07:32 +01:00
Tonton Th
75cb2ff594 add a todo list 2026-01-02 19:05:16 +01:00
Tonton Th
2b92b3d584 more doc is better 2026-01-02 12:43:30 +01:00
Tonton Th
ebeb9abf11 l'anneau va tourner plus vite 2026-01-02 12:33:25 +01:00
Tonton Th
30ad204b5e more work on hexabenz 2026-01-01 08:46:21 +01:00
47 changed files with 1389 additions and 633 deletions

View File

@@ -4,7 +4,8 @@ DIMS = -W1600 -H1200
POVOPT = +q9 +A0.05 -WT2 Declare=NbFrames=450 -d
POVDEP = contexte.inc hexacone.inc hexabenz.inc \
hexastar.inc \
all.inc hexastar.inc \
architecture.inc \
globals.inc hexawood.inc datas/hf.png \
dynamic.inc trident.inc groundbase.inc \
gadgets.inc xperiment.inc
@@ -20,9 +21,16 @@ PNG: essai.png scene.png topview.png passage.png \
hexacone.png remote.png survol.png cutoff.png \
carto.png hexawood.png bubblecut.png \
circular.png panoramic.png splined.png \
trident.png approche.png
trident.png approche.png hexastar.png \
patrouille.png
echo "make PNG ck=$(CK) done" >> WS/log
patrouille.png: patrouille.pov Makefile $(POVDEP)
povray $(POVOPT) $(DIMS) -K$(CK) -i$< -o$@
around.png: around.pov Makefile $(POVDEP)
povray $(POVOPT) $(DIMS) -K$(CK) -i$< -o$@
approche.png: approche.pov Makefile $(POVDEP)
povray $(POVOPT) $(DIMS) -K$(CK) -i$< -o$@
@@ -41,7 +49,7 @@ cutoff.png: cutoff.pov Makefile $(POVDEP)
bubblecut.png: bubblecut.pov Makefile $(POVDEP)
povray $(POVOPT) $(DIMS) -K$(CK) -i$< -o$@
essai.png: essai.pov Makefile $(POVDEP)
essai.png: essai.pov Makefile $(POVDEP) hexastar.inc
povray $(POVOPT) $(DIMS) -K$(CK) -i$< -o$@
noise.png: essai.png Makefile
convert -verbose -noise 45x3 $< $@
@@ -55,6 +63,9 @@ hexacone.png: hexacone.pov Makefile $(POVDEP)
hexawood.png: hexawood.pov Makefile $(POVDEP)
povray $(POVOPT) $(DIMS) +K$(CK) -i$< -o$@
hexastar.png: hexastar.pov Makefile $(POVDEP)
povray $(POVOPT) $(DIMS) +K$(CK) -i$< -o$@
passage.png: passage.pov Makefile $(POVDEP)
povray $(POVOPT) $(DIMS) -K$(CK) -i$< -o$@

View File

@@ -22,14 +22,16 @@ Une bonne maitrise des scripts shell (en Bash) sera un plus.
## Utilisation
Il y a deux choses que l'on peut tracer :
Il y a deux choses que l'on peut raytracer :
les images fixes, qui sont traitées
par un classique [`Makefile`](./Makefile) et les séquences animées
produites par un [script shell](./mkloop.sh).
Avant toute chose, vous devrez vérifier la présence de plusieurs
répertoires :
d'un coté `./frames/<name>` pour stocker les images calculées et
D'un coté `./frames/<name>` pour stocker les images calculées
de chaque séquence et
./frames/Spool` pour l'assemblage de la vidéo intégrale :
```
@@ -42,7 +44,8 @@ frames/
├── Spool
└── topview
```
et de l'autre coté `./WS/` pour ranger les fichiers de travail.
et de l'autre coté `./WS/` pour ranger les
[fichiers de travail](./WS/README.md).
Ensuite, il faut assembler toutes ces images calculées en une vidéo
de qualité (ce que fait je très empiriquement). Tout d'abord, on encode
@@ -50,18 +53,22 @@ de qualité (ce que fait je très empiriquement). Tout d'abord, on encode
pour les mettre dans le grand Ternet mondial à partir de mon
[ADSL](http://maison.tth.netlib.re/pov/hexacone.html) de campagne.
Ensuite, un autre [script](./tools/linkfarmer.sh) assemble toute
les sequences dans le produit
les séquences dans le produit
[final](http://maison.tth.netlib.re/v/hc/full.mp4), en ajoutant
générique et inter-titres.
À vous de jouer maintenant.
À vous de jouer maintenant : *« Fork & Enjoy »*
## Contact
* La [mailing-list du tetalab](https://lists.tetalab.org/postorius/lists/tetalab.tetalab.org/) ;
* Par IRC, canal `#tetalab` sur le réseau de [Libera](https://libera.chat/).
* Par IRC, canal `#tetalab` ou `#povray` sur le réseau de [Libera](https://libera.chat/).
* Dans [Mastodon](https://mastodon.tetaneutral.net/@tth) et [Peertube](https://tube.interhacker.space/c/tth_channel/videos)
## La suite
Il reste bien des choses à faire : [TODO](TODO.md) list.
**Le gras c'est la vie** (proverbe local)

30
TODO.md Normal file
View File

@@ -0,0 +1,30 @@
# TODO hexagoniste
## Urgent
- finaliser le revamping du début de 2026.
## Outils
- automatiser la création des répertoires dans `frames/`
- Génération de sous titres automatisée.
## Trucages
- Se remettre à (enfin) améliorer
[libtthimage](https://git.tetalab.org/tTh/libtthimage).
- Relire le livre de Brunus sur ImageMagick.
## Audio
- Songer à un cadriciel pour la piste son.
- Trouver un compositeur et les musiciens.
- Étudier à fond la documentation de `sox`
## ... en bref ...
Il reste encore beaucoup de chemin à parcourir, mais la
route est bien plaisante.
Je me permet néamoins de déplorer le peu de présence de
[povistes](https://mastodon.tetaneutral.net/tags/Povray) dans
mon entourage.

31
all.inc
View File

@@ -0,0 +1,31 @@
/*
* Tous les includes dans le bon ordre
*/
#debug "+++++++++++++++++++++++++++ DEBUT ALL\n"
// tous les petits elements
#include "gadgets.inc"
// les hexatrucs qui sont OK
#include "hexacone.inc"
#include "hexabenz.inc"
#include "hexawood.inc"
#include "trident.inc"
#include "hexastar.inc"
// les machins avec des bugs
#include "architecture.inc"
// les constructions en chantier
#include "xperiment.inc"
// et on assemble tout !
#include "contexte.inc"
// les machins qui bougent
#if ( ! NO_DYNAMIC )
#include "dynamic.inc"
#end
#debug "+++++++++++++++++++++++++++ FIN ALL\n"

View File

@@ -8,22 +8,18 @@
#include "globals.inc"
#include "contexte.inc"
#include "hexacone.inc"
#include "hexabenz.inc"
#include "hexawood.inc"
#include "trident.inc"
#include "dynamic.inc"
#declare NO_DYNAMIC = 0;
#include "all.inc"
object { Le_Decor }
// =======================================================
#declare LocX = 0;
#declare LocY = 3.6 - NormClock;
#declare LocZ = -210 + (120 * NormClock);
#declare LocX = -0.5 + Cos_010(NormClock);
#declare LocY = 2.6 - NormClock;
#declare LocZ = -200 + (118 * NormClock);
#declare LocCam = <LocX, LocY, LocZ>;
#declare LatCam = <0, 1.2, 0>;
#declare LatCam = <0, 0.92+NormClock, 0>;
// object { Repere scale 5 translate Interpolate(LocCam, LatCam, 0.50) }

106
architecture.inc Normal file
View File

@@ -0,0 +1,106 @@
/*
* H E X A C O N E - A R C H I T E C T U R E
* nouveau projet du Thu Dec 5 11:37:05 AM UTC 2024
*
* file created on Sat Jan 31 07:07:28 AM UTC 2026
*/
// ===========================================================
#declare SzC = 0.3;
#macro Base_Col_A ()
merge {
box { <-SzC, 0, -SzC>, <SzC, 0.222, SzC> }
#local B = SzC * 0.7;
box { <-B, 0, -B>, <B, 0.333, B> }
#local R = rand(Rng1);
#if (R < 0.33)
texture { T_Stone25 }
#else
texture { T_Stone26 }
#end
}
#end
// -----------------------------------------------------------
#macro Haut_Col_A ()
difference {
#local S = SzC * 0.87;
box { <-S, 0, -S>, <S, 0.222, S> }
#local E = SzC + 1;
#local R = S * 0.42;
cylinder { <-E, 0, S>, <E, 0, S>, R }
cylinder { <-E, 0, -S>, <E, 0, -S>, R }
#local R = rand(Rng1);
#if (R < 0.33)
texture { T_Stone27 }
#else
texture { T_Stone28 }
#end
}
#end
// -----------------------------------------------------------
#macro Fut_Col_A (H)
object {
cylinder { 0, H*y, 0.15 }
#local R = rand(Rng1);
#if (R < 0.43)
texture { T_Stone29 }
#else
texture { T_Stone34 scale 3 }
#end
}
#end
// -----------------------------------------------------------
#macro Colonne_A (H)
union {
object { Haut_Col_A () translate y*H }
object { Fut_Col_A (H) }
object { Base_Col_A () }
}
#end
// ===========================================================
// bon, on a un pilier/colonne donc de quoi poser
// dessus un linteau pour avoir un genre de portique
// pour remplacer les arches de l'approche.
#macro Linteau_A (Lg, Epp)
merge {
#local L = Lg + 0.42;
#local K = 0.28;
box { <-L, 0, -K>, <L, Epp, K> }
cylinder { <0, Epp, -K*0.9>, <0, Epp, K*0.9>, K }
#local R = rand(Rng1);
#if (R < 0.63)
texture { T_Grnt6 scale 4 }
#else
texture { T_Stone34 scale 3+rand(Rng1) }
#end
}
#end // macro
// -----------------------------------------------------------
#macro Linteau_B (Lg, Epp)
merge {
#local L = Lg + 0.20;
#local K = 0.36;
box { <-L, 0, -K>, <L, Epp, K> }
cylinder { <0, Epp, -K*0.9>, <0, Epp, K*0.9>, K }
texture { T_WIP_dents rotate y*(rand(Rng1)*77) }
}
#end // macro
// ===========================================================
#macro Portique_A ()
union {
#local Larg = 2.8;
#local Haut = 3.4;
object { Colonne_A (Haut) translate -x*Larg }
object { Colonne_A (Haut) translate x*Larg }
#local R = rand(Rng1);
#if (R < 0.80)
object { Linteau_A (Larg,0.26) translate y*(Haut+0.20) }
#else
object { Linteau_B (Larg,0.28) translate y*(Haut+0.20) }
#end
}
#end // macro
// ===========================================================

31
around.pov Normal file
View File

@@ -0,0 +1,31 @@
/*
* H E X A C O N E - A R O U N D
* nouveau projet du Thu Dec 5 11:37:05 AM UTC 2024
*
* scene imaginée le 26 janvier 2026
*/
#version 3.7;
#include "globals.inc"
#declare NO_DYNAMIC = 0;
#include "all.inc"
object { Le_Decor }
// =======================================================
#declare R_around = 120;
#declare CK = 2.9 + (3.141592654 * NormClock);
#declare CamX = R_around * cos(CK);
#declare CamY = 15 + (6*Cos_010(NormClock));
#declare CamZ = R_around * 1.8 * sin(CK);
camera {
location <CamX, CamY, CamZ>
look_at <0, 0.5 + NormClock, 0>
right <image_width/image_height, 0, 0>
angle 36
}

View File

@@ -7,13 +7,8 @@
#include "globals.inc"
#include "contexte.inc"
#include "hexacone.inc"
#include "hexabenz.inc"
#include "hexawood.inc"
#include "trident.inc"
#include "dynamic.inc"
#declare NO_DYNAMIC = 1;
#include "all.inc"
// =======================================================
@@ -37,7 +32,7 @@ sphere { Position, 0.020 translate y*TY + POS_Cutoff
texture { T_WIP_alert } }
*/
/* this one is for debugging */
/* those are for for debugging */
// object { OpenBox (1, 0.05) translate y*TY + POS_Cutoff }
// object { Repere translate y*2.8 + POS_Cutoff }

View File

@@ -9,30 +9,28 @@
#include "globals.inc"
#include "contexte.inc"
#include "hexacone.inc"
#include "hexabenz.inc"
#include "hexawood.inc"
#include "trident.inc"
#include "xperiment.inc"
#include "dynamic.inc"
#declare NO_DYNAMIC = 0;
#include "all.inc"
// ---------------------------------------------------------
object { Repere scale 20 translate y*20 }
// ---------------------------------------------------------
// dessiner une grille
#for (Foo, -140, 140, 10)
#local H = 0.17;
cylinder { <-150, H, Foo>, <150, H, Foo>, 0.06 }
cylinder { <Foo, H, -150>, <Foo, H, 150>, 0.06 }
#end
union {
#for (Foo, -140, 140, 10)
#local H = 0.07;
#local Ra = 0.05;
cylinder { <-150, H, Foo>, <150, H, Foo>, Ra }
cylinder { <Foo, H, -150>, <Foo, H, 150>, Ra }
#end
pigment { color Black }
}
// ---------------------------------------------------------
object { Repere scale 10 translate y*10 }
object { Le_Decor }
camera {
location <45, 179+(76*NormClock), 18-(17*NormClock)>
location <46, 149+(117*NormClock), 18-(12*NormClock)>
look_at <0, 1.18, 0.17 + (2.4*NormClock)>
right <image_width/image_height, 0, 0>
angle 50

View File

@@ -7,22 +7,17 @@
#include "globals.inc"
#include "contexte.inc"
#include "gadgets.inc"
#include "hexacone.inc"
#include "hexabenz.inc"
#include "hexawood.inc"
#include "trident.inc"
#declare NO_DYNAMIC = 0;
#include "all.inc"
// =======================================================
#include "dynamic.inc"
object { Le_Decor }
// =======================================================
#declare R_circ = R_circular + 0.07;
#declare CK = 1.9 + (1.23 * Cos_01(NormClock * 3.141592654));
#declare CK = 2.9 + (1.51 * Cos_01(NormClock));
#declare CamX = R_circ * cos(CK);
#declare CamY = 3.08 + abs(sin(CK/4.00));
@@ -31,12 +26,12 @@ object { Le_Decor }
#declare AV = 0.070;
#declare LatX = R_circ * 0.96 * cos(CK + AV);
#declare LatY = 2.65;
#declare LatZ = R_circ * 0.97 * sin(CK + AV);
#declare LatZ = R_circ * 0.95 * sin(CK + AV);
camera {
location <CamX, CamY, CamZ>
look_at <LatX, LatY, LatZ>
right <image_width/image_height, 0, 0>
angle 60
angle 64
}

View File

@@ -4,29 +4,37 @@
/* voir aussi le fichier 'globals.inc' */
/* ======================================================= */
// #debug "+++++++++++++++++++++ debut contexte\n"
/* ======================================================= */
#include "groundbase.inc"
#include "xperiment.inc"
#include "gadgets.inc"
#macro Trois_Portiques (Dist)
union {
object { Portique_A () }
object { Portique_A () scale <1, 1.2, 1> translate z*11 }
object { Portique_A () rotate y*11 translate z*22 }
// XXX scale 1.85
}
#end // macro trois portiques
/* ======================================================= */
/*
* essai du 12 mars 2025
*/
#declare RedB_0_X = 19;
#declare RedB_0_Z = 29;
#declare RedB_0_X = 19; #declare RedB_0_Z = 29;
#declare RedB_1_X = -24;
#declare RedB_1_Z = 8;
#declare RedB_1_X = -24; #declare RedB_1_Z = 8;
#declare RedB_2_X = 39;
#declare RedB_2_Z = -14;
// XXX #declare RedB_2_X = 36; #declare RedB_2_Z = -21;
#declare RedB_2_X = 2; #declare RedB_2_Z = -40;
#declare RedB_3_X = 42; #declare RedB_3_Z = -5;
#declare Pos_RedB_0 = <RedB_0_X, 0, RedB_0_Z>;
#declare Pos_RedB_1 = <RedB_1_X, 0, RedB_1_Z>;
#declare Pos_RedB_2 = <RedB_2_X, 0, RedB_2_Z>;
#declare Pos_RedB_3 = <RedB_3_X, 0, RedB_3_Z>;
#macro RoundBase_0 ( T )
difference {
@@ -35,7 +43,7 @@ difference {
cylinder { 0, y*0.36, R*0.99 }
cone { y*0.37, R*0.80, y*0.425, R*0.83 }
#for (Foo, 0, 359, 10)
#if (rand(Rng1) > 0.16)
#if (rand(Rng1) > 0.17)
#local Dx = R * sin(radians(Foo));
#local Dz = R * cos(radians(Foo));
cone { 0, 0.01, y*0.41, 0.10 translate <Dx, 0, Dz> }
@@ -56,9 +64,9 @@ union {
translate y*(H_gyro+H_gylampe+0.04)
}
#local R = rand(Rng1);
#if (R < 0.33333) texture { T_Stone25 scale 1+rand(Rng1) }
#elseif (R < 0.66666) texture { T_Stone15 scale 1+rand(Rng1) }
#else texture { T_Stone6 }
#if (R < 0.33) texture { T_Stone25 scale 1+rand(Rng1) }
#elseif (R < 0.66) texture { T_Stone15 scale 1+rand(Rng1) }
#else texture { T_Stone6 scale 1+rand(Rng1) }
#end
#undef R
}
@@ -101,7 +109,7 @@ union {
#macro Les_GyroPhares ()
union {
#local E = SzSol * 0.455;
#local E = SzSol * 0.471;
#for (Idx, 0, 359, 60)
#local Ang = radians(Idx+9.33);
#local Dx = E * sin(Ang);
@@ -114,11 +122,10 @@ union {
/* ======================================================= */
/* 11 avril 2025, je pose un grand cercle d'hexapoles
* 9 octobre 2025, je rajoute un rail circulaire
* les navettes qui circulent sont dans 'dynamic.inc'
*/
#declare Les_HexaPoles = object
{
union {
#for (Ang, 0, 359, 6)
#local De = 3.6 + (0.5*rand(Rng1));
@@ -187,39 +194,34 @@ union {
}
}
}
/* ------------------------------------------------------------ */
#declare RHBlo = 0.24;
#declare RHBlo2 = RHBlo * 0.666;
#declare HexaBlob = object
{
blob {
// threshold 0.01 + NormClock
threshold 0.01
sphere { <0, 0, 0>, RHBlo, 1 }
#local E = RHBlo * 1.210;
#local W = 0.15;
sphere { <-E, 0, 0>, RHBlo2, W }
sphere { < E, 0, 0>, RHBlo2, W }
sphere { < 0, -E, 0>, RHBlo2, W }
sphere { < 0, E, 0>, RHBlo2, W }
sphere { < 0, 0, -E>, RHBlo2, W }
sphere { < 0, 0, E>, RHBlo2, W }
}
}
/* ======================================================= */
/*
* on déclare et rempli le tableau avec la place des trous
*/
#declare UnderHoles = array[6]
/*
* on rempli le tableau avec la place des trous
*/
#ifdef (DEBUG_LEVEL)
#debug "Underholes : DEBUG_LEVEL activated\n"
#fopen Trid "WS/underholes.log" write
#end // if debulevel
#for (Idx, 0, 5)
#local Angle = (Idx + 0.19) * 1.090;
#local Px = sin(Angle) * (SzSol * 0.97);
#local Pz = cos(Angle) * (SzSol * 1.04);
#local Angle = (Idx + 0.19) * 1.09; // magic numbers ?
#local Kr = 5 - (rand(Rng1)*2.5);
#local Px = Kr + sin(Angle) * (SzSol * 0.98);
#local Kr = 5 - (rand(Rng1)*2.5);
#local Pz = Kr + cos(Angle) * (SzSol * 1.02);
#ifdef (DEBUG_LEVEL)
#write (Trid, "Def_", Idx, " ", NormClock, " ", Px, " ", Pz, "\n")
#end
// put the coords in the array.
#declare UnderHoles[Idx] = <Px, 0, Pz>;
#end // for loop
#ifdef (DEBUG_LEVEL)
#fclose Trid
#end
#declare Underground = object
@@ -227,27 +229,30 @@ blob {
difference {
// plane { y, 0 }
#local Big = 300;
box { <-Big, -0.19, -Big>, < Big, 0.0000, Big> }
box { <-Big, -0.21, -Big>, < Big, 0.0000, Big> }
#undef Big
#for (Foo, 0, 5)
cylinder { -y*5, y*5, 3.1 translate UnderHoles[Foo] }
cylinder { -y*5, y*5, R_hole translate UnderHoles[Foo] }
#end
texture { Ground_Texture }
}
}
/* ======================================================= */
#declare Repere = object
/* 10 fev 2026, on place des bordures autour des trous */
/* voir aussi -> xperiment.inc */
#declare Les_Bordures = object
{
union {
#local R = 0.01555555;
cylinder { 0, <1, 0, 0>, R pigment { color Red } }
cylinder { 0, <0, 1, 0>, R pigment { color Green } }
cylinder { 0, <0, 0, 1>, R pigment { color Blue } }
#for (foo, 0, 5)
// #local YHB = (0.08 + (0.5*rand(Rng1)) * y);
#if (rand(Rng1) < 0.5)
object { HoleBorder_A (1.04) translate UnderHoles[foo] }
#else
object { HoleBorder_B (1.06) translate UnderHoles[foo] }
#end // if
#end // for
}
}
/* ======================================================= */
/*
* nouvel éclairage du 10 février 2025
@@ -282,12 +287,12 @@ rotate -19 * y
union {
/* a l'interieur du 'circular' */
object { Chose () translate <-25, 0, -31> }
object { Chose () translate < 20, 0, -32> }
object { Chose () translate < 20, 0, -36> }
/* a l'exterieur du 'circular' */
#for (foo, 0, 359, 18)
#local CK = radians(foo + (9*rand(Rng1)));
#local DX = 66 * sin(CK);
#local DZ = 64 * cos(CK);
#local DX = 76 * sin(CK);
#local DZ = 74 * cos(CK);
object { Chose () translate < DX, 0, DZ> } // XXX
#end
}
@@ -335,9 +340,9 @@ sky_sphere {
gradient y
color_map {
[ 0.2 color Gray20 ]
[ 0.4 color rgb <.5, .45, .4> ]
[ 0.7 color Gray40 ]
[ 0.9 color rgb <.5, .5, .45> ]
[ 0.4 color rgb <.5, .45, .43> ]
[ 0.7 color Gray50 ]
[ 0.9 color rgb <.5, .5, .47> ]
[ 1.0 color Gray20 ]
}
turbulence 3.14159 + 0.84 * Cos_010(NormClock)
@@ -356,32 +361,49 @@ sky_sphere {
{
union {
object { Underground }
object { Les_Bordures }
#include "groundbase.inc"
object { La_GroundBase }
object { RoundBase_0 (T_Beton_1)
translate <RedB_0_X, 0, RedB_0_Z> }
object { RoundBase_0 (T_Beton_2)
translate <RedB_1_X, 0, RedB_1_Z> }
object { RoundBase_0 (T_Planete_B)
translate <RedB_2_X, 0, RedB_2_Z> }
object { RoundBase_0 (T_Planete_A)
translate <RedB_3_X, 0, RedB_3_Z> }
// object { Les_Lumieres }
object { QuadriLight }
object { Les_GyroPhares () }
object { Les_HexaPoles }
object { Horloge rotate y*27 translate < 3, 0, -30> }
object { HorlogeDouble rotate y*(104*NormClock)
translate < 8, 0, -30> }
object { Les_Choses }
object { Les_Arches (1.9) rotate y*152 translate <-34, 0, -26> }
object { Les_Arches (1.9) rotate y*132 translate <-34, 0, -26> }
object { Les_Cahutes () rotate y*90 translate <24, 0, -10> }
// XXX object { Les_Cahutes () rotate y*17 translate <2, 0, -40> }
object { Les_Cahutes () rotate y*17 translate <37, 0, -20> }
/* les trucs dans le Y négatif */
object { Trois_Arches (1.4) scale 2.7 translate <0, 0, -121> }
/* --------- les trucs dans le Y négatif */
// object { Trois_Arches (1.4) scale 2.4 translate <0, 0, -131> }
object { Trois_Portiques (1.4) translate <0, 0, -111> }
object { OpenBox(1.5, 0.06) translate <-19, 1.49, -88> }
object { OpenBox(1.5, 0.06) translate <-18, 1.52, -104> }
object { OpenBox(1.5, 0.06) translate <-19, 1.52, -134> }
object { Les_Cahutes () translate <29, 0, -79> }
object { Les_Cahutes () translate <31, 0, -91> }
object { Les_Cahutes () translate <20, 0, -104> }
object { OpenBox(1.5, 0.06) translate <-21, 1.52, -104> }
object { OpenBox(1.5, 0.06) translate <-20, 1.52, -144> }
#for (Foo, 0, 5)
object { Les_Cahutes () translate <27, 0, -(77+Foo*11)> }
#end // for
/* --------- les trucs dans le Y positif */
// object { OpenBox(1.6, 0.11) translate <-3, 3.58, 112> }
object { Blob_Boxed scale 4 translate <-3, 3.58, 112> }
object { Blob_Boxed scale 4 rotate y*45 translate <3, 6.7, 161> }
}
}
/* ------------------------------------------------------------ */

View File

@@ -7,13 +7,8 @@
#include "globals.inc"
#include "contexte.inc"
#include "hexacone.inc"
#include "hexabenz.inc"
#include "hexawood.inc"
#include "trident.inc"
#include "dynamic.inc"
#declare NO_DYNAMIC = 0;
#include "all.inc"
// =======================================================
@@ -23,7 +18,7 @@
#declare Kbox = (2.03*NormClock);
difference {
object { HexaCone () }
object { HexaCone () rotate <9-(11*NormClock), 6, -7> }
box { -1, 1 translate z*Kbox }
translate y*TY + POS_Cutoff
}
@@ -34,7 +29,7 @@ difference {
// =======================================================
light_source {
<-24, 0.4, -1>
<-14, 0.4, -1>
colour Orange
parallel
point_at y*TY + POS_Cutoff
@@ -45,7 +40,7 @@ object { Le_Decor }
// =======================================================
#local CamX = POS_Cutoff.x + 3.5 + (3.14*Cos_01(NormClock));
#local CamY = 2.1 + (1.11*sqrt(NormClock));
#local CamY = 2.01 + (1.14*sqrt(NormClock));
#local CamZ = POS_Cutoff.z + 4.30 - (1.02*NormClock);
camera {

View File

@@ -1,12 +1,29 @@
/*
*/
// =======================================================
// rajout d'une patrouille en vol
// 2 janvier 2026
object {
#local CK = (clock / 230) - 0.75; // en radians
#local RD = 63; // rayon deplacement
#local Xp = RD * sin(CK);
#local Zp = RD * cos(CK);
#declare Loc_Patrouille = <Xp+10, 70+(11*NormClock), Zp>;
object { Patrouille }
rotate y*degrees(CK)
translate Loc_Patrouille
}
// =======================================================
// on va tenter de placer quelques trucs
// qui bougent sur le rail circulaire
#for (foo, 0, 5)
#local CK = (NormClock+(foo*0.0197)) * 4.02; // radians
#local CK = (NormClock+(foo*0.0200)) * 4.05; // radians
#declare Xpos = R_circular * sin(CK);
#declare Zpos = R_circular * cos(CK);
#declare AR = degrees(CK);
@@ -19,8 +36,11 @@ object {
/// =======================================================
/* des trucs autour des trous du sol. */
object { Les_HexaBalls rotate y*clock translate UnderHoles[2] }
object { Les_Machins rotate -y*clock translate UnderHoles[3] }
// Les_Machins --> 'gadgets.inc'
object { Les_Machins rotate -y*clock translate UnderHoles[2] }
object { Les_Machins rotate y*clock translate UnderHoles[5] }
// object { Les_HexaBalls rotate y*clock translate UnderHoles[2] }
/// =======================================================
/*
@@ -30,11 +50,11 @@ object { Les_Machins rotate -y*clock translate UnderHoles[3] }
{
#local K = 1.39;
union {
object { HexaBenz () rotate y*90 translate <-K, 1.79, 0> }
object { HexaBenz () translate < K, 1.66, 0> }
object { HexaBenz () rotate y*94 translate <-K, 1.86, 0> }
object { HexaBenz () rotate -x*7 translate < K, 1.96, 0> }
}
}
object { BiBenz rotate -y*(clock*0.26) translate Pos_RedB_0 }
object { BiBenz rotate -y*(clock*0.28) translate Pos_RedB_0 }
/*
* deux hexacones se tournent autour
@@ -44,7 +64,7 @@ object { BiBenz rotate -y*(clock*0.26) translate Pos_RedB_0 }
#local K = 1.27;
union {
object { HexaCone () rotate y*90 translate <-K, 1.7, 0> }
object { HexaCone () rotate <4, 1, 7> translate < K, 1.9, 0> }
object { HexaCone () rotate <9, 1, 7> translate < K, 1.9, 0> }
}
}
object { BiCone rotate -y*(Cos_010(NormClock)*65.38) translate Pos_RedB_1 }
@@ -58,10 +78,17 @@ union {
}
}
object { BiTrident
rotate y*(570*Cos_01(NormClock))
rotate y*(670*Cos_01(NormClock))
translate Pos_RedB_2 + (y*2)
}
/* l'hexastar est une nouvelle venue du 4 janvier 2026 */
// elle est ici présentée sur son estrade.
object { HexaStar rotate -z*5
rotate y*(670*sin(NormClock))
translate Pos_RedB_3 + (y*2)
}
/*
* on fait passer un hexatruc dans le ciel
*/
@@ -71,20 +98,31 @@ object { BiTrident
object { HexaCone () rotate y*((12*NormClock)+80) translate P }
/* -----------------------------------------------
* le vaisseau "trident" passe a travers les
* trous de l'underground
* * le vaisseau "trident" passe a travers les
* trous de l'underground.
* * les coordonnées de ces trous sont définies
* dans le fichier 'contexte.inc'.
*/
// #fopen Trid "WS/tridents.log" write
#for (Foo, 0, 5)
#declare Dy = rand(Rng1)-4+(11*NormClock);
#declare Tr = UnderHoles[Foo] + <0, Dy, 0>;
#declare Ry = (( 0.5+rand(Rng1)-NormClock ) * 97);
// #write (Trid, Foo, " ", NormClock, " ", Dy, " ",
// Ry, " ", Tr, "\n")
object { Trident_A () translate y+( (5*rand(Rng1)) - 2.5)
rotate y*Ry translate Tr }
#ifdef (DEBUG_LEVEL)
#fopen Trid "WS/underholes.log" append
#end
#for (Foo, 0, 5)
#declare Dy = (14*rand(Rng1))-9+(14*NormClock);
#declare Tr = UnderHoles[Foo] + <0, Dy, 0>;
#declare Ry = (( 0.5+rand(Rng1)-NormClock ) * 166);
#ifdef (DEBUG_LEVEL)
#write (Trid, "Trid ", Foo, " ", NormClock, " ", Dy, " ",
Ry, " ", Tr, "\n")
#end
object { Trident_A () rotate y*Ry
// translate y+( (10*rand(Rng1)) - 5)
translate Tr }
#end
#ifdef (DEBUG_LEVEL)
#fclose Trid
#end
// #fclose Trid
/*
* ----------------------------
@@ -112,13 +150,15 @@ object { HexaBenz ()
/*
* passage d'un hexawood près de la base
*/
#declare A = <-25, 0.4, (SzSol/2)+4>;
#declare B = < 29, 0.5, (SzSol/2)+1>;
#declare A = <-25, 0.4, (SzSol/2)+5>;
#declare B = < 29, 0.5, (SzSol/2)+2>;
#declare P = Interpolate(A, B, NormClock);
#local K = NormClock*31;
#local R = 16.64 * cos(K);
#local H = 0.52 * pow(sin(K), 3);
#local H = 0.50 * pow(sin(K), 3);
#declare P_hexawood = P + <0, 0.26+H, 0>;
// #debug "+++++++++++++ P_hexawood defined\n"
object { HexaWood rotate z*R translate P_hexawood }
/*
@@ -136,6 +176,3 @@ object { Trident_A () rotate y*(clock*2.7)
#debug "dynamic is loaded\n"
/* ----------------------------------- */

View File

@@ -8,26 +8,20 @@
#include "globals.inc"
#include "contexte.inc"
#include "hexacone.inc"
#include "hexabenz.inc"
#include "hexawood.inc"
#include "trident.inc"
#include "xperiment.inc"
#declare NO_DYNAMIC = 0;
#include "all.inc"
// =======================================================
#include "dynamic.inc"
#local Y_mean = 0;
#local Y_count = 0;
#for (idX, -3, 3)
#for (idZ, -3, 3)
#local posX = (idX * 4.72) + (rand(Rng1)-0.5);
#local posY = 3.2 + (NormClock * 12 * (rand(Rng1)+0.75));
#local posZ = (idZ * 4.39) ;
#local posX = (idX * 4.76) + (rand(Rng1)-0.5);
#local posY = 3.2 + (NormClock * 17 * (rand(Rng1)+0.95));
#local posZ = (idZ * 4.44) ;
#local Rx = (rand(Rng1) - 0.5) * 12;
#local Ry = (rand(Rng1) - 0.5) * (24+NormClock);
#local Rz = (rand(Rng1) - 0.5) * 11;
@@ -39,9 +33,13 @@
#if ( (abs(posX)>Limit) & (abs(posZ)>Limit) ) // position
#local Y_mean = Y_mean + posY;
#local Y_count = Y_count + 1;
#if (rand(Rng1) < 0.555)
#local R = rand(Rng1);
#if (R < 0.30)
object { HexaCone () rotate <Rx, Ry, Rz>
translate <posX, posY, posZ> }
#elseif (R < 0.60)
object { HexaStar rotate y*90 rotate <Rx, Ry, Rz>
translate <posX, posY, posZ> }
#else
object { HexaBenz () rotate <Rx, Ry, Rz>
translate <posX, posY, posZ> }
@@ -54,18 +52,16 @@
object { Le_Decor }
// object { Repere scale 5 translate y }
#local CamX = 8.7 + ( 6.9 * Cos_01(NormClock));
#local CamY = 0.42 + (18.36 * Cos_01(NormClock));
#local CamZ = 122 - (22.9 * Cos_01(NormClock));
#local CamX = -8.7 + ( 6.9 * Cos_01(NormClock));
#local CamY = 0.42 + (17.06 * Cos_01(NormClock));
#local CamZ = 122 - (21.9 * Cos_01(NormClock));
#local LatY = (Y_mean / Y_count) - NormClock;
#debug concat("Lat Y ", str(LatY, 7, 3),"\n")
#local LatY = (Y_mean / Y_count) - (0.5*NormClock);
// #debug concat("escadrille: Lat Y ", str(LatY, 7, 3),"\n")
camera {
location <CamX, CamY, CamZ>
look_at <0.0, LatY, 0>
right <image_width/image_height, 0, 0>
angle 56 - (21 * NormClock)
angle 54 - (31 * NormClock)
}

397
essai.pov
View File

@@ -5,59 +5,64 @@
#version 3.7;
// #declare DEBUG_LEVEL = 1; // un nouveau test ?
#include "globals.inc"
#declare NO_DYNAMIC = 1;
#include "all.inc"
#include "contexte.inc"
#include "gadgets.inc"
#include "hexacone.inc"
#include "hexabenz.inc"
#include "hexawood.inc"
#include "trident.inc"
// XXX
#include "xperiment.inc"
// XXX
// =======================================================
// nouveau du dernier jour 2025
#include "hexastar.inc"
#declare Une_HexaStar = object
{
object { HexaStar translate y*3 }
}
// =======================================================
/*
* new Tue Dec 30 07:39:09 AM UTC 2025
* il faut faire le tri ici !
-* __________________________
*/
#declare Patrouille = object
{
// =======================================================
// nouveau du 10 février 2026
#macro Anemone_A (E, H)
union {
#local EX = 2.3;
#local EZ = 2.7;
object { Trident_A () rotate x*87 }
object { HexaBenz () translate <-EX, 0, -EZ> }
object { HexaCone () translate < EX, -0.2, -EZ> }
object { HexaBenz () translate <-EX*2, 0, -EZ*2> }
object { HexaCone () translate < EX*2, -0.2, -EZ*2> }
object { Repere scale 2 translate y*3.4 }
#for (foo, 0, 5)
#local A = radians(foo*60);
#local DX = E * sin(A);
#local DZ = E * cos(A);
cone { y*(H/8), 0.20, <DX, H, DZ>, 0.001
#local Rv = 0.7 + (0.2*rand(Rng1));
#local Gv = 0.6 + (0.2*rand(Rng1));
#local Bv = 0.6 + (0.3*rand(Rng1));
texture {
pigment { rgb <Rv, Gv, Bv> }
finish { phong 0.51 reflection 0.05 }
}
}
sphere { 0, 0.45 texture { T_WIP_color } }
#end // for
}
}
#end // macro
// =======================================================
/*
* new Thu Dec 18 01:14:19 AM UTC 2025
* 14 janvier 2026, j'ajoute un truc pour {enfin} gérer
* un DEBUG_LEVEL correct.
*/
#macro Le_ConeStack ()
#ifdef (DEBUG_LEVEL)
#debug "Cone Stack : DEBUG_LEVEL activated\n"
#fopen Log "WS/log.essai" write
#end // debug level
union {
#local Hcs = 0.50;
#local Rco = R_basecone * 1.95;
#local Hcs = 0.550;
#local Rco = R_basecone * 3.333;
#for (Foo, 0, 5)
#local Dy = Foo * 0.580;
#local Dx = 0.385 * sin(Foo+NormClock);
#local Dy = Foo * (Hcs + 0.0333);
#local Dz = 0.385 * cos(Foo+NormClock);
#local DV = <Dx, Dy, Dz>;
#ifdef (DEBUG_LEVEL)
#write (Log, Foo, " ", DV, "\n")
#end
union {
cone { 0, Rco, <0, Hcs, 0>, 0.001
#if (rand(Rng1) < 0.50) texture { Y_Texture }
@@ -69,11 +74,17 @@ union {
#else texture { G_Texture }
#end // if rand
}
translate y * Dy
translate DV
}
#end // for Foo
}
#ifdef (DEBUG_LEVEL)
#fclose Log
#end // debug level
#end // macro
// =======================================================
/* nouveau du 20 octobre 2025
@@ -92,39 +103,6 @@ union {
}
}
// =======================================================
/* nouveau du 7 octobre 2025 */
#macro Une_Boule ()
sphere {
0, 0.18 + (rand(Rng1) * 0.06)
#local R = rand(Rng1);
#if (R < 0.333) texture { C_Texture }
#elseif (R < 0.666) texture { M_Texture }
#else texture { Y_Texture }
#end
finish { specular 0.6 }
}
#end // macro
/* TODO
* trouver une meilleure méthode de placement
*/
#declare Les_Boules = object
{
union {
#for (A, 0, 64, 1)
#local CK = (NormClock*55.00) + (A*0.28);
object { Une_Boule ()
#local TX = 3.2 * sin(CK);
#local TY = 0.4 * cos(sin(CK));
#local TZ = 3.0 * cos(1-CK);
translate <TX, TY, TZ>
}
object { Repere scale 2 }
#end // for
}
}
// =======================================================
/*
* nouveau du 25 octobre 2025
@@ -132,93 +110,40 @@ union {
#declare Obj_BasicTexture = object
{
#local R = 0.385;
#local H = 1.71;
#local H = 1.51;
merge {
cylinder { 0, y*H, R }
sphere { 0, R scale <1, 0.50, 1> translate y*H }
difference {
#local R1 = R+0.46;
#local R2 = R+0.63;
box { <-0.19, 0, -0.17>, <R+0.4, H*0.42, R+0.6> }
cylinder { <R1, -1, R2>, <R1, 1, R2>, 0.27 }
box { <-0.19, 0, -0.17>, <R+0.4, H*0.48, R+0.6> }
cylinder { <R1, -1, R2>, <R1, 1, R2>, 0.33 }
}
}
}
// -------------------------------------------------------
#declare BasicTextures = object
{
#local TR = 2.20;
union {
object { Obj_BasicTexture texture { R_Texture }
translate <TR*1.4, 0, 0> }
object { Obj_BasicTexture texture { G_Texture }
translate <0, 0, -1> }
object { Obj_BasicTexture texture { B_Texture }
translate <0, 0, TR/2> }
object { Obj_BasicTexture texture { Y_Texture }
translate < TR, 0, TR> }
object { Obj_BasicTexture texture { M_Texture }
translate <-TR, 0, TR> }
object { Obj_BasicTexture texture { C_Texture }
translate <-TR, 0, -TR> }
object { Repere scale 1.5 translate y*2.5 }
}
}
// -------------------------------------------------------
/*
* Après lecture de la doc (et une bonne 8.6), j'ai
* décidé de me lancer dans la création de textures
*/
#declare T_WIP_R = texture
{
pigment { color Red }
finish { phong 0.42 ambient 0.50 }
}
#declare T_WIP_G = texture
{
pigment { color Green }
finish { phong 0.23 ambient 0.30 }
}
#declare T_WIP_B = texture
{
pigment { color Blue }
finish { phong 0.23 ambient 0.50 }
}
// deuxieme lot ----------------------
#declare T_WIP_1 = texture
{
pigment { color <0.36, 0.6, 0.79> }
normal { dents 2.94 scale 0.5}
finish { specular 0.40 ambient 0.69 }
}
// -------------------------------------------------------
// the place to try new textures
#declare ProtoTextures = object
{
#local TX = 2.35;
#local TX = 2.55;
#local TZ = 2.95;
#local Kro = 32 + (NormClock * 17);
#local Kro = 32 + (NormClock * 37);
union {
object { Obj_BasicTexture texture { T_WIP_R }
object { Obj_BasicTexture texture { R_Texture }
rotate y * (rand(Rng1)*Kro)
translate <TX, 0, -TZ> }
object { Obj_BasicTexture texture { T_WIP_G }
object { Obj_BasicTexture texture { G_Texture }
rotate y * (rand(Rng1)*Kro)
translate <TX, 0, 0> }
object { Obj_BasicTexture texture { T_WIP_B }
object { Obj_BasicTexture texture { B_Texture }
rotate y * (rand(Rng1)*Kro)
translate <TX, 0, TZ> }
object { Obj_BasicTexture texture { T_WIP_1 }
object { Obj_BasicTexture texture { T_WIP_dents }
rotate y * (rand(Rng1)*Kro)
translate <-TX, 0, TZ> }
object { Obj_BasicTexture texture { T_WIP_rasta }
@@ -234,108 +159,244 @@ union {
// =======================================================
/* Les choses, c'est l'espèce de vase avec des tiges
qui bougent, je devrais trouver un nom plus parlant */
qui bougent, je devrais trouver un nom plus parlant.
Mieux, on garde la chose mais on en dérive le vase
*/
#macro Vase_le_corps_a ()
intersection {
box { <-5, -5, -5>, <5, 0, 5> }
difference {
sphere { 0, 0.34 }
sphere { 0, 0.30 }
scale <1, 1.64, 1>
}
texture { T_WIP_redwave scale 0.15 + 0.333*rand(Rng1)
rotate <75*rand(Rng1), 75*rand(Rng1), 75*rand(Rng1)>
}
}
#end
// ------------------------------------
#macro Vase_le_corps_b ()
union {
#for (foo, 0, 359.999, 60)
#local Dx = 0.35 * sin(radians(foo));
#local Dz = 0.35 * cos(radians(foo));
torus { 0.09, 0.016
rotate z*30 rotate y*(foo-90)
translate <Dx, 0, Dz>
#local R = rand(Rng1);
#if (R < 0.50) texture { Y_Texture }
#else texture { M_Texture }
#end // end if
} // torus
#end // end for (foo
}
#end // end macro
// ------------------------------------
// ASSEMBLER LE CORPS
#macro Vase_le_corps ()
union {
object { Vase_le_corps_a () }
object { Vase_le_corps_b () }
translate y*0.95
}
#end
// ------------------------------------
// LE PIED
#macro Vase_le_pied ()
union {
cylinder { 0, y*0.80, 0.07 texture { T_WIP_dents scale 0.2 } }
cylinder { 0, y*0.08, 0.20 texture { T_WIP_dents scale 0.4 } }
}
#end
// ------------------------------------
// LES TIGES
#macro Vase_les_tiges ()
union {
#local CK = NormClock * (7.876+rand(Rng1));
#for (Foo, 0, 9)
// tout cela est bien tortueux !
#local CK2 = CK + Foo;
#local C2X = (R_C + 0.051) * sin(CK2+rand(Rng1)) * sin(CK*3);
#local C2Z = (R_C + 0.051) * (sin(-CK2+rand(Rng1)) *
cos(CK*(rand(Rng1))));
#local Rt = 0.02+(0.02*Cos_010(NormClock))-0.03*rand(Rng1);
#local H = 0.38 + 0.55*rand(Rng1);
union {
cylinder { 0, <C2X, H, C2Z>, Rt }
sphere { <C2X, H, C2Z>, Rt }
#local R = rand(Rng1);
#if (R < 0.25) texture { tPlasticOrange }
#elseif (R < 0.50) texture { tPlasticBlue }
#elseif (R < 0.75) texture { tPlasticPrune }
#else texture { tPlasticGreen }
#end // if
}
#end // for
translate y*0.87
}
// #debug "== Fin chose les tiges\n"
#end // macro
// ------------------------------------
// ------------------------------------
#macro Vase ()
union {
Vase_le_pied ()
Vase_le_corps ()
Vase_les_tiges ()
}
#end // macro
// ------------------------------------
// =======================================================
#declare Des_Choses = object
{
union {
object { Chose () translate < 2.2, 0, 2.32> }
object { Chose () translate <-2.9, 0, 3.91> }
object { Chose () translate < 2.9, 0, -4.07> }
object { Chose () translate <-3.4, 0, -(3+NormClock)> }
object { Repere scale <3, 4, 3> translate 0.05*y }
object { Vase () scale 2 translate < 2.2, 0, 2.32> }
object { Vase () scale 1.4 translate <-2.9, 0, 3.91> }
object { Vase () scale 2 translate < 2.9, 0, -4.07> }
object { Vase () translate <-4.5, 0, -4> }
object { Repere translate 0.15*y }
}
}
// =======================================================
#declare Gyros = object
#declare GyroTrucs = object
{
// #debug " Les gyros !!!\n"
union {
#for (I, 0, 359, 30)
#declare E = 12 + (3*rand(Rng1));
#declare Dx = E * sin(radians(I));
#declare Dz = E * cos(radians(I));
object { GyroPhare () translate <Dx, 0, Dz> }
#end
#local R = rand(Rng1);
#if (R > 0.52)
object { GyroPhare () translate <Dx, 0, Dz> }
#elseif (R > 0.36)
object { Colonne_A (3.8)
rotate y*(90*rand(Rng1))
translate <Dx, 0, Dz> }
#else
object { Colonne_A (2.8)
rotate y*(90*rand(Rng1))
translate <Dx, 0, Dz> }
#end
#end // for
}
}
object { Gyros }
object { GyroTrucs }
// ========================================================##
#declare Architecture = object
{
union {
object { Portique_A () translate z*6.5 }
object { Portique_A () scale 2 translate z*2 }
object { Portique_A () scale 1.8 }
object { Portique_A () scale 2 translate -z*3 }
object { Portique_A () rotate y*9 translate -z*6.5 }
// object { Fleche translate y }
}
}
// ------------------------------------------------------ ##
#debug " !!! ACTION !!!\n"
#local Rv = 0.5 + (0.1*sin(clock*0.113));
#local Gv = 0.11;
#local Bv = 0.2 * abs(sin(clock*0.014));
light_source {
<-18, 54, -7>
colour Gray40
<-32, 40, -7>
colour <Rv, Gv, Bv>
parallel
point_at 0
}
// ------------------------------------------------------ ##
#declare Selector = mod(int(clock/60)+20, 8);
#declare Selector = int(clock/57);
#debug concat("Selector = ", str(Selector, 6, 0), "\n")
#declare AngleCam = 17 - 3*Cos_01(NormClock);
#declare AngleCam = 27 - 3*Cos_01(NormClock);
#switch (Selector)
#case (0)
object { BasicTextures rotate -y*3*clock) }
object { Des_Choses }
#local AngleCam = 17;
#break
#case (1)
object { Patrouille rotate -y*(clock*0.666)
translate y*2.5 }
object { Architecture rotate -y*(clock*0.666) }
#local AngleCam = 31.0;
#break
#case (2)
object { Le_ConeStack () translate y*0.20 }
object { HoleBorder_B (2.222) }
#break
#case (3)
object { Des_Choses }
object { HorlogeDouble scale 2 rotate -y*(6*clock) }
object { Repere translate y*1 }
#break
#case (4)
object { Trident_A()
scale 2
rotate <20, 0, 10> translate 2.1*y
rotate -y*clock }
object { Blob_Boxed
scale 4.000
rotate <7, 0, 12> translate 3.7*y
}
#break
#case (5)
object { Les_Boules translate y*0.8 }
object { Anemone_A (3.10-NormClock, 1.50+NormClock)
translate < 4, 0, 0> }
object { Anemone_A (2.40-NormClock, 2.50+NormClock)
translate <-4, 0, 0> }
object { Anemone_A (1.40+NormClock, 1.50*NormClock)
translate < 0, 0, -4> }
object { Anemone_A (1.40+NormClock, 1.50-NormClock)
translate < 0, 0, 4> }
object { Repere }
#break
#case (6)
object { Une_HexaStar rotate y*(clock) }
object { HexaStar scale 3 rotate y*(clock*1.5) translate y*3.5 }
#break
#case (7)
#local Pos = <0.5-NormClock, 0, 0>;
object { ProtoTextures rotate -y*clock translate 0 }
object { ProtoTextures rotate -y*(55*Cos_01(NormClock)) }
#break
#end // switch selector
plane {
y, 0
texture { Ground_Texture }
}
// object { Repere translate y*1.0 }
// =======================================================
#local CamX = -2.7 + (1.8*Cos_010(NormClock));
#local CamY = 0.61 + (1.1*exp(NormClock));
#local CamY = 0.61 + (0.9*exp(NormClock));
#local CamZ = -5.777 + (1.2*Cos_01(NormClock));
#local K = 8.6;
#local CamX = CamX * K;
#local CamY = CamY * K * 0.61;
#local CamY = CamY * K * 0.41;
#local CamZ = CamZ * K;
camera {
orthographic
location <CamX, CamY, CamZ>
look_at <0, 1.6, 0>
look_at <0, 1.5, 0>
right <image_width/image_height, 0, 0>
angle AngleCam
}

View File

@@ -4,7 +4,41 @@
*/
/* ======================================================= */
#declare R_C = 0.35;
/* moved here from 'contexte.inc' */
#declare Repere = object
{
union {
#local R = 0.015;
#local R2 = R * 2.33;
#local LC = 1.15;
merge {
cylinder { 0, <1, 0, 0>, R }
cone { <1, 0, 0>, R2, <LC, 0, 0>, 0 }
texture { R_Texture }
}
merge {
cylinder { 0, <0, 1, 0>, R }
cone { <0, 1, 0>, R2, <0, LC, 0>, 0 }
texture { G_Texture }
}
merge {
cylinder { 0, <0, 0, 1>, R }
cone { <0, 0, 1>, R2, <0, 0, LC>, 0 }
texture { B_Texture }
}
}
}
#declare Fleche = object
{
union {
cylinder { -5*x, 5*x, 0.09 }
cone { 5*x, 0.27, 6.66*x, 0.00007 }
}
texture { LeGris }
}
// ------------------------------------------------------ ##
#declare R_C = 0.335;
/* ce truc mérite un nom plus parlant ! */
#macro Chose_le_pied ()
@@ -77,6 +111,36 @@ union {
#end // macro
/* ======================================================= */
/* ------------------------------------------------------------ */
#declare HexaBlob = object
{
#declare RHBlo = 0.24;
#declare RHBlo2 = RHBlo * 0.777;
blob {
// threshold 0.01 + NormClock
threshold 0.07
sphere { <0, 0, 0>, RHBlo, 1 }
#local E = RHBlo * 1.210; // XXX
#local W = 0.15;
sphere { <-E, 0, 0>, RHBlo2, W }
sphere { < E, 0, 0>, RHBlo2, W }
sphere { < 0, -E, 0>, RHBlo2, W }
sphere { < 0, E, 0>, RHBlo2, W }
sphere { < 0, 0, -E>, RHBlo2, W }
sphere { < 0, 0, E>, RHBlo2, W }
}
texture { T_WIP_bluewave scale 0.21 rotate <clock, clock/2, clock/3> }
}
/* ======================================================= */
/*
* 18 février 2026, cette horloge mérite vraiment
* d'être refaite de fond en comble, parce que ce
* code est vraiment gruik.
*/
#declare Horloge = object
{
#local Texte = str(NormClock, 6, 3);
@@ -85,13 +149,31 @@ union {
text {
// ttf "datas/DSEG7Classic-Regular.ttf" Texte 0.1, 0
ttf "datas/ComicMono-Bold.ttf" Texte 0.1, 0
texture { tPlasticPrune }
texture { tPlasticBlue }
}
scale 2.10
scale 1.96
rotate 90*x
translate <-4.5, 0.043, 0>
translate <-4.5, 0.046, 0>
}
// ----------------------------------------------------------
// nouveau du 3 janvier 2026
#local Horloge2 = object
{
object { Horloge scale <1, 0.28, 1> rotate -x*90
translate <0.802, 0.18, 0> }
}
#declare HorlogeDouble = object
{
union {
box { <-3.10, 0.0, -0.06>, <3.10, 1.68, 0.06>
texture { LeGris } }
#local EC = 0.18;
object { Horloge2 rotate y*180 translate z*EC }
object { Horloge2 translate -z*EC }
}
scale 0.42
translate y*0.666
}
// =======================================================
/*
* need more work !
@@ -107,7 +189,7 @@ prism {
#if (rand(Rng1) < 0.5) texture { T_Beton_1 }
#else texture { T_Beton_2 }
#end // if
scale 0.666 // WTF ?
scale 0.621 // WTF ?
/* Pourquoi ce scale ?
* parce que la spline est 'hardcoded' quelques
* lignes plus haut, et qu'il y a des méthodes
@@ -168,6 +250,7 @@ union {
cylinder { < D, -D, -D>, < D, D, -D>, R }
cylinder { <-D, -D, D>, <-D, D, D>, R }
cylinder { < D, -D, D>, < D, D, D>, R }
/* en bas */
cylinder { < D, -D, D>, <-D, -D, D>, R }
cylinder { < D, -D, -D>, <-D, -D, -D>, R }
@@ -180,9 +263,29 @@ union {
cylinder { <-D, D, D>, <-D, D, -D>, R }
cylinder { < D, D, D>, < D, D, -D>, R }
/* les 8 coins */
#local R2 = R * 1.38;
sphere { <-D, -D, -D>, R2 }
sphere { < D, -D, -D>, R2 }
sphere { <-D, -D, D>, R2 }
sphere { < D, -D, D>, R2 }
sphere { <-D, D, -D>, R2 }
sphere { < D, D, -D>, R2 }
sphere { <-D, D, D>, R2 }
sphere { < D, D, D>, R2 }
texture { Soft_Silver scale 6.50 }
}
#end
// ----------------------------------------------------------- ##
/* XXX +++ make this a #macro +++ */
#declare Blob_Boxed = object
{
union {
object { OpenBox(0.5, 0.01) }
object { HexaBlob rotate <clock*0.9, clock*0.7, clock*0.5> }
}
}
// =======================================================
/*
* first written macro for testing the generation of
@@ -190,10 +293,11 @@ union {
*/
#macro Bubble ()
sphere {
0, 0.070
0, 0.070 + 0.056*rand(Rng1)
#local R = rand(Rng1);
#if ( R < 0.333 ) texture { Ruby_Glass }
#elseif ( R < 0.666 ) texture { Orange_Glass }
#if ( R < 0.25 ) texture { Ruby_Glass }
#elseif ( R < 0.50 ) texture { Orange_Glass }
#elseif ( R < 0.75 ) texture { Shadow_Clouds }
#else texture { Gold_Nugget }
#end
#undef R
@@ -204,7 +308,7 @@ sphere {
#macro Un_Machin ()
union {
#for (Y, 1, 8, 1)
object { Bubble() translate y*Y*0.11 }
object { Bubble() translate y*Y*0.115 }
#end
}
#end
@@ -214,11 +318,11 @@ union {
#declare Les_Machins = object
{
union {
#local Rk = 3.90 + NormClock;
#local Rk = 3.60 + NormClock;
#for (foo, 0, 359, 45)
#local Xpos = Rk * sin(radians(foo));
#local Zpos = Rk * cos(radians(foo));
object { Un_Machin () translate <Xpos, 0.20, Zpos> }
object { Un_Machin () translate <Xpos, 0.22, Zpos> }
#end
#undef Rk
}

3
gif89a/README.md Normal file
View File

@@ -0,0 +1,3 @@
Space for the flashy Compuserve pictures.

View File

@@ -11,7 +11,7 @@ global_settings {
#include "stones.inc"
#include "woods.inc"
#declare Rng1 = seed(2026);
#declare Rng1 = seed(1221);
#declare foo = rand(Rng1);
#declare Rng2 = seed(now*24*60*60);
#declare bar = rand(Rng2);
@@ -41,15 +41,25 @@ global_settings {
#declare R_circular = (SzSol * 1.60);
#declare R_hole = 3.1; // holes in the background
/* ------------------------------------------------------------ */
/*
* Some textures...
*/
#declare LeGris = texture
{
/* moi j'dis qu'il est temps de définir un "gris de base" */
pigment { color Gray70 }
finish { phong 0.33 ambient 0.33 }
}
#declare T_WIP_color = texture
{
pigment { color Cyan*NormClock }
finish { phong 0.23 ambient 0.50 }
#local V = (sin(clock*0.142) / 2) + 0.5;
pigment { color Orange * V }
finish { phong 0.23 ambient 0.30 }
}
#declare T_WIP_alert = texture
@@ -113,7 +123,7 @@ finish { roughness 1.00 }
#declare tPlasticBlue = texture
{
pigment{rgb <0.50, 0, 2.0>}
pigment{rgb <0.20, 0, 2.0>}
finish {
ambient 0.1
diffuse 0.6
@@ -148,14 +158,15 @@ finish {
}
}
/* new: 28 octobre 2025 */
/* ------------------------------------------------------------ */
/* new: 28 octobre 2025 */
#declare Ground_Texture = texture
{
pigment { rgb <0.31, 0.33, 0.24> }
normal { dents 0.22 scale 1.666}
finish {
ambient 0 specular 0.3 metallic roughness 0.18
reflection { 0.4 metallic }
ambient 0 specular 0.3 metallic roughness 0.33
reflection { 0.21 metallic }
}
}
@@ -192,7 +203,7 @@ pigment {
[1.00 color Black ]
}
}
finish { phong 0.23 ambient 0.40 }
finish { phong 0.23 ambient 0.30 }
scale <3, 4, 3>
}
/* ------------------------------------------------------------ */
@@ -203,12 +214,12 @@ scale <3, 4, 3>
pigment {
wood
color_map {
[0.0 color Gray70 ]
[0.0 color Gray60 ]
[0.5 color Gray80 ]
[0.5 color Blue ]
[1.0 color Blue ]
}
// XXX rotate y*49
turbulence 0.04
translate <NormClock*0.1, sqrt(NormClock*0.4),
NormClock*0.333>
scale <0.2, 0.3, 1>
@@ -216,6 +227,33 @@ scale <3, 4, 3>
finish { phong 1 }
}
#declare T_WIP_redwave = texture
{
pigment {
wood
color_map {
[0.0 color Gray60 ]
[0.49 color Gray80 ]
[0.51 color Red ]
[1.0 color Red ]
}
turbulence 0.14
translate <NormClock*0.5, sqrt(NormClock*0.49),
NormClock*0.6>
scale <0.7, 0.23, 1>
}
finish { ambient 0.7 }
}
// le 10 fevrier 2026 -----------------
#declare T_WIP_dents = texture
{
pigment { color <0.36, 0.6, 0.79> }
normal { dents 2.94 scale 0.15 }
rotate <12, 34, 56>
finish { specular 0.40 ambient 0.59 }
}
/* ------------------------------------------------------------ */
#declare GoldDark = texture

View File

@@ -47,13 +47,14 @@ texture { T_Beton_2 }
text {
ttf "datas/ComicMono-Bold.ttf" Texte 0.1, 0
// texture { T_WIP_alert }
texture { T_WIP_bluewave scale 0.65 }
texture { T_WIP_bluewave rotate <clock, clock, clock>
scale 0.79 }
}
}
#declare Cabane_Compteur = object
{
union {
object { Compteur scale 0.55
object { Compteur scale 0.666
translate <-0.46, 0.22, 0.32> }
object { Cabane_Base_2 }
}
@@ -77,7 +78,7 @@ intersection {
}
}
}
cylinder { -y*5, y*5, SzSol*0.51 }
cylinder { -y*5, y*5, SzSol*0.52 }
}
finish { phong 0.096 }
translate y*H_sol
@@ -93,7 +94,7 @@ union {
#local Dx = 1.5;
#local Dz = 1.0;
box { <-Dx, 0, -Dz>, <Dx, H_base, Dz> }
#local Ha = y*(H_base*2);
#local Ha = y*(H_base*3);
cylinder { 0, Ha, 0.08 translate < Dx, 0, -Dz> }
cylinder { 0, Ha, 0.08 translate <-Dx, 0, -Dz> }
#local Hb = Ha * 1.17;
@@ -112,8 +113,8 @@ texture { T_Grnt7 rotate 49 scale 0.333 }
#declare GroudBase_coin = object
{
merge {
cylinder { 0, y*0.5, 0.12 }
sphere { 0, 0.12 scale <1, 0.25, 1> translate y*0.5 }
cylinder { 0, y*0.5, 0.14 }
sphere { 0, 0.14 scale <1, 0.25, 1> translate y*0.5 }
}
}

View File

@@ -31,7 +31,7 @@ torus { Ec, Ec*0.06
texture { T_Brass_1C }
#end
}
#end
#end // macro
// ------------------------------------------------------
@@ -159,20 +159,25 @@ texture { Soft_Silver scale 6.0 }
}
// ------------------------------------------------------
#declare Benz_Antenne = object
{
#local RBA = 0.026;
// 1er janvier 2026, il est temps de s'y remettre */
#macro Benz_Antenne ()
union {
sphere { 0, RBA }
cylinder { 0, <0, 0.23, 0>, RBA*0.233 }
}
scale <1, 1, 10>
#if ( mod(clock, 20) < (30*rand(Rng1)) ) texture { T_WIP_color }
#else texture { T_WIP_alert }
#local RBA = 0.020;
sphere { 0, RBA scale <1, 1, 10> }
union {
#local RBA2 = RBA*0.149;
#local E = 0.018;
cylinder { E*z, <0, 0.20, E>, RBA2 }
cylinder { -E*z, <0, 0.20, E>, RBA2 }
scale <1, 1, 5.555>
}
#if ( mod(clock, 10+3*rand(Rng1)) < (10*rand(Rng1)) )
texture { tPlasticPrune }
#else texture { tPlasticGreen }
#end
}
#end
}
// ------------------------------------------------------
#macro Benz_Tube ()
@@ -180,14 +185,13 @@ scale <1, 1, 10>
// {
union {
object { Benz_Tubules () }
object { Benz_Fuseau_Flash translate z*0.40 }
object { Benz_Fuseau_Flash translate z*0.35 }
object { Benz_Cylindre }
/* XXX */
object { Repere }
object { Benz_Antenne
translate <0, -0.41, 0.70>
rotate z*30 }
object { Benz_Antenne ()
translate <0, -0.37, 0.76>
rotate z*45 }
}
// }
#end

View File

@@ -6,31 +6,24 @@
#include "globals.inc"
#include "contexte.inc"
#include "hexacone.inc"
#include "hexabenz.inc"
#include "hexawood.inc"
#include "trident.inc"
#include "dynamic.inc"
#declare NO_DYNAMIC = 0;
#include "all.inc"
// =======================================================
object { Le_Decor }
#declare Loc_cam = <0.63, 2, 2*NormClock> + (Pos_RedB_0 * 1.32);
// object { Repere scale 2 }
#declare Loc_cam = <0, 2, 2*NormClock> + (Pos_RedB_0 * 1.32);
#declare Lat_Y = 1.21 + 0.16*NormClock;
camera {
location Loc_cam
look_at Pos_RedB_0 + <0, 1.20, 0>
look_at Pos_RedB_0 + <0, Lat_Y, 0>
right <image_width/image_height, 0, 0>
// focal_point <0.37, 0.0, 0>
// aperture 0.046
// blur_samples 30
angle 40 - 14 * Cos_01(NormClock)
angle 40 - 15 * Cos_01(NormClock)
}

View File

@@ -6,12 +6,9 @@
#include "globals.inc"
#include "contexte.inc"
#include "hexacone.inc"
#include "hexabenz.inc"
#include "hexawood.inc"
#include "trident.inc"
#include "dynamic.inc"
// #declare DEBUG_LEVEL = 1;
#declare NO_DYNAMIC = 0;
#include "all.inc"
object { Le_Decor }
@@ -19,16 +16,16 @@ object { Le_Decor }
// object { Repere scale 2 }
#declare Loc_cam = <2, 2.7-NormClock, 1> + (Pos_RedB_1 * 1.383);
#declare Loc_cam = <2, 2.7-NormClock, 1> + (Pos_RedB_1 * 1.308);
camera {
location Loc_cam
#local H = 1.16 + (NormClock*0.34);
#local H = 1.16 + (NormClock*0.39);
look_at Pos_RedB_1 + <0.02, H, 0>
right <image_width/image_height, 0, 0>
// focal_point <0.37, 0.90, 0>
// aperture 0.046
// blur_samples 30
angle 55 - 25 * Cos_01(NormClock)
angle 59 - 25 * Cos_01(NormClock)
}

View File

@@ -8,44 +8,94 @@
/* ============================================================ */
/* Un des six éléments de base */
#declare HS_element_a = object
{
union {
cone { <-4, 0, 0>, 0.05, <-1, 0, 0>, 1.00 }
cone { < 4, 0, 0>, 0.05, < 1, 0, 0>, 1.00 }
#declare HS_radius = 0.409;
#macro HS_element_pointe ()
union {
#local R_a = HS_radius * 0.369;
#local Small = 0.00001;
cone { <-1.34, 0, 0>, Small, <-0.6, 0, 0>, R_a }
sphere { 0, R_a scale <0.42, 1, 1> translate <-0.6, 0, 0> }
#local R = rand(Rng1);
#if ( R < 0.45 ) texture { GoldDark }
#elseif ( R < 0.60 ) texture { Aluminum }
#else texture { T_Gold_3C }
#end
}
}
#end // macro
/* ------------------------------------------------------------ */
#declare HS_element_b = object
{
difference {
cylinder { <-1, 0, 0>, <1, 0, 0>, 0.70 }
box { 0, <1, 1, 1> }
/*
* element central --- À REFAIRE EN MACRO !
*/
#macro HS_element_central ()
union {
#local HSCR = HS_radius*0.70;
torus { HSCR, 0.0180 }
// le noyau central
#local L = 0.0028;
#local R = 0.0577;
cylinder { -y*L, y*L, R }
sphere { 0, R translate y*L }
sphere { 0, R scale <1, 0.20, 1>translate -y*L }
// les ailettes intérieures
#for (foo, 0, 5)
cylinder { 0, x*HSCR, R*0.15 rotate y*foo*60 }
#end
// traitement final
scale <1, 23.10, 1>
rotate z*90
#local R = rand(Rng1);
#if ( R < 0.17 ) texture { Y_Texture }
#elseif ( R < 0.66 ) texture { T_Gold_1A }
#else texture { Aluminum }
#end
}
}
#end
/* ------------------------------------------------------------ */
#declare HS_element = object
{
union {
object { HS_element_a texture { GoldDark } }
object { HS_element_b texture { G_Texture } }
/* nouveau 14 janvier 2026 */
#macro HS_element_queue ()
union {
#local R_a = HS_radius * 0.228;
#local Small = 0.001;
cone { < 0.44, 0, 0>, Small, < 0.88, 0, 0>, R_a }
sphere { 0, R_a scale <0.7, 1, 1> translate <0.88, 0, 0> }
#local R = rand(Rng1);
#if ( R < 0.35 ) texture { Rust scale 3.33
rotate y*(rand(Rng1)*273) }
#elseif ( R < 0.50 ) texture { T_Gold_5A }
#elseif ( R < 0.80 ) texture { Aluminum }
#else texture { T_Gold_3C }
#end
}
}
#end // macro
/* ------------------------------------------------------------ */
/* nouveau XXX janvier 2026 */
// UNE ANTENNE ?
/* ============================================================ */
/* On regroupe les six élements */
/* On regroupe les N*six élements */
#declare HS_les_elements = object
{
union {
#for (Foo, 0, 60, 359)
#local E = 0.31;
#local Tx = E * sin(radians(Foo));
#for (Foo, 0, 360, 60)
#local E = HS_radius;
#local Ty = E * cos(radians(Foo));
object {
HS_element
rotate -z*foo
translate <Tx, Ty, 0>
#local Tz = E * sin(radians(Foo));
union {
object { HS_element_pointe ()
translate <0, Ty*1.16, Tz*1.16> }
object { HS_element_queue ()
translate <0, Ty*0.80, Tz> }
}
#end // end for
#end // end for
object { HS_element_central () }
// object { Repere }
}
}
/* ============================================================ */
@@ -54,4 +104,6 @@ union {
{
object { HS_les_elements }
}
// #debug "++++++++++ hexastar loaded !\n"
/* ============================================================ */

33
hexastar.pov Normal file
View File

@@ -0,0 +1,33 @@
/*
* H E X A C O N E - HE X A S T A R
* nouveau du 3 janvier 2026
*/
#version 3.7;
#include "globals.inc"
#declare NO_DYNAMIC = 0;
#include "all.inc"
// =======================================================
object { Le_Decor }
#declare CK = 2.03 - (NormClock * 2.72);
#declare DX_cam = 6.1 * cos(CK);
#declare DZ_cam = 5.2 * sin(CK);
#declare Loc_cam = <DX_cam, 1.10, DZ_cam> + Pos_RedB_3;
#declare Lat_cam = <0, 1.95, 0> + Pos_RedB_3;
camera {
location Loc_cam
look_at Lat_cam
right <image_width/image_height, 0, 0>
/* quand j'aurais la bonne machine... */
// focal_point <0.37, 0.0, 0>
// aperture 0.046
// blur_samples 30
angle 65 - 11 * Cos_01(NormClock)
}

View File

@@ -84,7 +84,7 @@ merge {
#local RP = 0.040;
sphere { 0, RP scale <1, 0.84, 1> translate 0.35*y }
cylinder { 0, 0.35*y, RP }
sphere { 0, 0.09 scale <1, 0.29, 1> }
sphere { 0, 0.09 scale <1, 0.26, 1> }
}
#local R = rand(Rng1);
#if ( R < 0.3 ) texture { Tinny_Brass }
@@ -109,7 +109,7 @@ union {
}
/* ------------------------------------------------------------ */
#declare HW_Anneau0 = object
#declare HW_Anneau_0 = object
{
merge {
torus { Hc_rad*0.31, 0.0666 scale <1, 0.55, 1> }
@@ -121,9 +121,35 @@ merge {
#end // FOR
}
texture { GoldDark }
rotate y * (165 * NormClock)
}
#declare HW_Anneau_1 = object
{
merge {
#for (Foo, 0, 359, 60)
#local DX = Hc_rad*0.35 * sin(radians(Foo+30));
#local DZ = Hc_rad*0.35 * cos(radians(Foo+30));
merge {
cylinder { 0, 0.05*y, 0.006 }
cone { 0.03*y, 0.006, 0.08*y, 0.012 }
sphere { 0.08*y, 0.013 }
translate <DX, 0, DZ>
}
#end
}
texture { T_WIP_color }
}
#declare HW_Anneau = object
{
union {
object { HW_Anneau_0 }
object { HW_Anneau_1 }
}
rotate y * (1664 * NormClock)
translate y*0.32
}
/* ------------------------------------------------------------ */
#declare HexaWood = object
{
@@ -134,7 +160,7 @@ union {
light_source { 0.20*y rgb <0, 0.20, 0.99> }
#end
object { HW_Cones () translate y*0.15 }
object { HW_Anneau0 }
object { HW_Anneau }
}
}

View File

@@ -8,13 +8,8 @@
#include "globals.inc"
#include "contexte.inc"
#include "hexacone.inc"
#include "hexabenz.inc"
#include "hexawood.inc"
#include "trident.inc"
#include "dynamic.inc"
#declare NO_DYNAMIC = 0;
#include "all.inc"
// =======================================================
@@ -22,14 +17,14 @@ object { Le_Decor }
// object { Repere translate <10, 1, 10> }
#declare LOC = <19-NormClock, 1.60, 15.5-NormClock>;
#declare LOC = <-3.4 - NormClock, 3.35, 31.9-NormClock>;
#declare LAT = <P_hexawood.x, 0.95+(NormClock*0.1), P_hexawood.z>;
#declare LAT = <P_hexawood.x, 0.95+(NormClock*0.11), P_hexawood.z>;
camera {
location LOC
look_at LAT
right <image_width/image_height, 0, 0>
angle 16 + 2.51*NormClock
angle 20 + 2.87*NormClock
}

View File

@@ -6,12 +6,11 @@
#include "globals.inc"
#include "contexte.inc"
#include "hexacone.inc"
#include "hexabenz.inc"
#declare NO_DYNAMIC = 1;
#include "all.inc"
// =======================================================
#declare R_planete = 1.45;
#declare R_planete = 1.85;
#declare Croute = object
{
@@ -52,7 +51,7 @@ union {
}
// =======================================================
#local RO = 4.15;
#local RO = 5.39;
#local CK = NormClock * 13.37;
#declare PosX = RO * sin(CK);
@@ -68,12 +67,27 @@ object { HexaCone ()
rotate y*CK*99.22 translate <PosX, PosY, PosZ>
}
object { Planete rotate (-clock*0.21)*y }
light_source { <23, 6, 15>, rgb <0.77, 0.79, 0.80> }
#declare PosX = RO * 1.5 * sin(CK+3.14);
#declare PosY = 0;
#declare PosZ = RO * cos(CK+3.23);
object { Trident_A ()
rotate <clock*1.3, 0, clock*0.7>
rotate y*CK*99.22 translate <PosX, PosY, PosZ>
}
#declare PosX = RO * sin(CK+5.14);
#declare PosY = 0;
#declare PosZ = RO * cos(CK+5.14);
object { HexaStar
rotate y*CK*99.22 translate <PosX, PosY, PosZ>
}
object { Planete rotate (-clock*0.31)*y }
light_source { <23, 10, 15>, rgb <0.77, 0.79, 0.80> }
// -------------------------------------------------------------
camera {
location <3+NormClock, -1.0+(7.777*NormClock), 8.59>
location <9+NormClock, 1.60+(9.8*NormClock), 11.59>
look_at <0.0, 0.0, 0>
right <image_width/image_height, 0, 0>
#if (0)
@@ -81,6 +95,6 @@ camera {
aperture 0.046
blur_samples 30
#end
angle 55
angle 57
}

View File

@@ -7,24 +7,18 @@
#include "globals.inc"
#include "contexte.inc"
#include "gadgets.inc"
#include "hexacone.inc"
#include "hexabenz.inc"
#include "hexawood.inc"
#include "trident.inc"
#include "xperiment.inc"
#declare NO_DYNAMIC = 0;
#include "all.inc"
// =======================================================
object { Le_Decor }
#include "dynamic.inc"
// =======================================================
#declare CK = 1.3 + (2.79 * Cos_01(NormClock));
#declare CK = 1.97 + (2.72 * Cos_01(NormClock));
#declare CamX = 1.22;
#declare CamX = 1.72;
#declare CamY = 7 + (4*Cos_01(NormClock));
#declare LatX = 20 * cos(CK*1.08);
@@ -37,5 +31,5 @@ camera {
location <CamX, CamY, 0>
look_at <LatX, LatY, LatZ>
right <image_width/image_height, 0, 0>
angle 71 + (NormClock * 10)
angle 65 + (NormClock * 15)
}

View File

@@ -7,28 +7,23 @@
#include "globals.inc"
#include "contexte.inc"
#include "hexacone.inc"
#include "hexabenz.inc"
#include "hexawood.inc"
#include "trident.inc"
// ---------------------------------------
#include "dynamic.inc"
#declare NO_DYNAMIC = 0;
#include "all.inc"
#declare PosX = 3.95;
#declare PosY = 3.80 + (NormClock*0.299);
#declare PosZ = (NormClock-0.5) * 44.27;
#declare PosZ = (NormClock-0.5) * 45.27;
object { HexaCone () translate <PosX, PosY, PosZ> }
object { HexaCone () translate <PosX+2.96, PosY+3.22, PosZ-19.5> }
object { HexaBenz () translate <PosX-1.96, PosY+2.82, PosZ-17.5> }
/* XXX this two object in dynamic.inc ??? */
object { HexaBenz () translate <PosX+2.96, PosY+3.22, PosZ-19.5> }
object { HexaStar rotate y*90 translate <PosX-1.96, PosY+2.72, PosZ-17.5> }
object { Le_Decor }
#if ( (clock < 141) )
#if ( (clock < 181) )
light_source {
<3, 0.30, -8> color Blue
spotlight
@@ -39,14 +34,14 @@ light_source {
}
#end
#if ( (clock > 230) & (clock < 300) )
#if ( (clock > 230) & (clock < 340) )
light_source {
<2, 0.30, -2> color Green
spotlight
radius .044
falloff 2
tightness 3
point_at <PosX, PosY-0.30, PosZ>
point_at <PosX, PosY-0.10, PosZ>
}
#end

38
patrouille.pov Normal file
View File

@@ -0,0 +1,38 @@
/*
* H E X A C O N E - E S S A I
* nouveau projet du Thu Dec 5 11:37:05 AM UTC 2024
*
* this sequence was created on Fri Feb 13 01:20:24 PM UTC 2026
*/
#version 3.7;
#include "globals.inc"
#declare NO_DYNAMIC = 0;
#include "all.inc"
object { Le_Decor }
// object { Repere scale 5 translate y*4 }
/* =============================================================== */
#declare CamX = 90 - (4 * NormClock);
#declare CamY = 176;
#declare CamZ = 170 - (33 * NormClock);
/* XXX to be verified !
#declare LatX = Loc_Patrouille.x;
#declare LatY = Loc_Patrouille.y;
#declare LatZ = Loc_Patrouille.z;
*/
camera {
location <CamX, CamY, CamZ>
look_at Loc_Patrouille
right <image_width/image_height, 0, 0>
angle 13
}
/* =============================================================== */

View File

@@ -7,28 +7,25 @@
#include "globals.inc"
#include "contexte.inc"
#include "hexacone.inc"
#include "hexabenz.inc"
#include "hexawood.inc"
#include "trident.inc"
#declare NO_DYNAMIC = 0;
#include "all.inc"
#declare A = <-SzSol, 16, -8>;
#declare B = <SzSol+4, 18, -11>;
#declare P = Interpolate(A, B, NormClock);
object { HexaCone () rotate y*((6*NormClock)+80) translate P }
#include "dynamic.inc"
object { HexaBenz () rotate y*(clock/9) translate <-9, 3, 7> }
// ---------------------------------------------------------
// WTF is that ??? XXX
#if (0)
#declare A = <-15, -1.9, SzSol>;
#declare B = < 23, -0.7, SzSol>;
#declare P = Interpolate(A, B, NormClock);
object { HexaWood scale 10 translate P }
#end
// ---------------------------------------------------------
@@ -36,10 +33,10 @@ object { Le_Decor }
// object { Repere scale 3 translate <SzSol, 2, SzSol> }
#local DistCam = 380;
#local CK = -1.101 - (0.072 * NormClock);
#local DistCam = 460 + (16 * NormClock);
#local CK = -1.71 - (0.039 * NormClock);
#declare CamX = DistCam * sin(CK);
#declare CamY = 28;
#declare CamY = 28 + NormClock;
#declare CamZ = DistCam * cos(CK);
camera {
@@ -49,5 +46,5 @@ camera {
// focal_point <2, 1, 12>
// aperture 0.046
// blur_samples 30
angle 4.0
angle 3.5
}

View File

@@ -1,35 +1,31 @@
/*
* H E X A C O N E - S C E N E
* nouveau projet Thu Dec 5 11:37:05 AM UTC 2024
* The first one...
*/
#version 3.7;
#include "globals.inc"
#include "contexte.inc"
#include "hexacone.inc"
#include "hexabenz.inc"
#include "hexawood.inc"
#include "trident.inc"
#include "dynamic.inc"
#declare NO_DYNAMIC = 0;
#include "all.inc"
// ---------------------------------------------------------
object { Le_Decor }
#declare CK = 144 + (clock * 0.27);
#declare CK = 144 + (clock * 0.25);
#declare Dcam = 3.75;
#declare CamX = Dcam * cos(radians(CK));
#declare CamX = Dcam * cos(radians(CK+0.9));
#declare CamZ = Dcam * 1.20 * sin(radians(CK));
#declare LatZ = 2.45 + (0.9 * Cos_010(NormClock));
#declare LatY = 2.45 + (1.47 * Cos_010(NormClock));
camera {
location <CamX, 1.97, CamZ>
look_at <0.03, LatZ, 0.17>
look_at <0.03, LatY, 0.17>
right <image_width/image_height, 0, 0>
// focal_point Lat
// aperture 0.046

View File

@@ -9,39 +9,35 @@
#include "globals.inc"
#include "contexte.inc"
#include "hexacone.inc"
#include "hexabenz.inc"
#include "hexawood.inc"
#include "trident.inc"
#include "dynamic.inc"
#declare NO_DYNAMIC = 0;
#include "all.inc"
object { Le_Decor }
// =======================================================
#declare Spline_1 =
spline {
cubic_spline
-0.2, <-2, 1.0, -2>, // control point
-0.2, <-2, 1.0, -3>, // control point
0.0, < 0, 1.3, -2>, // start point
0.2, < 2, 1.0, -1>,
0.4, < 1, 1.5, 0>,
0.6, < 0, 2.2, 0>,
0.8, <-1, 0.9, 1>,
1.0, < 2, 1.0, 2>, // end point
0.0, <-0.5, 1.3, -2.7>, // start point
0.2, < 2.0, 1.0, -1.0>,
0.4, < 1.0, 1.5, 0.0>,
0.6, < 0.0, 2.2, 0.1>,
0.8, <-1.1, 1.6, 1.1>,
1.0, < 2.0, 1.0, 2.0>, // end point
1.2, < 4, 1.0, 2> // control point
}
#local Scaler = <2, 1, 3>;
#local Scaler = <2, 1, 3>; // XXX please explain
#declare ViewSpline = object
{
union {
#for (CK, 0.00, 1.00, 0.0017)
sphere { <0,0,0>, 0.022
texture{
pigment {color rgb <0.20, 0.14, 0.14> }
#for (CK, 0.00, 1.00, 0.0021)
sphere { <0,0,0>, 0.023
texture{
pigment {color rgb <0.20, 0.24, 0.14> }
finish {ambient 0.15 diffuse 0.85 phong 0.6 }
}
translate (Scaler * Spline_1(CK))
@@ -60,7 +56,7 @@ union {
union {
object { ViewSpline }
#declare P1 = Scaler * Spline_1(V1);
#declare P2 = <1, -1.3, 0.1> + (0.95 * Scaler * Spline_1(V2));
#declare P2 = <1, -1.3, 0.2> + (0.95 * Scaler * Spline_1(V2));
sphere {
0, 0.06
texture { B_Texture }
@@ -78,10 +74,12 @@ union {
finish { ambient 0.15 diffuse 0.65 phong 0.4 }
}
#if (0)
#fopen KP "WS/spline.log" append
#write (KP, clock, " / ", NbFrames, " -> ")
#write (KP, NormClock, " ", K1, " ", K2, " = ", V1, " ", V2, "\n")
#write (KP, clock, " ", NbFrames, " ")
#write (KP, NormClock, " ", K1, " ", K2, " ", V1, " ", V2, "\n")
#fclose KP
#end
}
// =======================================================

View File

@@ -7,34 +7,29 @@
#include "globals.inc"
#include "contexte.inc"
#include "hexacone.inc"
#include "hexabenz.inc"
#include "hexawood.inc"
#include "trident.inc"
// =======================================================
#include "dynamic.inc"
#declare NO_DYNAMIC = 0;
#include "all.inc"
object { Le_Decor }
object { Repere scale 2 translate y*2 }
// XXX instrumenter la caméra serait un GROS plus !!!
// =======================================================
#declare Debut = <-3, 89, 188> ;
#declare Fin = < 2, 91, -15> ;
#declare Pos = sqrt(NormClock+0.02);
#declare Debut = <-33, 89, 289> ;
#declare Fin = < 36, 78, -2> ;
#declare Pos = sqrt(NormClock);
#declare PosCam = Interpolate(Debut, Fin, Pos);
#declare LatX = 0.414 * sin(NormClock*6.1);
#declare LatCam = PosCam + <LatX, -20, -(4+(NormClock+11))>;
#declare LatX = 0.614 * sin(NormClock*11.27);
#declare LatZ = -(150 + (7*NormClock));
#declare LatCam = PosCam + <LatX, -95, LatZ>;
// object { Repere scale 20 translate LatCam + y*5 }
camera {
location PosCam
look_at LatCam
right <image_width/image_height, 0, 0>
angle 50
angle 64
}

View File

@@ -1,6 +1,6 @@
# Tools
Build system and utilities.
The page for « Build system and utilities ».
## Make a sequence
@@ -16,12 +16,18 @@ plein milieu. Exemples :
Et pour générer plusieurs séquences dans la foulée, avec les
post-processings (ega-mp4 et ega-gif89a) en même temps,
vous avez le script [Mk Sex](mkseqs.sh) à votre service.
Mkloop ajoute le nom de la séquence, le numéro de trame et le temps de
rendu au fichier `log/mp4.timing` permettant ainsi la création de
graphiques aussi jolis qu'inutiles.
## Linkfarming
C'est le directeur de la production, le grand
[script](./linkfarmer.sh)
d'assemblage des séquences avec générique et intertitres.
Hélas, il n'est pas encore configurable.
Hélas, il n'est pas encore configurable. Mais c'est
en projet pour juin 2026 ?
## Encoding
@@ -36,7 +42,15 @@ Le fichier de sortie s'appelle *wip.mp4* dans tous les cas.
On peut visualiser le temps de calcul d'une séquence avec la
commande [plot-timing.sh](./plot-timing.sh) qui génère un fichier
PNG. C'est un script basé sur *Awk* et *Gnuplot*.
Ces graphiques sont utilisés comme fond pour les
intertitres.
```
$ tools/plot-timing.sh essai && d timing.png
```
Cette commande utilise le fichier `log/mp4.timing`, lequel est généré
par le script de création de séquence vu plus haut.

View File

@@ -11,7 +11,7 @@ SEQ="essai"
if [ $# == 1 ] ; then
SEQ=$1
fi
echo "[$SEQ] going EGA" | tee -a WS/log
# echo "[$SEQ] going EGA" | tee -a WS/log
debut=$(date +%s)
@@ -35,4 +35,4 @@ done
ff_encodage "EGA/" "ega-$SEQ.mp4"
fin=$(date +%s)
echo "$SEQ -> ega" $(( fin-debut )) "secondes" >> WS/log
echo "$SEQ -> ega" $(( fin-debut )) "secondes"

View File

@@ -11,9 +11,9 @@ if [ $# == 1 ] ; then
SEQ=$1
fi
GIF="t-$SEQ.gif"
GIF="gif89a/$SEQ.gif"
echo "seq $SEQ -> $GIF" | tee -a WS/log
# echo "seq $SEQ -> $GIF" | tee -a WS/log
convert \
-delay 7 \

View File

@@ -4,7 +4,7 @@ Img_Width=1024
Img_Height=720
# for imagemagick
TEXTCOL="bisque"
TEXTCOL="Yellow"
STROKOL="Green"
NBFRAMES=450

View File

@@ -41,8 +41,8 @@ FILMNAME="$2"
# echo "Encoding $SRCDIR to $FILMNAME" | tee -a WS/log
ffmpeg -nostdin \
-y -r 30 -f image2 -i frames/${SRCDIR}/%05d.png \
-metadata artist='--[ tTh ]--' \
-metadata title='-- HexaCone --' \
-metadata artist='--[ tTh des Bourtoulots ]--' \
-metadata title='--[ la famille HexaCone ]--' \
-c:v libx264 \
-pix_fmt yuv420p \
-tune film \

View File

@@ -36,16 +36,16 @@ SRC="frames/$1"
local INTER="/dev/shm/tmp-intertitre.png"
tools/plot-timing.sh $1
local NBRE=48
local NBRE=78
convert "WS/negatif.png" \
-gravity north \
-font $FONTE \
-pointsize 100 \
-pointsize 108 \
-kerning 8 \
-fill $TEXTCOL \
-strokewidth 2 -stroke $STROKOL \
-annotate +0+530 "$1" \
-strokewidth 3 -stroke $STROKOL \
-annotate +0+330 "$1" \
${INTER}
for foo in $(seq 0 $NBRE)
@@ -77,10 +77,10 @@ faire_le_titre ()
echo "faire le titre"
local NBRE=300
local SRC="frames/hexawood/00199.png"
local SRC="frames/hexacone/00199.png"
local GRAY="/dev/shm/tmp-titre.png"
convert -colorspace gray -colors 27 $SRC $GRAY
convert -colorspace gray -colors 90 $SRC $GRAY
for foo in $(seq 0 $NBRE)
do
@@ -91,7 +91,7 @@ do
-pointsize 140 \
-kerning 6 \
-fill $TEXTCOL \
-strokewidth 3 -stroke $STROKOL \
-strokewidth 5 -stroke $STROKOL \
-annotate +0+${Ypos} "La famille\nHexaCone" \
${TMP}
# identify ${TMP}
@@ -103,13 +103,13 @@ echo
# -------------------------------------------------------
faire_la_fin ()
{
local NBRE=160
datetime=$(LANG=fr date -u +"%Y/%m/%d %H:%M")
echo $datetime | tee -a WS/log
local NBRE=180
datetime=$(LANG=fr date -u +"%Y/%m/%d %H:%M")
echo " $datetime" | tee -a WS/log
local SRC="frames/escadrille/00299.png"
local GRAY="/dev/shm/tmp-titre.png"
convert -colorspace gray -colors 23 $SRC $GRAY
local SRC="frames/patrouille/00165.png"
local GRAY="/dev/shm/tmp-fin.png"
convert -colorspace gray -colors 90 $SRC $GRAY
for foo in $(seq 0 $NBRE)
do
@@ -117,8 +117,8 @@ do
convert ${GRAY} \
-gravity north \
-font $FONTE \
-pointsize 86 \
-kerning 6 \
-pointsize 92 \
-kerning 5 \
-fill $TEXTCOL \
-strokewidth 2 -stroke $STROKOL \
-annotate +0+${Ypos} \
@@ -130,6 +130,7 @@ do
${TMP}
# identify ${TMP}
copy_a_file ${TMP}
printf "."
done
echo
@@ -142,11 +143,15 @@ rm -f frames/Spool/*.png
faire_le_titre
linkfarm approche
linkfarm hexacone
linkfarm remote
linkfarm hexabenz
linkfarm splined
linkfarm patrouille # new St Valentine 2026
linkfarm hexawood
linkfarm escadrille
linkfarm survol
linkfarm around # new 26 jan 2026
linkfarm cutoff
linkfarm panoramic
linkfarm topview
@@ -157,14 +162,12 @@ linkfarm carto
linkfarm circular
linkfarm bubblecut
linkfarm orbite
linkfarm hexacone
linkfarm remote
linkfarm essai
tools/plot-timing.sh
faire_la_fin
ff_encodage Spool full.mp4
ff_encodage Spool the-hexacone-family.mp4
nb=$(( $IDX - 1 ))
echo "linkfarmed $nb files" | tee -a WS/log

View File

@@ -17,8 +17,8 @@ echo "$0 $SEQNAME from $START" >> WS/log
DIMS="-W$Img_Width -H$Img_Height"
NBFR=" Declare=NbFrames=$NBFRAMES "
echo $NBFR
POVOPT="+q9 +A0.02 -d ${DIMS} ${NBFR} -WT7"
POVOPT="+q9 +A0.02 -d ${DIMS} ${NBFR} -WT4"
echo $NBFR "frames."
echo $POVOPT ; echo ; sleep 2
TMPIMG=/dev/shm/${SEQNAME}-tmp.png
@@ -39,19 +39,21 @@ do
continue
fi
set -e
txt=$(printf "%s %03d" ${SEQNAME} $frame | tr '01' 'ol')
sqn=$(echo ${SEQNAME} | tr [a-z] [A-Z])
txt=$(printf "%s %03d" ${sqn} ${frame} | \
tr '01' 'ol')
# echo $frame $img $txt
convert ${TMPIMG} \
-font Courier-Bold \
-pointsize 26 \
-kerning 5 \
-pointsize 44 \
-kerning 3 \
-fill ${TEXTCOL} \
-strokewidth 1 -stroke $STROKOL \
-gravity north \
-annotate +12+5 "$txt" \
-strokewidth 2 -stroke $STROKOL \
-gravity south \
-annotate +0+5 "$txt" \
${img}
fin=$(date +%s)
echo
echo ; sleep 1
printf "%-12s %5d %5d\n" \
${SEQNAME} $frame $(( fin-debut )) | \
tee -a WS/mp4.timing

View File

@@ -1,5 +1,11 @@
#!/bin/bash
source tools/config.sh
source tools/fonctions.sh
echo "MKSEX ( $* )" | tee -a WS/log
sleep 1
for foo in $*
do
@@ -9,7 +15,10 @@ do
tools/build-gif89a.sh $foo
else
echo "+++ Beurking on $foo" | tee -a WS/log
sleep 30
fi
visual_sleep "next render is comming" 20
done

43
tools/motionblur.sh Executable file
View File

@@ -0,0 +1,43 @@
#!/bin/bash
#
# a new experiment 2026/02/29
#
##############################
# THIS SOFTWARE IS A MESS #
# TOO SLOW FOR REAL USE #
##############################
set -e ; set -u
source tools/config.sh
source tools/fonctions.sh
START=1
if [ $# == 1 ]
then
START=$1
fi
NB_SRC=$(ls -1 frames/Spool | wc -l)
printf "%s: %d frames\n" $0 $NB_SRC | tee -a WS/log
# -------------------------------------------------------
# MAIN LOOP
for frame in $(seq $START $(( $NB_SRC-1 )) )
do
imgA=$(printf "frames/Spool/%05d.png" $frame)
imgB=$(printf "frames/Spool/%05d.png" $((frame-1)))
imgC=$(printf "frames/TMP/%05d.png" $frame)
# echo $imgA $imgB
printf "%8d" $frame
composite $imgA $imgB \
-blend 50% \
$imgC
done
ff_encodage TMP motion-blurred.mp4
# -------------------------------------------------------

View File

@@ -7,31 +7,21 @@
#include "globals.inc"
#include "contexte.inc"
#include "hexacone.inc"
#include "hexabenz.inc"
#include "hexawood.inc"
#include "trident.inc"
#declare NO_DYNAMIC = 0;
#include "all.inc"
/* XXX
#declare TrX = 1.84 * sqrt(NormClock);
#declare TrY = 0.90 + (3.5 * Cos_01(NormClock));
#declare TrZ = 9.999 * sqrt(NormClock);
#declare TrH = <TrX, TrY, TrZ>;
#declare RrY = 97 * sqrt(NormClock);
object { HexaCone () rotate y*RrY translate TrH }
*/
#include "dynamic.inc"
object { HexaCone () rotate z*9.1 translate <7, 3, -8> }
/*
* XXX
* why this two moving hexathings are not in "dynamic.inc" ?
*/
object { HexaCone () rotate z*9.1 translate <7, 3+NormClock, -8> }
object { HexaBenz () translate <-9+NormClock, 2, -6> }
/*
* nouveau 11 fevrier 2025
*/
#declare A = <-21, -0.9, (SzSol/2)+9>;
#declare B = < 33, -0.7, (SzSol/2)+7>;
#declare A = <-29, -0.5, (SzSol/2)+9>;
#declare B = < 36, -0.7, (SzSol/2)+7>;
#declare P = Interpolate(A, B, NormClock);
object { HexaWood translate P }
@@ -39,15 +29,15 @@ object { HexaWood translate P }
object { Le_Decor }
#declare CamY = 36 - (21.36 * Cos_01(NormClock));
#declare CamY = 47 - (9.50 * Cos_01(NormClock));
#declare LatY = -4 + ( 2.12 * NormClock);
camera {
location <-3.60, CamY, 10.09>
look_at <0, LatY, 0>
look_at <0.6, LatY, 0>
right <image_width/image_height, 0, 0>
// focal_point <2, 1, 12>
// aperture 0.046
// blur_samples 30
angle 45 + (52*NormClock)
angle 45 + (65*NormClock)
}

View File

@@ -1,7 +1,14 @@
/*
* H E X A C O N E T R I D E N T
*/
#declare Trid_length = 2;
// ------------------------------------------------------
/*
* 2026/01/15 : this object is malformed,
* please correct it as soon as possible.
*/
#declare Trid_cone = object
{
merge {
@@ -13,7 +20,7 @@ merge {
#macro Trid_A_cone ()
difference {
object { Trid_cone }
object { Trid_cone translate -y*0.001 }
object { Trid_cone translate -y*0.06 }
#local Foo = rand(Rng1);
#if (Foo < 0.25) texture { T_Brass_2C }
#elseif (Foo < 0.50) texture { tPlasticOrange }
@@ -50,7 +57,7 @@ merge {
#local R = rand(Rng1);
#if ( R < 0.333) texture { T_Chrome_1C }
#elseif ( R < 0.666) texture { T_Silver_1C }
#else texture { T_WIP_rasta }
#else texture { T_WIP_rasta scale 3 }
#end
}
#undef L
@@ -62,7 +69,7 @@ union {
object { Trid_A_cone () scale 0.89 translate <E, -0.05, 0> }
cylinder { 0, x*E, 0.008 scale <1, 5, 1> }
#local R = rand(Rng1);
#if ( R < 0.6 ) texture { T_Silver_3A }
#if ( R < 0.86 ) texture { T_Silver_3A }
#else texture { T_WIP_rasta }
#end
#undef E
@@ -71,8 +78,9 @@ union {
// ------------------------------------------------------
#macro Trid_A_tail ()
union {
#for (A, 0, 360, 120)
object { Trid_A_ailette () rotate (A+270)*y }
#for (A, 0, 359, 120)
#local RY = A + 27*rand(Rng1);
object { Trid_A_ailette () rotate RY*y }
#end // for
}
#end
@@ -80,13 +88,14 @@ union {
// ------------------------------------------------------
#macro Trident_A ()
union {
object { Trid_A_head () translate y*0.83 }
object { Trid_A_head () translate y*0.83 }
object { Trid_A_body () }
object { Trid_A_tail () translate -y*0.6 }
object { Trid_A_tail () translate -y*0.60 }
// object { Repere translate <0.1, 0, 0.1> }
}
#end
// ------------------------------------------------------
// ------------------------------------------------------

View File

@@ -6,14 +6,8 @@
#include "globals.inc"
#include "contexte.inc"
#include "hexacone.inc"
#include "hexabenz.inc"
#include "hexawood.inc"
#include "trident.inc"
#include "dynamic.inc"
#declare NO_DYNAMIC = 0;
#include "all.inc"
// =======================================================
@@ -22,13 +16,19 @@ object { Le_Decor }
// object { Repere scale 2 }
#declare CK = 0.8 - (NormClock * 0.71);
#declare DX_cam = 6.9 * cos(CK);
#declare DZ_cam = 5.4 * sin(CK);
#if (NormClock < 0.5000)
#declare DX_cam = -6.9 * cos(CK);
#declare DZ_cam = -5.4 * sin(CK);
#else
#declare DX_cam = -6.9 * sin(CK);
#declare DZ_cam = -5.6 * cos(CK);
#end
#declare Loc_cam = <DX_cam, 1.0, DZ_cam> + Pos_RedB_2;
camera {
location Loc_cam
look_at Pos_RedB_2 + <0, 1.95+NormClock, 0>
look_at Pos_RedB_2 + <0, 2.05+NormClock, 0>
right <image_width/image_height, 0, 0>
// focal_point <0.37, 0.0, 0>

View File

@@ -4,6 +4,76 @@
* A cosy place for experimental things (2025/10/27)
*
*/
/* =============================================================== */
/*
* nouveau : Tue Feb 10 12:42:43 AM UTC 2026
*/
#macro HoleBorder_A (V)
difference {
#local RA = V * R_hole * 1.004;
#local RB = V * R_hole * 0.996;
#local HB_H = 0.53;
cylinder { 0, y*HB_H, RA }
cylinder { -y, y*2, RB }
#for (foo, 0, 179, 4)
cylinder {
<-20, 0, 0>, < 20, 0, 0>, 0.075
scale <1, 2.2, 1> translate y*(HB_H/2)
rotate y*foo
}
#end // for
#local R = rand(Rng1);
#if (R < 0.42) texture { LeGris }
#elseif (R < 0.64) texture { T_Beton_2 }
#else texture { T_Beton_1 }
#end
}
#end
/* --------------------------------------------------------------- */
#macro HoleBorder_B (V)
union {
#local Ra = V * R_hole * 1.02;
#local Rb = 0.028;
#local KY = 0.21;
torus { Ra, Rb texture { T_Beton_2 } translate y*KY }
torus { Ra, Rb texture { T_WIP_color } translate y*(KY*2) }
torus { Ra, Rb texture { T_WIP_dents } translate y*(KY*3) }
#for (foo, 0, 359.99, 15)
#local Dx = Ra * sin(radians(foo));
#local Dz = Ra * cos(radians(foo));
cylinder { 0, y*(3*KY), Rb*0.72
#local R = rand(Rng1);
#if (R < 0.67) texture { tPlasticPrune }
#else texture { tPlasticGreen }
#end // if R
translate <Dx, 0, Dz>
}
#end // for
}
#end
/* =============================================================== */
/*
* new Tue Dec 30 07:39:09 AM UTC 2025
*/
#declare Patrouille = object
{
union {
#local EX = 1.9;
#local EZ = 2.0 + (0.5*sin(NormClock*2));
object { Trident_A () rotate x*87 }
object { HexaBenz () translate <-EX, 0, -EZ> }
object { HexaCone () translate < EX, -0.4, -EZ> }
object { HexaStar rotate y*90 translate <-EX*2, 0, -EZ*2> }
object { HexaCone () translate < EX*2, 0.3, -EZ*2> }
}
rotate y*90 // pour pointer vers X
}
/* =============================================================== */
#macro Pointe_Wagonnet_0 ()
merge {
@@ -11,13 +81,13 @@ merge {
sphere { 0, 0.06 }
#local R = rand(Rng1);
#if (R < 0.25)
texture { T_Chrome_1A }
texture { T_Chrome_3A }
#elseif (R < 0.50)
texture { T_Chrome_2B }
#elseif (R < 0.75)
texture { T_Chrome_3C }
#else
texture { T_Chrome_4D }
texture { T_Chrome_3D }
#end // IF
}
#end // Macro
@@ -27,7 +97,7 @@ object {
/* le corps */
merge {
#local L2 = Longueur / 2;
#local R = 0.27;
#local R = 0.29;
cylinder { <L2, 0, 0>, <-L2, 0, 0>, R }
sphere { <0, 0, 0>, R
scale <3, 1, 1>
@@ -45,9 +115,9 @@ object {
scale <2.5, 1, 1> translate x*L2*0.75
}
#local R = rand(Rng1);
#if (R < 0.333) texture { T_Brass_2C }
#elseif (R < 0.25) texture { GoldDark }
#elseif (R < 0.50) texture { T_Chrome_5A }
#if (R < 0.27) texture { T_Brass_2C }
#elseif (R < 0.56) texture { GoldDark }
#elseif (R < 0.70) texture { T_Chrome_5A }
#else texture { T_Gold_3C }
#end
}
@@ -67,6 +137,38 @@ union {
}
#end // macro
/* =============================================================== */
/* nouveau du 7 octobre 2025 */
#macro Une_Boule ()
sphere {
0, 0.18 + (rand(Rng1) * 0.06)
#local R = rand(Rng1);
#if (R < 0.333) texture { C_Texture }
#elseif (R < 0.666) texture { M_Texture }
#else texture { Y_Texture }
#end
finish { phong 0.7 specular 0.3 }
}
#end // macro
/* TODO
* trouver une meilleure méthode de placement
*/
#declare Les_Boules = object
{
union {
#for (A, 0, 64, 1)
#local CK = (NormClock*55.00) + (A*0.28);
object { Une_Boule ()
#local TX = 3.2 * sin(CK);
#local TY = 0.4 * cos(sin(CK));
#local TZ = 3.0 * cos(1-CK);
translate <TX, TY, TZ>
}
object { Repere scale 2 }
#end // for
}
}
/* =============================================================== */
/*
* nouveau du 25 octobre 2025
*/