Compare commits

..

105 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
Tonton Th
8e58e59806 bla 2026-01-01 03:37:21 +01:00
Tonton Th
b83fee3574 welcome in 2026, random number generator 2026-01-01 02:05:51 +01:00
Tonton Th
0ba81b2668 les derniers commits de 2026 2026-01-01 00:50:52 +01:00
Tonton Th
d3e630b423 last sequence for 2025, part 2 2025-12-31 18:54:16 +01:00
Tonton Th
bef33435a0 last sequence for 2025 2025-12-31 18:53:22 +01:00
Tonton Th
86f8f3b53f dont know how to write a good spline 2025-12-30 09:47:03 +01:00
Tonton Th
6c78be63d8 cosmetic 2025-12-30 08:23:11 +01:00
Tonton Th
98248e6cbb slow down tracing of pngs 2025-12-29 17:25:08 +01:00
Tonton Th
b3bb7319a7 suppression message de debug 2025-12-29 15:01:34 +01:00
Tonton Th
836e8e7c17 last commits before xmas 2025-12-23 08:35:07 +01:00
Tonton Th
4e960026d2 no more useless msg in log 2025-12-22 18:25:03 +01:00
Tonton Th
83b32f6c27 calmer la camera qui bouge trop 2025-12-21 17:18:51 +01:00
Tonton Th
93ef224bac oups... 2025-12-21 06:09:48 +01:00
Tonton Th
33de761dcd work on texture and dynamic and something 2025-12-21 05:32:19 +01:00
Tonton Th
99496a7e57 tweak the trident 2025-12-20 11:51:54 +01:00
Tonton Th
5f69f2f286 one more, another to come 2025-12-19 21:42:37 +01:00
Tonton Th
674654cc62 ajust some dynamic knobes 2025-12-19 19:27:04 +01:00
Tonton Th
ef1737006d cosmetic, again... 2025-12-19 18:49:38 +01:00
Tonton Th
ada61cc4fb meilleure cahute ? 2025-12-19 18:29:44 +01:00
Tonton Th
d19c46c25e oups, forget the right ! 2025-12-19 18:06:40 +01:00
Tonton Th
2167808563 tuning on hexacone 2025-12-19 18:06:01 +01:00
Tonton Th
acbd813d9b faster pussy cat blink blink 2025-12-19 02:16:17 +01:00
Tonton Th
9aa1f37dcf le commit avant-sieste 2025-12-18 22:28:33 +01:00
49 changed files with 1667 additions and 617 deletions

View File

@@ -1,10 +1,11 @@
DIMS = -W1600 -H1200
POVOPT = +q9 +A Declare=NbFrames=450 -d
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,19 @@ 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
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$@
trident.png: trident.pov Makefile $(POVDEP)
povray $(POVOPT) $(DIMS) -K$(CK) -i$< -o$@
@@ -38,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 $< $@
@@ -52,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

@@ -3,14 +3,15 @@
Un projet POVray né pendant l'hiver 2024/2025, au fin fond du Gers :
un objet **hexaconal**
prenant en compte les divergences d'opinion et les fluctuations
de la temprérature du salon.
de la température du salon.
Le concept initial, assez inprécis, sera amélioré au fil du temps,
et vous pouvez
suivre son évolution par l'intermédiaire de
[Mastodon](https://mastodon.tetaneutral.net/@tth)
avec le croisimot `#hexacone`.
avec le *croisimot* `#hexacone`.
Quelques images sont disponibles sur mon serveur de
[cuisine](http://maison.tth.netlib.re/pov/hexacone.html).
[cuisine](http://maison.tth.netlib.re/pov/hexacone.html),
avec même des liens vers les vidz.
## Prérequis
@@ -21,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 :
```
@@ -41,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
@@ -49,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 final, en ajoutant générique et
inter-titres.
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 Normal file
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"

36
approche.pov Normal file
View File

@@ -0,0 +1,36 @@
/*
* H E X A C O N E - A P P R O C H E
*
* new: Sun Oct 19 05:20:49 PM UTC 2025
*/
#version 3.7;
#include "globals.inc"
#declare NO_DYNAMIC = 0;
#include "all.inc"
object { Le_Decor }
// =======================================================
#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, 0.92+NormClock, 0>;
// object { Repere scale 5 translate Interpolate(LocCam, LatCam, 0.50) }
camera {
location <LocX, LocY, LocZ>
look_at LatCam
right <image_width/image_height, 0, 0>
// focal_point <0.37, 0.0, 0>
// aperture 0.046
// blur_samples 30
angle 42
}
// =======================================================

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,17 +7,12 @@
#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"
// =======================================================
#declare POS_Cutoff = <-20, 0, -7>;
#declare POS_Cutoff = <-21, 0, -8>;
#local TY = 1.55;
@@ -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 }
@@ -60,5 +55,6 @@ object { Le_Decor }
camera {
location <CamX, CamY, CamZ>
look_at <0, 1.5, 0> + POS_Cutoff
right <image_width/image_height, 0, 0>
angle 35 - 5*Cos_01(NormClock)
}

View File

@@ -9,30 +9,30 @@
#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, -150, 150, 10)
cylinder { <-150, 0, Foo>, <150, 0, Foo>, 0.11 }
cylinder { <Foo, 0, -150>, <Foo, 0, 150>, 0.11 }
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*7 }
object { Le_Decor }
camera {
location <45, 179+(56*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 * sqrt(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));
@@ -30,12 +25,13 @@ object { Le_Decor }
#declare AV = 0.070;
#declare LatX = R_circ * 0.96 * cos(CK + AV);
#declare LatY = 2;
#declare LatZ = R_circ * 0.97 * sin(CK + AV);
#declare LatY = 2.65;
#declare LatZ = R_circ * 0.95 * sin(CK + AV);
camera {
location <CamX, CamY, CamZ>
look_at <LatX, LatY, LatZ>
angle 60
right <image_width/image_height, 0, 0>
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 = 41;
#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,9 +43,11 @@ 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.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> }
#end // if random
#end
}
texture { T }
@@ -54,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
}
@@ -99,7 +109,7 @@ union {
#macro Les_GyroPhares ()
union {
#local E = SzSol * 0.431;
#local E = SzSol * 0.471;
#for (Idx, 0, 359, 60)
#local Ang = radians(Idx+9.33);
#local Dx = E * sin(Ang);
@@ -112,10 +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));
@@ -130,6 +140,7 @@ union {
object { HexaPole () translate <Xp, 0, Zp> }
#end // for
/* pourquoi ce truc est là ? */
torus { R_circular, 0.28
scale <1, 0.3210, 1>
translate 0.33*y
@@ -149,11 +160,11 @@ union {
}
}
/* ======================================================= */
#declare Rhxba = 0.30;
#declare R2hxba = Rhxba * 0.48;
#declare HexaBalls = object
{
#declare Rhxba = 0.30;
#declare R2hxba = Rhxba * 0.48;
merge {
sphere { 0, Rhxba }
#local E = Rhxba * 1.260;
@@ -173,82 +184,75 @@ union {
object { HexaBalls
texture { Lightning1 scale 0.44 }
rotate <clock/3, clock/4, clock/9>
translate <2, 1.51+Cos_010(NormClock), 4>
translate <2, 0.57+Cos_010(NormClock), 4>
}
object { HexaBalls
texture { Lightning2 scale 0.56 }
rotate <-clock, clock*0.33333, clock*3>
translate <4, 1.31+Cos_010(NormClock), -3>
translate <4, 0.61+Cos_010(NormClock), -3>
}
}
}
/* ------------------------------------------------------------ */
#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.1;
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
*/
// XXX #fopen Holes "WS/holes.log" write
#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);
#declare UnderHoles[Idx] = <Px, 0, Pz>;
// XXX #write (Holes, Idx, " ", Angle, " ", UnderHoles[Idx], "\n")
#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
// XXX #fclose Holes
#declare Underground = object
{
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.2 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.015;
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
}
}
// XXX object { Repere scale 25 translate y + Pos_RedB_2 }
/* ======================================================= */
/*
* nouvel éclairage du 10 février 2025
@@ -283,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 + (5*rand(Rng1)));
#local DX = 66 * sin(CK);
#local DZ = 64 * cos(CK);
#local CK = radians(foo + (9*rand(Rng1)));
#local DX = 76 * sin(CK);
#local DZ = 74 * cos(CK);
object { Chose () translate < DX, 0, DZ> } // XXX
#end
}
@@ -336,9 +340,9 @@ sky_sphere {
gradient y
color_map {
[ 0.2 color Gray20 ]
[ 0.4 color rgb <.5, .4, .4> ]
[ 0.7 color Gray40 ]
[ 0.9 color rgb <.5, .5, .4> ]
[ 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)
@@ -357,31 +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) rotate y*59 translate <-22, 0, -20> }
object { Les_Arches (2) rotate y*152 translate <-34, 0, -26> }
object { Les_Arches (1.9) rotate y*132 translate <-34, 0, -26> }
object { Les_Cahutes () translate <23, 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.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 <-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> }
/* les trucs dans le Y négatif */
object { OpenBox(1.5, 0.08) translate <-16, 1.49, -88> }
object { OpenBox(1.5, 0.08) translate <-18, 1.52, -104> }
object { OpenBox(1.5, 0.08) translate <-17, 1.52, -134> }
object { Les_Cahutes () translate <27, 0, -79> }
object { Les_Cahutes () translate <31, 0, -91> }
object { Les_Cahutes () translate <29, 0, -104> }
}
}
/* ------------------------------------------------------------ */

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
@@ -44,12 +39,13 @@ object { Le_Decor }
// =======================================================
#local CamX = POS_Cutoff.x + 5 + (3.14*Cos_01(NormClock));
#local CamY = 2.1 + (1.11*sqrt(NormClock));
#local CamZ = POS_Cutoff.z + 4.55 - (1.02*NormClock);
#local CamX = POS_Cutoff.x + 3.5 + (3.14*Cos_01(NormClock));
#local CamY = 2.01 + (1.14*sqrt(NormClock));
#local CamZ = POS_Cutoff.z + 4.30 - (1.02*NormClock);
camera {
location <CamX, CamY, CamZ>
look_at <0, 1.5, 0> + POS_Cutoff
right <image_width/image_height, 0, 0>
angle 40 - 12*Cos_01(NormClock)
}

View File

@@ -1,15 +1,29 @@
/*
*/
#include "gadgets.inc"
// =======================================================
// 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);
@@ -22,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] }
/// =======================================================
/*
@@ -33,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
@@ -47,38 +64,65 @@ 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, 6> translate < K, 1.9, 0> }
object { HexaCone () rotate <9, 1, 7> translate < K, 1.9, 0> }
}
}
object { BiCone rotate -y*(Cos_010(NormClock)*55.38) translate Pos_RedB_1 }
object { BiCone rotate -y*(Cos_010(NormClock)*65.38) translate Pos_RedB_1 }
object { Trident_A() rotate z * (3*NormClock)
translate x*0.80
rotate y*(520*Cos_01(NormClock))
translate Pos_RedB_2 + (y*2) }
/* les tridents posés sur leur estrade */
#declare BiTrident = object
{
union {
object { Trident_A () rotate -z * 9.9 translate -x*0.92 }
object { Trident_A () rotate z * 8.4 translate x*0.90 }
}
}
object { BiTrident
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
*/
#declare A = <-SzSol, 22, -10>;
#declare B = < SzSol+4, 18, -11>;
#declare A = <-SzSol, 24, -10>;
#declare B = < SzSol+4, 26, -11>;
#declare P = Interpolate(A, B, NormClock);
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)-3+(11*NormClock);
#declare Tr = UnderHoles[Foo] + <0, Dy, 0>;
#declare Ry = ((rand(Rng1)-NormClock)*87);
// #write (Trid, Foo, " ", NormClock, " ", Dy, " ",
// Ry, " ", Tr, "\n")
object { Trident_A () translate y*rand(Rng1) 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
/*
* ----------------------------
@@ -106,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 }
/*
@@ -130,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.37) ;
#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,17 +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>
angle 56 - (19.84 * NormClock)
right <image_width/image_height, 0, 0>
angle 54 - (31 * NormClock)
}

360
essai.pov
View File

@@ -5,31 +5,66 @@
#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"
/*
* il faut faire le tri ici !
-* __________________________
*/
// =======================================================
// nouveau du 10 février 2026
#macro Anemone_A (E, H)
union {
#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
// XXX
#include "xperiment.inc"
// XXX
// =======================================================
/*
* 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;
#for (Foo, 0, 6)
#local Dy = Foo * 0.580;
#local Hcs = 0.550;
#local Rco = R_basecone * 3.333;
#for (Foo, 0, 5)
#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.0001
cone { 0, Rco, <0, Hcs, 0>, 0.001
#if (rand(Rng1) < 0.50) texture { Y_Texture }
#else texture { M_Texture }
#end // if rand
@@ -39,12 +74,18 @@ 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
* Un semblant de wagonnet qui va tourner sur le
@@ -56,183 +97,306 @@ union {
#local L = 2.4;
union {
object { Wagonnet_0(L) translate <0, 1, 1.6> }
object { Wagonnet_0(L+1) translate <0, 2+NormClock, 0> }
object { Wagonnet_0(L) translate <0, 1, 1.9> }
object { Wagonnet_0(L+1) translate <0, 3+NormClock, 0> }
object { Wagonnet_0(L) translate <0, 1, -1.8> }
}
}
// =======================================================
/* nouveau du 7 octobre 2025 */
#macro Une_Boule ()
sphere {
0, 0.15 + (rand(Rng1) * 0.07)
#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, 32, 1)
#local CK = (NormClock*55.00) + (A*0.28);
object { Une_Boule ()
#local TX = 1.9 * sin(CK);
#local TY = 1.4 * cos(sin(CK));
#local TZ = 2.0 * cos(1-CK);
translate <TX, TY, TZ>
}
// object { Repere scale 2 }
#end // for
}
}
// =======================================================
/*
* nouveau du 25 octobre 2025
*/
#declare Obj_BasicTexture = object
{
#local R = 0.369;
#local H = 1.2;
#local R = 0.385;
#local H = 1.51;
merge {
cylinder { 0, y*H, R }
sphere { 0, R scale <1, 0.50, 1> translate y*H }
box { <-0.19, 0, -0.17>, <R+0.4, H*0.39, R+0.6> }
difference {
#local R1 = R+0.46;
#local R2 = R+0.63;
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
// -------------------------------------------------------
// -------------------------------------------------------
// the place to try new textures
#declare ProtoTextures = object
{
#local TR = 2.20;
#local TX = 2.55;
#local TZ = 2.95;
#local Kro = 32 + (NormClock * 37);
union {
object { Obj_BasicTexture texture { R_Texture }
translate <TR*1.4, 0, 0> }
rotate y * (rand(Rng1)*Kro)
translate <TX, 0, -TZ> }
object { Obj_BasicTexture texture { G_Texture }
translate <0, 0, -1> }
rotate y * (rand(Rng1)*Kro)
translate <TX, 0, 0> }
object { Obj_BasicTexture texture { B_Texture }
translate <0, 0, TR/2> }
rotate y * (rand(Rng1)*Kro)
translate <TX, 0, TZ> }
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 }
object { Obj_BasicTexture texture { T_WIP_dents }
rotate y * (rand(Rng1)*Kro)
translate <-TX, 0, TZ> }
object { Obj_BasicTexture texture { T_WIP_rasta }
rotate y * (rand(Rng1)*Kro)
translate <-TX, 0, 0> }
object { Obj_BasicTexture texture { T_WIP_bluewave }
rotate y * (rand(Rng1)*Kro)
translate <-TX, 0, -TZ> }
object { Repere scale 1.5 translate y*0.5 }
}
}
// =======================================================
/* 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.0, 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 + rand(Rng1);
#declare E = 12 + (3*rand(Rng1));
#declare Dx = E * sin(radians(I));
#declare Dz = E * cos(radians(I));
#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 { Une_Arche (0.333) scale 2 }
object { Des_Choses }
#local AngleCam = 17;
#break
#case (1)
object { Les_Arches (1.57) rotate -y*(clock*0.666) }
#declare AngleCam = 22;
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 rotate <30, 0, 30> translate 0.7*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 { Les_Wagonnets 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 { BasicTextures rotate -y*clock translate Pos }
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.41 + (1.2*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 {
#if (clock < 225)
orthographic
#end
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.45;
/* 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 ()
@@ -28,16 +62,17 @@ merge {
* 29 novembre 2025, je tente l'expérience
*/
#macro Chose_les_tiges ()
merge {
union {
#local CK = NormClock * (7.876+rand(Rng1));
#for (Foo, 0, 7)
#local CK2 = CK + Foo;
#local C2X = (R_C + 0.2) * sin(CK2+rand(Rng1)) * sin(CK*3);
#local C2Z = (R_C + 0.3) * (sin(-CK2+rand(Rng1)) *
#local C2X = (R_C + 0.1) * sin(CK2+rand(Rng1)) * sin(CK*3);
#local C2Z = (R_C + 0.1) * (sin(-CK2+rand(Rng1)) *
cos(CK*(rand(Rng1))));
#local Rt = 0.02+(0.03*Cos_010(NormClock));
#local H = 1.26;
cylinder { 0, <C2X, H, C2Z>, Rt }
#local Rt = 0.015+(0.03*Cos_010(NormClock));
#local B = <0, -0.05, 0>;
#local H = 0.80;
cylinder { B, <C2X, H, C2Z>, Rt }
sphere { <C2X, H, C2Z>, Rt }
#end
#local R = rand(Rng1);
@@ -46,14 +81,14 @@ merge {
#elseif (R < 0.75) texture { tPlasticPrune }
#else texture { tPlasticGreen }
#end // if
translate y*1.05
translate y*0.87
}
// #debug "== Fin chose les tiges\n"
#end // macro
// ------------------------------------------------------ ##
#macro Chose_le_corps () // = object
difference {
#local H = 0.60 + (0.10 * rand(Rng1));
#local H = 0.42 + (0.10 * rand(Rng1));
cone { 0, R_C*0.52, y*H, R_C }
sphere { y*H, R_C*0.75 }
#local R = rand(Rng1);
@@ -76,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);
@@ -84,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 !
@@ -106,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
@@ -118,9 +201,9 @@ prism {
// ------------------------------------------------------ ##
#macro HexaPole_tubes ()
#local R = 0.04;
#local E = 0.51;
#local H = H_cone*1.5;
#local R = 0.033;
#local E = 0.49;
#local H = H_cone*0.705;
union {
#for (A, 0, 359, 60)
#local Xp = E * cos(radians(A));
@@ -128,7 +211,7 @@ union {
union {
#local H2 = H + rand(Rng1) + rand(Rng1);
cylinder { 0, y*H2, R }
sphere { 0, R*2 scale <1, 0.555, 1> }
sphere { 0, R*3 scale <1, 0.555, 1> }
sphere { 0, R*2 scale <1, 1.555, 1> translate y*H2 }
#local Ra = rand(Rng1);
#if (Ra < 0.25) texture { T_Chrome_1A }
@@ -167,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 }
@@ -179,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
@@ -189,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
@@ -203,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
@@ -213,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

@@ -1,7 +1,7 @@
global_settings {
assumed_gamma 1.0
ambient_light rgb <0.48, 0.47, 0.48>
ambient_light rgb <0.48, 0.49, 0.48>
max_trace_level 15
}
@@ -11,7 +11,7 @@ global_settings {
#include "stones.inc"
#include "woods.inc"
#declare Rng1 = seed(1789);
#declare Rng1 = seed(1221);
#declare foo = rand(Rng1);
#declare Rng2 = seed(now*24*60*60);
#declare bar = rand(Rng2);
@@ -23,10 +23,10 @@ global_settings {
* Some constants...
*/
#declare SzSol = 34;
#declare SzSol = 36;
#declare H_sol = 0.000; // c'est quoi exactement ?
#declare SzBase = 2.90;
#declare SzBase = 2.97;
#declare H_base = 0.23;
#declare R_basecone = 0.117;
@@ -41,15 +41,25 @@ global_settings {
#declare R_circular = (SzSol * 1.60);
#declare R_hole = 3.1; // holes in the background
/* ------------------------------------------------------------ */
/*
* Some textures...
*/
#declare WIP_color = texture
#declare LeGris = texture
{
pigment { color Cyan*NormClock }
finish { phong 0.23 ambient 0.50 }
/* 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
{
#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 */
#declare Ground_Texture = texture
{
pigment { rgb <0.31, 0.33, 0.24> }
normal { dents 0.22 scale 1.6}
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 }
}
}
@@ -177,6 +188,72 @@ finish {
#declare C_Texture = texture {
pigment { rgb <0.0, 0.8, 0.8> } finish { ambient 0.33 } }
/* ------------------------------------------------------------ */
/* nouvelle texture du début du jour de l'hiver 2025 */
#declare T_WIP_rasta = texture
{
pigment {
granite
color_map {
[0.00 color Black ]
[0.30 color Red ]
[0.50 color Green ]
[0.70 color Yellow ]
[1.00 color Black ]
}
}
finish { phong 0.23 ambient 0.30 }
scale <3, 4, 3>
}
/* ------------------------------------------------------------ */
/* nouveau du lundi d'après noël 2025 */
#declare T_WIP_bluewave = texture
{
pigment {
wood
color_map {
[0.0 color Gray60 ]
[0.5 color Gray80 ]
[0.5 color Blue ]
[1.0 color Blue ]
}
turbulence 0.04
translate <NormClock*0.1, sqrt(NormClock*0.4),
NormClock*0.333>
scale <0.2, 0.3, 1>
}
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

@@ -46,13 +46,15 @@ texture { T_Beton_2 }
#debug concat("Texte du compteur ", Texte, "\n\n")
text {
ttf "datas/ComicMono-Bold.ttf" Texte 0.1, 0
texture { T_WIP_alert }
// texture { T_WIP_alert }
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 }
}
@@ -66,7 +68,7 @@ intersection {
png "datas/hf.png" smooth
translate <-.5, 0, -.5>
#local SC = SzSol * 1.111;
scale <SC, 0.90, SC>
scale <SC, 0.95, SC>
texture {
pigment {
image_map { png "datas/cuivre.png" }
@@ -76,7 +78,7 @@ intersection {
}
}
}
cylinder { -y*5, y*5, SzSol*0.45 }
cylinder { -y*5, y*5, SzSol*0.52 }
}
finish { phong 0.096 }
translate y*H_sol
@@ -86,13 +88,13 @@ translate y*H_sol
#declare GroundBase_a = object
{
/*
C'est quoi ce truc ?
le soubassement de l'abribus
*/
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;
@@ -111,8 +113,8 @@ texture { T_Grnt7 rotate 49 scale 0.333 }
#declare GroudBase_coin = object
{
merge {
cylinder { 0, y*0.5, 0.10 }
sphere { 0, 0.10 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 }
}
}
@@ -127,7 +129,7 @@ union {
object { GroudBase_coin translate <-Sz, Hc, Sz> }
object { GroudBase_coin translate < Sz, Hc, Sz> }
}
texture { T_Grnt27 rotate 9 scale 0.32 }
texture { T_Grnt27 rotate 9 scale 0.302 }
#undef Sz
#undef Hc
}

View File

@@ -31,7 +31,7 @@ torus { Ec, Ec*0.06
texture { T_Brass_1C }
#end
}
#end
#end // macro
// ------------------------------------------------------
@@ -74,16 +74,16 @@ merge {
#for (foo, 0, 360, 30)
#local Tx = E * sin(radians(foo));
#local Ty = E * cos(radians(foo));
#local Dza = z * 0.25;
#local Dza = z * 0.27;
#local Dzb = z * 0.97;
cylinder { -Dza, Dzb, R translate <Tx, Ty, 0> }
sphere { -Dza, R*1.8 translate <Tx, Ty, 0> }
sphere { Dzb, R*1.8 translate <Tx, Ty, 0> }
#end
#if ( rand(Rng1) < 0.520)
texture { Orange_Glass }
#else
texture { Yellow_Glass }
#local R = rand(Rng1);
#if ( R < 0.320) texture { Orange_Glass }
#elseif (R < 0.64) texture { Ruby_Glass }
#else texture { Yellow_Glass }
#end
}
#end
@@ -96,10 +96,8 @@ difference {
cylinder { < 1, 0, -1>, <-1, 0, 1>, R_Tube*0.21 }
}
scale <1, 1, 4.4>
#if ( rand(Rng1) < 0.390)
texture { Shadow_Clouds scale 0.56 }
#else
texture { Flashy }
#if ( rand(Rng1) < 0.420) texture { Shadow_Clouds scale 0.56 }
#else texture { Flashy }
#end
#end // end macro
@@ -161,9 +159,25 @@ texture { Soft_Silver scale 6.0 }
}
// ------------------------------------------------------
// 1er janvier 2026, il est temps de s'y remettre */
#macro Benz_Antenne ()
union {
#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>
}
#warning "===>> inserer antenne pour hexabenz"
#if ( mod(clock, 10+3*rand(Rng1)) < (10*rand(Rng1)) )
texture { tPlasticPrune }
#else texture { tPlasticGreen }
#end
}
#end
// ------------------------------------------------------
#macro Benz_Tube ()
@@ -171,8 +185,13 @@ texture { Soft_Silver scale 6.0 }
// {
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 { Benz_Antenne ()
translate <0, -0.37, 0.76>
rotate z*45 }
}
// }
#end

View File

@@ -6,30 +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

@@ -36,10 +36,13 @@ union {
cylinder {-z, z, 0.11 }
}
// XXX not very tested
#local Rt2 = 0.009;
torus { .25, .005 }
torus { .25, Rt2 rotate x*90 }
torus { .25, Rt2 rotate z*90 }
#local Sc = 3.57;
#local Rt1 = 0.333;
#local Rta = Rt1 / Sc;
#local Rt2 = 0.0062;
torus { Rta, Rt2 scale <Sc, 1, Sc> }
torus { Rt1, Rt2 scale <1, Sc, 1> rotate x*90 }
torus { Rta, Rt2 scale <Sc, 1, Sc> rotate z*90 }
// clignotement de la lumiere \o/
#local kR = 0.065;
@@ -60,7 +63,7 @@ union {
fade_power 1.58
}
}
#if (rand(Rng1) < 0.20)
#if (rand(Rng1) < 0.30)
texture { New_Penny }
#else
texture { GoldDark }
@@ -170,7 +173,7 @@ merge {
#elseif (R < 0.8)
texture { Dark_Green_Glass }
#else
texture { Flashy }
texture { Flashy scale 2 }
#end
}
#end // macro

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,15 +16,16 @@ object { Le_Decor }
// object { Repere scale 2 }
#declare Loc_cam = <2, 2.5, 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 - 26 * Cos_01(NormClock)
angle 59 - 25 * Cos_01(NormClock)
}

View File

@@ -0,0 +1,109 @@
/*
* H E X A S T A R
*
* nouveau du dernier jour de 2025, courage paur 2026 <3
*/
/* ------------------------------------------------------------ */
/* ============================================================ */
/* Un des six éléments de base */
#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
/* ------------------------------------------------------------ */
/*
* 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
/* ------------------------------------------------------------ */
/* 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 N*six élements */
#declare HS_les_elements = object
{
union {
#for (Foo, 0, 360, 60)
#local E = HS_radius;
#local Ty = E * cos(radians(Foo));
#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
object { HS_element_central () }
// object { Repere }
}
}
/* ============================================================ */
/* Et voici l'engin final */
#declare HexaStar = object
{
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

@@ -30,10 +30,8 @@ union {
HW_Un_Cone ()
#if ( rand(Rng1) < 0.5 )
texture { T_Wood32 rotate 37 scale 1.30 }
// texture { WIP_color }
#else
texture { T_Wood23 rotate x*87 scale 1.33 }
// texture { T_WIP_alert }
#end
// rotate -z*foo
translate <Tx, Hc_ep - 0.22, Tz>
@@ -86,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 }
@@ -111,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> }
@@ -123,20 +121,46 @@ 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
{
union {
object { HW_Chassis () }
object { HW_les_pattes }
#if (mod(clock, 10) < 6)
light_source { 0.20*y rgb <0, 0.20, 0.95> }
#if (mod(clock, 8) < 5)
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,13 +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
angle 16 + 2.51*NormClock
right <image_width/image_height, 0, 0>
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,18 +67,34 @@ 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)
focal_point <0.0, 0.0, 0>
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 = 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);
@@ -36,5 +30,6 @@ camera {
// orthographic
location <CamX, CamY, 0>
look_at <LatX, LatY, LatZ>
angle 71 + (NormClock * 10)
right <image_width/image_height, 0, 0>
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,20 +34,21 @@ 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
camera {
location <-2.76, 1.53, 8.76>
look_at <PosX+0.09, PosY, PosZ-0.03>
right <image_width/image_height, 0, 0>
// focal_point <0, 1, 0>
// aperture 0.046
// blur_samples 30

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,27 +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 translate P }
object { HexaWood scale 10 translate P }
#end
// ---------------------------------------------------------
@@ -35,17 +33,18 @@ object { Le_Decor }
// object { Repere scale 3 translate <SzSol, 2, SzSol> }
#local DistCam = 380;
#local CK = -1.101 - (0.130 * 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 {
location <CamX, CamY, CamZ>
look_at <0, 0.3, 0>
look_at <0, 0.35, 0>
right <image_width/image_height, 0, 0>
// focal_point <2, 1, 12>
// aperture 0.046
// blur_samples 30
angle 4.0
angle 3.5
}

View File

@@ -1,35 +1,32 @@
/*
* 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
// blur_samples 30

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, -2>,
0.4, < 1, 1.5, 0>,
0.6, < 0, 2.2, 0>,
0.8, <-1, 0.8, 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
#for (CK, 0.00, 1.00, 0.0021)
sphere { <0,0,0>, 0.023
texture{
pigment {color rgb <0.20, 0.14, 0.14> }
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
}
// =======================================================
@@ -118,6 +116,7 @@ union {
camera {
location Loc_cam
look_at Lat_cam
right <image_width/image_height, 0, 0>
// focal_point <0.37, 0.0, 0>
// aperture 0.046
// blur_samples 30

View File

@@ -7,33 +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 = 3 * sin(NormClock*7.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
angle 50
right <image_width/image_height, 0, 0>
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"
STROKOL="SeaGreen"
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
local NBRE=180
datetime=$(LANG=fr date -u +"%Y/%m/%d %H:%M")
echo $datetime | tee -a WS/log
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,12 +17,12 @@ 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
echo "TMPIMG" ${TMPIMG} | tee -a WS/log # DEBUG !
# echo "TMPIMG" ${TMPIMG} | tee -a WS/log # DEBUG !
INC=1
for frame in $(seq $START $INC $((NBFRAMES-1)))
do
@@ -34,23 +34,26 @@ do
err=$?
if [ $err != 0 ] ; then
echo "$SEQNAME fail $frame" >> WS/log
mogrify -colorspace gray -blur 5x5 -colors 16 $img
mogrify -colorspace gray -blur 5x5 -colors 8 $img
visual_sleep "render fail" 12
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 18 \
-pointsize 44 \
-kerning 3 \
-fill ${TEXTCOL} \
-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
@@ -62,6 +65,6 @@ echo
ff_encodage $SEQNAME wip-${SEQNAME}.mp4
echo "build of $SEQNAME done" | tee -a WS/log
echo "build of '$SEQNAME' done" | tee -a WS/log

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

@@ -17,7 +17,7 @@ fi
# echo "plot timing $sequence" >> WS/log
count=$( grep $sequence WS/mp4.timing | wc -l )
echo "$count samples for $sequence" | tee -a WS/log
echo "$count samples for $sequence"
grep $sequence WS/mp4.timing | tail -4000 | awk \
-v nbframes=$NBFRAMES \

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 }
/*
* XXX
* why this two moving hexathings are not in "dynamic.inc" ?
*/
#include "dynamic.inc"
object { HexaCone () rotate z*9.1 translate <7, 3, -8> }
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,14 +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 }
@@ -27,7 +34,7 @@ difference {
#macro Trid_A_head ()
union {
#for (A, 0, 360, 120)
#local E = 0.28;
#local E = 0.29;
#local Tx = E * sin(radians(A));
#local Tz = E * cos(radians(A));
object { Trid_A_cone () translate <Tx*2, 0, Tz> }
@@ -45,12 +52,12 @@ union {
#local R = 0.095;
merge {
cylinder { <0, -L, 0>, <0, L, 0>, R }
sphere { 0, R scale <1, 6.11, 1> translate y*L }
sphere { 0, R scale <1, 0.42, 1> translate -y*L }
sphere { 0, R scale <1, 6.66, 1> translate y*L }
sphere { 0, R scale <1, 0.45, 1> translate -y*L }
#local R = rand(Rng1);
#if ( R < 0.333) texture { T_Chrome_1C }
#elseif ( R < 0.666) texture { T_Silver_1C }
#else texture { tPlasticGreen }
#else texture { T_WIP_rasta scale 3 }
#end
}
#undef L
@@ -59,11 +66,11 @@ merge {
#macro Trid_A_ailette ()
union {
#local E = 0.49;
object { Trid_A_cone () scale 0.85 translate <E, -0.05, 0> }
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.8 ) texture { T_Silver_3A }
#else texture { B_Texture }
#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
@@ -82,11 +90,12 @@ union {
union {
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"
// =======================================================
@@ -21,14 +15,22 @@ object { Le_Decor }
// object { Repere scale 2 }
#declare CK = NormClock * 2.78;
#declare DX_cam = 6.9 * cos(CK);
#declare DZ_cam = 5.4 * sin(CK);
#declare CK = 0.8 - (NormClock * 0.71);
#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>
// aperture 0.046
// blur_samples 30

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
*/
@@ -74,11 +176,14 @@ union {
object {
// #debug concat(" Arche, val = ", str(Val, 6, 4), "\n")
merge {
#local Ha = 2;
#local Ha = 1.80;
#local D2 = Val * 1.414;
// mettre une base de la colonne
cylinder { <-1, 0, 0>, <-1, 0.20, 0> Val*1.49 }
cylinder { < 1, 0, 0>, < 1, 0.20, 0> Val*1.41 }
sphere { < 1, 0.20, 0> Val*1.41 }
cylinder { <-1, 0, 0>, <-1, 0.20, 0> D2 }
cylinder { < 1, 0, 0>, < 1, 0.20, 0> D2 }
sphere { 0, D2 scale <1, 0.5, 1> translate <-1, 0.20, 0> }
sphere { 0, D2 scale <1, 0.5, 1> translate < 1, 0.20, 0> }
// les deux futs de l'arche
cylinder { <-1, 0, 0>, <-1, Ha, 0>, Val }
cylinder { < 1, 0, 0>, < 1, Ha, 0>, Val }
#if (rand(Rng1) < 0.50)
@@ -117,6 +222,15 @@ union {
}
#end // macro
#macro Trois_Arches (Dist)
union {
object { Une_Arche (0.05) }
object { Une_Arche (0.05) translate z*2 }
object { Une_Arche (0.05) translate z*4 }
scale 1.85
}
#end // macro trois arches
// ==============================================================
/*
* new Mon Oct 27 04:54:41 PM UTC 2025
@@ -134,7 +248,7 @@ union {
#macro Cahute_0 ()
difference {
#local KX = 0.55;
#local KX = 0.52;
#local KH = 1.80 + rand(Rng1) ;
// #debug concat(" Cahute_0, KH = ", str(KH, 6, 4), "\n")
#local KZ = KX + (0.24*rand(Rng1));
@@ -144,21 +258,18 @@ difference {
#local KX = KX * Mult;
#local KH = KH * Mult;
#local KZ = KZ * Mult;
box { <-KX, 0, -KZ>, <KX, KH, KZ> }
box { <-KX, 0.0001, -KZ>, <KX, KH, KZ> }
cylinder { <-10, KH*0.70, 0>, <10, KH*0.72, 0>, KX * 0.666 }
cylinder { <-10, KH*0.70, 0>, <10, KH*0.72, 0>, KX * 0.823 }
#local R = rand(Rng1);
// #debug concat("Random = ", str(R, 6, 4), "\n")
#if ( R < 0.19 )
texture { T_Planete_A }
#elseif ( R < 0.56 )
texture { T_Beton_1 }
#else
texture { T_Beton_2 }
#if ( R < 0.23 ) texture { T_Planete_A }
#elseif ( R < 0.56 ) texture { T_Beton_1 }
#else texture { T_Beton_2 }
#end // if
rotate y * (277 * rand(Rng1))
rotate y * (207 * rand(Rng1))
}
#end // macro
@@ -183,6 +294,3 @@ scale 0.5
// rotate -y * (clock*0.33)
#end
// =======================================================
// ==============================================================