Compare commits
287 Commits
db5eedffe1
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c37530d999 | ||
|
|
15849c4aa2 | ||
|
|
3f57aec353 | ||
|
|
90562d2ce6 | ||
|
|
daaa8eeb01 | ||
|
|
35e6c0dfb5 | ||
|
|
6ee8932ba4 | ||
|
|
a3558cc1db | ||
|
|
2eea147f82 | ||
|
|
4dca1e7d79 | ||
|
|
0207fc942b | ||
|
|
59c2b266ef | ||
|
|
f6104c8b5d | ||
|
|
676cf5bd87 | ||
|
|
c0a0d2467e | ||
|
|
5e5d0ae116 | ||
|
|
b6ac4f8ce5 | ||
|
|
3fdfa5a0c0 | ||
|
|
fd452889ea | ||
|
|
b3030b886d | ||
|
|
b246f3ba23 | ||
|
|
27b37f17dd | ||
|
|
ffd3f48b9d | ||
|
|
dfedf5f52c | ||
|
|
dd4fe05229 | ||
|
|
0649930f7e | ||
|
|
606536c3f3 | ||
|
|
6a983ee560 | ||
|
|
d349b23a91 | ||
|
|
77c82f6e96 | ||
|
|
e5439eee54 | ||
|
|
fe3bdff7dd | ||
|
|
f1fcebd77d | ||
|
|
c47606438f | ||
|
|
ceb4dea907 | ||
|
|
1bef5baa93 | ||
|
|
2d5093eab9 | ||
|
|
1ed6ce79d1 | ||
|
|
47a2089561 | ||
|
|
9de6929b48 | ||
|
|
9779b15176 | ||
|
|
8a6f4b3e12 | ||
|
|
a4025b907f | ||
|
|
957fb39ec2 | ||
|
|
438cb71b43 | ||
|
|
d479b566b3 | ||
|
|
02556e71d3 | ||
|
|
c08cd56637 | ||
|
|
a51a963ba0 | ||
|
|
77ebfd9018 | ||
|
|
4e88f481ff | ||
|
|
f251fbb825 | ||
|
|
0c4aa1a31c | ||
|
|
83c8ce3f79 | ||
|
|
243490996f | ||
|
|
5ae1cd149c | ||
|
|
32eb08a0c1 | ||
|
|
80044acb4c | ||
|
|
6350c799db | ||
|
|
fb126ec1b0 | ||
|
|
eda56a4ac1 | ||
|
|
6032290f5e | ||
|
|
722795a45f | ||
|
|
e321cd510b | ||
|
|
297d0f478b | ||
|
|
324198eb3f | ||
|
|
4efc950a50 | ||
|
|
ad0272bff1 | ||
|
|
bdd3a53a8c | ||
|
|
cf3fa8f1ce | ||
|
|
0803d45d5c | ||
|
|
111a7519f1 | ||
|
|
90894f8008 | ||
|
|
b0c0cc3140 | ||
|
|
f5eb6cfe78 | ||
|
|
36f1e1df37 | ||
|
|
a575e428b2 | ||
|
|
f5b2e1c227 | ||
|
|
75cb2ff594 | ||
|
|
2b92b3d584 | ||
|
|
ebeb9abf11 | ||
|
|
30ad204b5e | ||
|
|
8e58e59806 | ||
|
|
b83fee3574 | ||
|
|
0ba81b2668 | ||
|
|
d3e630b423 | ||
|
|
bef33435a0 | ||
|
|
86f8f3b53f | ||
|
|
6c78be63d8 | ||
|
|
98248e6cbb | ||
|
|
b3bb7319a7 | ||
|
|
836e8e7c17 | ||
|
|
4e960026d2 | ||
|
|
83b32f6c27 | ||
|
|
93ef224bac | ||
|
|
33de761dcd | ||
|
|
99496a7e57 | ||
|
|
5f69f2f286 | ||
|
|
674654cc62 | ||
|
|
ef1737006d | ||
|
|
ada61cc4fb | ||
|
|
d19c46c25e | ||
|
|
2167808563 | ||
|
|
acbd813d9b | ||
|
|
9aa1f37dcf | ||
|
|
38d3863124 | ||
|
|
f2e324e038 | ||
|
|
f9054a1248 | ||
|
|
936b3dda9e | ||
|
|
48a85f3e70 | ||
|
|
0171c92682 | ||
|
|
93faad3ec2 | ||
|
|
0f15000cf5 | ||
|
|
2ec6a3f11c | ||
|
|
8aaab36673 | ||
|
|
77f4f50477 | ||
|
|
3a4532625e | ||
|
|
2f0894985d | ||
|
|
db527e05c2 | ||
|
|
768c10aa56 | ||
|
|
346a4ed6ad | ||
|
|
a357cd0b1c | ||
|
|
7b9eb5743d | ||
|
|
7525862909 | ||
|
|
24469ba611 | ||
|
|
23254ba7fa | ||
|
|
636e019e97 | ||
|
|
11c8461d38 | ||
|
|
9ad8fcd1c9 | ||
|
|
1fe506b568 | ||
|
|
5e57a65ea8 | ||
|
|
ab8c293cd1 | ||
|
|
4f3140dd32 | ||
|
|
245740d2a2 | ||
|
|
a924f62890 | ||
|
|
3728c5f738 | ||
|
|
aff60cf979 | ||
|
|
454b2ddfbb | ||
|
|
83d4e55871 | ||
|
|
c56db2a87d | ||
|
|
fa8f9578b5 | ||
|
|
58221df55c | ||
|
|
32ca8c29c2 | ||
|
|
572bbc9561 | ||
|
|
f9cd36f83e | ||
|
|
d7960898df | ||
|
|
7ad90524c1 | ||
|
|
98f0354f91 | ||
|
|
0e3a481e14 | ||
|
|
858c4201db | ||
|
|
b123e035d2 | ||
|
|
212993963d | ||
|
|
9560b26090 | ||
|
|
730b4d5a23 | ||
|
|
7fbcbec840 | ||
|
|
46b0f2005b | ||
|
|
0b04ffd359 | ||
|
|
030f2fb2cf | ||
|
|
b3e2cd4ac9 | ||
|
|
75b1b9f741 | ||
|
|
8532b81c36 | ||
|
|
29bed43554 | ||
|
|
40bf162ba8 | ||
|
|
1a2fbe84b9 | ||
|
|
4581bb3e37 | ||
|
|
63b99262a9 | ||
|
|
bebb802f36 | ||
|
|
048148967b | ||
|
|
5706911bde | ||
|
|
9f177bc3fd | ||
|
|
876d574eec | ||
|
|
7c2fc424b3 | ||
|
|
5aa179c8e8 | ||
|
|
70469c7904 | ||
|
|
7a17acc39e | ||
|
|
da5afe8283 | ||
|
|
fcb1fb7467 | ||
|
|
fc8ae98193 | ||
|
|
74892d028c | ||
|
|
be152900c4 | ||
|
|
fef45190f3 | ||
|
|
3ab7c627d9 | ||
|
|
85c447f825 | ||
|
|
b03e7f5571 | ||
|
|
2b1ffaf4cb | ||
|
|
d0bd061b50 | ||
|
|
f127948f49 | ||
|
|
c30c7a7b11 | ||
|
|
ac5272c2c5 | ||
|
|
aefee1de0b | ||
|
|
912eea2f3d | ||
|
|
1f534e88cf | ||
|
|
150c546fb4 | ||
|
|
18c84133b6 | ||
|
|
d911af44c6 | ||
|
|
319e44a072 | ||
|
|
75d51755cb | ||
|
|
90af7dd796 | ||
|
|
b2cbcd928f | ||
|
|
0f72fd1ed0 | ||
|
|
c3b4d94977 | ||
|
|
9a00f7317f | ||
|
|
1c2a4f9be2 | ||
|
|
fd7c2fe707 | ||
|
|
3eae9b7308 | ||
|
|
b324d4a5df | ||
|
|
877b5aaef6 | ||
|
|
50199c18d4 | ||
|
|
d823515699 | ||
|
|
34c94e0338 | ||
|
|
48c5ccbe66 | ||
|
|
c156230406 | ||
|
|
8c60007b71 | ||
|
|
a5f2e41502 | ||
|
|
302b25a790 | ||
|
|
266c9cb543 | ||
|
|
f0e69c9478 | ||
|
|
6dde4cbf0f | ||
|
|
cb43cb4481 | ||
|
|
97f6018cc9 | ||
|
|
a459f22073 | ||
|
|
5b2ef0c558 | ||
|
|
55a174f4f2 | ||
|
|
7d6e50cb7d | ||
|
|
d620783ab8 | ||
|
|
898828b49d | ||
|
|
11717a4f6a | ||
|
|
879dab3239 | ||
|
|
cf0bcb9cab | ||
|
|
32606a5a18 | ||
|
|
abaa6437fd | ||
|
|
f28b260f8d | ||
|
|
540c16b47f | ||
|
|
29d23630b4 | ||
|
|
d25c217e6a | ||
|
|
d30036415a | ||
|
|
bf7550e52e | ||
|
|
5d105ccde9 | ||
|
|
bbd9cf40e5 | ||
|
|
fe94d3036e | ||
|
|
3510b57523 | ||
|
|
71cce4f60c | ||
|
|
3535e16a20 | ||
|
|
92a015b46a | ||
|
|
435d5b56b3 | ||
|
|
3fd4ce827f | ||
|
|
9cb2d9f123 | ||
|
|
9a3b4807e4 | ||
|
|
3ce1994e97 | ||
|
|
03c8c1cbd8 | ||
|
|
3143bb87ba | ||
|
|
c2731bbfc2 | ||
|
|
2a3b3a65b4 | ||
|
|
89e4e1420e | ||
|
|
41af9f42d2 | ||
|
|
5de41466dd | ||
|
|
5c3a56bbef | ||
|
|
1b50ba7616 | ||
|
|
802a4ab8c2 | ||
|
|
ffd73e832c | ||
|
|
c82f6f4de5 | ||
|
|
a9ec016184 | ||
|
|
134fd180c1 | ||
|
|
5361536d30 | ||
|
|
ff733efaa7 | ||
|
|
363274e273 | ||
|
|
3c4012945f | ||
|
|
f338b1e925 | ||
|
|
05ab348be3 | ||
|
|
80cd442a73 | ||
|
|
34e3ef5bf4 | ||
|
|
a8009c0803 | ||
|
|
ebe9eba8da | ||
|
|
bb68a37188 | ||
|
|
b072c816a4 | ||
|
|
b385c14f79 | ||
|
|
c03f402b4c | ||
|
|
095dfbdd39 | ||
|
|
8e7ccfda66 | ||
|
|
04abd21718 | ||
|
|
90eb52f548 | ||
|
|
455578dc33 | ||
|
|
ba9c8e47c7 | ||
|
|
afbeaaf887 | ||
|
|
c65090e4a2 | ||
|
|
f417711da3 | ||
|
|
8bcb56e9ea |
3
.gitignore
vendored
3
.gitignore
vendored
@@ -6,10 +6,13 @@ datas/*.xcf
|
|||||||
datas/*.ttf
|
datas/*.ttf
|
||||||
datas/*.jpg
|
datas/*.jpg
|
||||||
datas/*.webp
|
datas/*.webp
|
||||||
|
!datas/README.md
|
||||||
|
!datas/ega-16colors.png
|
||||||
|
|
||||||
WS/*timing
|
WS/*timing
|
||||||
WS/log*
|
WS/log*
|
||||||
WS/*.done
|
WS/*.done
|
||||||
|
WS/*.log
|
||||||
|
|
||||||
*.png
|
*.png
|
||||||
*.gif
|
*.gif
|
||||||
|
|||||||
61
Makefile
61
Makefile
@@ -1,19 +1,44 @@
|
|||||||
|
|
||||||
DIMS = -W1600 -H1200
|
DIMS = -W1600 -H1200
|
||||||
# POVOPT = +q9 +a0.02 -d
|
|
||||||
POVOPT = +q9 +A -d
|
POVOPT = +q9 +A0.05 -WT2 Declare=NbFrames=450 -d
|
||||||
POVDEP = contexte.inc elements.inc hexabenz.inc \
|
|
||||||
|
POVDEP = contexte.inc hexacone.inc hexabenz.inc \
|
||||||
|
all.inc hexastar.inc \
|
||||||
|
architecture.inc \
|
||||||
globals.inc hexawood.inc datas/hf.png \
|
globals.inc hexawood.inc datas/hf.png \
|
||||||
dynamic.inc trident.inc
|
dynamic.inc trident.inc groundbase.inc \
|
||||||
|
gadgets.inc xperiment.inc
|
||||||
|
|
||||||
CK=230
|
# ! Define a default value for the POV clock
|
||||||
|
# ! You can overide with this command line :
|
||||||
|
# $ make CK=449 essai.png
|
||||||
|
|
||||||
|
CK=225
|
||||||
|
|
||||||
PNG: essai.png scene.png topview.png passage.png \
|
PNG: essai.png scene.png topview.png passage.png \
|
||||||
orbite.png hexabenz.png escadrille.png \
|
orbite.png hexabenz.png escadrille.png \
|
||||||
hexacone.png remote.png survol.png cutoff.png
|
hexacone.png remote.png survol.png cutoff.png \
|
||||||
|
carto.png hexawood.png bubblecut.png \
|
||||||
|
circular.png panoramic.png splined.png \
|
||||||
|
trident.png approche.png hexastar.png \
|
||||||
|
patrouille.png
|
||||||
echo "make PNG ck=$(CK) done" >> WS/log
|
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$@
|
||||||
|
|
||||||
|
splined.png: splined.pov Makefile $(POVDEP)
|
||||||
|
povray $(POVOPT) $(DIMS) -K$(CK) -i$< -o$@
|
||||||
|
|
||||||
topview.png: topview.pov Makefile $(POVDEP)
|
topview.png: topview.pov Makefile $(POVDEP)
|
||||||
povray $(POVOPT) $(DIMS) -K$(CK) -i$< -o$@
|
povray $(POVOPT) $(DIMS) -K$(CK) -i$< -o$@
|
||||||
@@ -21,15 +46,26 @@ topview.png: topview.pov Makefile $(POVDEP)
|
|||||||
cutoff.png: cutoff.pov Makefile $(POVDEP)
|
cutoff.png: cutoff.pov Makefile $(POVDEP)
|
||||||
povray $(POVOPT) $(DIMS) -K$(CK) -i$< -o$@
|
povray $(POVOPT) $(DIMS) -K$(CK) -i$< -o$@
|
||||||
|
|
||||||
essai.png: essai.pov Makefile $(POVDEP)
|
bubblecut.png: bubblecut.pov Makefile $(POVDEP)
|
||||||
povray $(POVOPT) $(DIMS) -K$(CK) -i$< -o$@
|
povray $(POVOPT) $(DIMS) -K$(CK) -i$< -o$@
|
||||||
|
|
||||||
|
essai.png: essai.pov Makefile $(POVDEP) hexastar.inc
|
||||||
|
povray $(POVOPT) $(DIMS) -K$(CK) -i$< -o$@
|
||||||
|
noise.png: essai.png Makefile
|
||||||
|
convert -verbose -noise 45x3 $< $@
|
||||||
|
|
||||||
hexabenz.png: hexabenz.pov Makefile $(POVDEP)
|
hexabenz.png: hexabenz.pov Makefile $(POVDEP)
|
||||||
povray $(POVOPT) $(DIMS) +K$(CK) -i$< -o$@
|
povray $(POVOPT) $(DIMS) +K$(CK) -i$< -o$@
|
||||||
|
|
||||||
hexacone.png: hexacone.pov Makefile $(POVDEP)
|
hexacone.png: hexacone.pov Makefile $(POVDEP)
|
||||||
povray $(POVOPT) $(DIMS) +K$(CK) -i$< -o$@
|
povray $(POVOPT) $(DIMS) +K$(CK) -i$< -o$@
|
||||||
|
|
||||||
|
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)
|
passage.png: passage.pov Makefile $(POVDEP)
|
||||||
povray $(POVOPT) $(DIMS) -K$(CK) -i$< -o$@
|
povray $(POVOPT) $(DIMS) -K$(CK) -i$< -o$@
|
||||||
|
|
||||||
@@ -47,3 +83,14 @@ remote.png: remote.pov Makefile $(POVDEP)
|
|||||||
|
|
||||||
survol.png: survol.pov Makefile $(POVDEP)
|
survol.png: survol.pov Makefile $(POVDEP)
|
||||||
povray $(POVOPT) $(DIMS) +K$(CK) -i$< -o$@
|
povray $(POVOPT) $(DIMS) +K$(CK) -i$< -o$@
|
||||||
|
|
||||||
|
carto.png: carto.pov Makefile $(POVDEP)
|
||||||
|
povray $(POVOPT) $(DIMS) +K$(CK) -i$< -o$@
|
||||||
|
|
||||||
|
circular.png: circular.pov Makefile $(POVDEP)
|
||||||
|
povray $(POVOPT) $(DIMS) +K$(CK) -i$< -o$@
|
||||||
|
|
||||||
|
panoramic.png: panoramic.pov Makefile $(POVDEP)
|
||||||
|
povray $(POVOPT) $(DIMS) +K$(CK) -i$< -o$@
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
62
README.md
62
README.md
@@ -3,49 +3,75 @@
|
|||||||
Un projet POVray né pendant l'hiver 2024/2025, au fin fond du Gers :
|
Un projet POVray né pendant l'hiver 2024/2025, au fin fond du Gers :
|
||||||
un objet **hexaconal**
|
un objet **hexaconal**
|
||||||
prenant en compte les divergences d'opinion et les fluctuations
|
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,
|
Le concept initial, assez inprécis, sera amélioré au fil du temps,
|
||||||
et vous pouvez
|
et vous pouvez
|
||||||
suivre son évolution par l'intermédiaire de
|
suivre son évolution par l'intermédiaire de
|
||||||
[Mastodon](https://mastodon.tetaneutral.net/@tth)
|
[Mastodon](https://mastodon.tetaneutral.net/@tth)
|
||||||
avec le croisimot `#hexacone`.
|
avec le *croisimot* `#hexacone`.
|
||||||
Quelques images sont disponibles sur mon serveur
|
Quelques images sont disponibles sur mon serveur de
|
||||||
de [cuisine](http://maison.tth.netlib.re/p/hexacone.html).
|
[cuisine](http://maison.tth.netlib.re/pov/hexacone.html),
|
||||||
|
avec même des liens vers les vidz.
|
||||||
|
|
||||||
## Prérequis
|
## Prérequis
|
||||||
|
|
||||||
Avant toute chose, il faut avoir installé les logiciels
|
Avant toute chose, il faut avoir installé les logiciels
|
||||||
suivants : bash, awk, gnuplot, imagemagick, et, bien
|
suivants : bash, awk, gnuplot, imagemagick, ffmpeg, et bien
|
||||||
entendu, [povray](https://povray.org/).
|
entendu, [povray](https://povray.org/).
|
||||||
|
Une bonne maitrise des scripts shell (en Bash) sera un plus.
|
||||||
|
|
||||||
## Utilisation
|
## 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
|
les images fixes, qui sont traitées
|
||||||
par un classique [`Makefile`](./Makefile) et les séquences animées
|
par un classique [`Makefile`](./Makefile) et les séquences animées
|
||||||
produites par un [script shell](./mkloop.sh).
|
produites par un [script shell](./mkloop.sh).
|
||||||
|
|
||||||
Avant toute chose, vous devrez vérifier la présence de plusieurs
|
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 :
|
répertoires :
|
||||||
|
|
||||||
|
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 :
|
||||||
|
|
||||||
```
|
```
|
||||||
frames/
|
frames/
|
||||||
├── essai
|
├── essai
|
||||||
├── orbite
|
├── orbite
|
||||||
├── passage
|
├── passage
|
||||||
├── escadrille
|
├── escadrille
|
||||||
├── scene
|
├── scene
|
||||||
├── Spool
|
├── Spool
|
||||||
└── topview
|
└── 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
|
||||||
|
(avec ce [script](./tools/encode.sh)) chaque séquence individuelle
|
||||||
|
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 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 : *« Fork & Enjoy »*
|
||||||
|
|
||||||
## Contact
|
## Contact
|
||||||
|
|
||||||
* La [mailing-list du tetalab](https://lists.tetalab.org/postorius/lists/tetalab.tetalab.org/) ;
|
* La [mailing-list du tetalab](https://lists.tetalab.org/postorius/lists/tetalab.tetalab.org/) ;
|
||||||
* IRC canal `#tetalab` sur le
|
* Par IRC, canal `#tetalab` ou `#povray` sur le réseau de [Libera](https://libera.chat/).
|
||||||
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
30
TODO.md
Normal 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
31
all.inc
Normal 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
36
approche.pov
Normal 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
106
architecture.inc
Normal 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
31
around.pov
Normal 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
|
||||||
|
}
|
||||||
60
bubblecut.pov
Normal file
60
bubblecut.pov
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
/*
|
||||||
|
* H E X A C O N E - C U T O F F
|
||||||
|
* nouveau projet du Thu Dec 5 11:37:05 AM UTC 2024
|
||||||
|
*/
|
||||||
|
|
||||||
|
#version 3.7;
|
||||||
|
|
||||||
|
#include "globals.inc"
|
||||||
|
|
||||||
|
#declare NO_DYNAMIC = 1;
|
||||||
|
#include "all.inc"
|
||||||
|
|
||||||
|
// =======================================================
|
||||||
|
|
||||||
|
#declare POS_Cutoff = <-21, 0, -8>;
|
||||||
|
|
||||||
|
#local TY = 1.55;
|
||||||
|
|
||||||
|
#declare Position = <0.50, -0.70, 0.75>;
|
||||||
|
#declare Rayon = 0.70 + 1.52 * NormClock; // rayon de la sphere
|
||||||
|
// de découpe
|
||||||
|
#debug concat("Rayon decoupe = ", str(Rayon, 8, 3), "\n\n")
|
||||||
|
|
||||||
|
difference {
|
||||||
|
object { HexaBenz () }
|
||||||
|
sphere { Position, Rayon }
|
||||||
|
translate y*TY + POS_Cutoff
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
sphere { Position, 0.020 translate y*TY + POS_Cutoff
|
||||||
|
texture { T_WIP_alert } }
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* those are for for debugging */
|
||||||
|
// object { OpenBox (1, 0.05) translate y*TY + POS_Cutoff }
|
||||||
|
// object { Repere translate y*2.8 + POS_Cutoff }
|
||||||
|
|
||||||
|
// =======================================================
|
||||||
|
light_source {
|
||||||
|
<-24, 0.4, -1>
|
||||||
|
colour Orange
|
||||||
|
parallel
|
||||||
|
point_at y*TY + POS_Cutoff
|
||||||
|
}
|
||||||
|
|
||||||
|
object { Le_Decor }
|
||||||
|
|
||||||
|
// =======================================================
|
||||||
|
|
||||||
|
#local CamX = -27.4 + (2.29*Cos_01(NormClock));
|
||||||
|
#local CamY = 2.7 - (0.24*sqrt(NormClock));
|
||||||
|
#local CamZ = -0.85 + (2.02*NormClock);
|
||||||
|
|
||||||
|
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)
|
||||||
|
}
|
||||||
38
carto.pov
Normal file
38
carto.pov
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
/*
|
||||||
|
* H E X A C O N E
|
||||||
|
* nouveau projet Thu Dec 5 11:37:05 AM UTC 2024
|
||||||
|
*
|
||||||
|
* cartographie de l'hexamonde
|
||||||
|
*/
|
||||||
|
|
||||||
|
#version 3.7;
|
||||||
|
|
||||||
|
#include "globals.inc"
|
||||||
|
|
||||||
|
#declare NO_DYNAMIC = 0;
|
||||||
|
#include "all.inc"
|
||||||
|
|
||||||
|
// ---------------------------------------------------------
|
||||||
|
object { Repere scale 20 translate y*20 }
|
||||||
|
// ---------------------------------------------------------
|
||||||
|
// dessiner une grille
|
||||||
|
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 { Le_Decor }
|
||||||
|
|
||||||
|
camera {
|
||||||
|
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
|
||||||
|
}
|
||||||
|
|
||||||
37
circular.pov
Normal file
37
circular.pov
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
/*
|
||||||
|
* 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
|
||||||
|
*/
|
||||||
|
|
||||||
|
#version 3.7;
|
||||||
|
|
||||||
|
#include "globals.inc"
|
||||||
|
|
||||||
|
#declare NO_DYNAMIC = 0;
|
||||||
|
#include "all.inc"
|
||||||
|
|
||||||
|
// =======================================================
|
||||||
|
|
||||||
|
object { Le_Decor }
|
||||||
|
|
||||||
|
// =======================================================
|
||||||
|
|
||||||
|
#declare R_circ = R_circular + 0.07;
|
||||||
|
#declare CK = 2.9 + (1.51 * Cos_01(NormClock));
|
||||||
|
|
||||||
|
#declare CamX = R_circ * cos(CK);
|
||||||
|
#declare CamY = 3.08 + abs(sin(CK/4.00));
|
||||||
|
#declare CamZ = R_circ * sin(CK);
|
||||||
|
|
||||||
|
#declare AV = 0.070;
|
||||||
|
#declare LatX = R_circ * 0.96 * cos(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>
|
||||||
|
right <image_width/image_height, 0, 0>
|
||||||
|
angle 64
|
||||||
|
}
|
||||||
|
|
||||||
479
contexte.inc
479
contexte.inc
@@ -5,139 +5,95 @@
|
|||||||
/* voir aussi le fichier 'globals.inc' */
|
/* voir aussi le fichier 'globals.inc' */
|
||||||
|
|
||||||
/* ======================================================= */
|
/* ======================================================= */
|
||||||
/*
|
// #debug "+++++++++++++++++++++ debut contexte\n"
|
||||||
* nouveau debut fevrier 2025 - we love raytracing
|
|
||||||
*
|
|
||||||
* une cabane pour faire riche.
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* une seule forme de cabane pour le moment
|
|
||||||
*/
|
|
||||||
#declare Base_cabane_forme = object
|
|
||||||
{
|
|
||||||
difference {
|
|
||||||
#local Hc = 0.90;
|
|
||||||
box { <-0.90, 0, 0>, <0.90, Hc, 0.80> }
|
|
||||||
box { <-0.89, 0.01, -1> <0.89, Hc-0.01, 0.79> }
|
|
||||||
#local Hc = Hc * 0.75;
|
|
||||||
cylinder { <-1, Hc, -0.29>, <1, Hc, 0.29>, 0.09 }
|
|
||||||
#undef Hc
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* comparaison des deux textures par le rendu
|
|
||||||
* de la meme forme de cabane.
|
|
||||||
*/
|
|
||||||
#declare Cabane_Base_1 = object
|
|
||||||
{
|
|
||||||
object { Base_cabane_forme }
|
|
||||||
texture { T_Beton_1 }
|
|
||||||
}
|
|
||||||
|
|
||||||
#declare Cabane_Base_2 = object
|
|
||||||
{
|
|
||||||
object { Base_cabane_forme }
|
|
||||||
texture { T_Beton_2 }
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ======================================================= */
|
/* ======================================================= */
|
||||||
|
|
||||||
#declare GroudBase_coin = object
|
#macro Trois_Portiques (Dist)
|
||||||
{
|
|
||||||
merge {
|
|
||||||
cylinder { 0, y*0.4, 0.09 }
|
|
||||||
sphere { 0, 0.09 scale <1, 0.23, 1> translate y*0.4 }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#declare GroundBase_a = object
|
|
||||||
{
|
|
||||||
union {
|
union {
|
||||||
#local Dx = 1.5;
|
object { Portique_A () }
|
||||||
#local Dz = 1.0;
|
object { Portique_A () scale <1, 1.2, 1> translate z*11 }
|
||||||
box { <-Dx, 0, -Dz>, <Dx, H_base, Dz> }
|
object { Portique_A () rotate y*11 translate z*22 }
|
||||||
#local Ha = y*(H_base*2);
|
// XXX scale 1.85
|
||||||
cylinder { 0, Ha, 0.08 translate <Dx, 0, -Dz> }
|
|
||||||
#local Hb = Ha * 1.17;
|
|
||||||
cone { Ha, 0.08, Hb, 0.05 translate < Dx, 0, -Dz> }
|
|
||||||
cone { Ha, 0.08, Hb, 0.05 translate <-Dx, 0, -Dz> }
|
|
||||||
#undef Ha
|
|
||||||
#undef Hb
|
|
||||||
#undef Dx
|
|
||||||
#undef Dz
|
|
||||||
}
|
}
|
||||||
texture { T_Grnt7 rotate 49 scale 0.22 }
|
#end // macro trois portiques
|
||||||
}
|
|
||||||
|
|
||||||
#declare GroundBase_b = object
|
/* ======================================================= */
|
||||||
{
|
/*
|
||||||
#local Sz = SzBase - 0.02;
|
* essai du 12 mars 2025
|
||||||
union {
|
*/
|
||||||
box { <-SzBase, 0, -SzBase>, <SzBase, H_base, SzBase> }
|
|
||||||
object { GroudBase_coin translate <-Sz, 0, -Sz> }
|
#declare RedB_0_X = 19; #declare RedB_0_Z = 29;
|
||||||
object { GroudBase_coin translate < Sz, 0, -Sz> }
|
|
||||||
object { GroudBase_coin translate <-Sz, 0, Sz> }
|
#declare RedB_1_X = -24; #declare RedB_1_Z = 8;
|
||||||
object { GroudBase_coin translate < Sz, 0, Sz> }
|
|
||||||
|
// 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 {
|
||||||
|
#local R = 2.46;
|
||||||
|
cylinder { 0, y*0.40, R }
|
||||||
|
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_Grnt27 rotate 9 scale 0.32 }
|
texture { T }
|
||||||
#undef Sz
|
#end // macro
|
||||||
}
|
|
||||||
|
|
||||||
/* ------------------------------------------------------------ */
|
|
||||||
|
|
||||||
#declare La_GroundBase = object
|
|
||||||
{
|
|
||||||
union {
|
|
||||||
object { GroundBase_b }
|
|
||||||
/*
|
|
||||||
* ici, mettre la cabane
|
|
||||||
*/
|
|
||||||
#local Dz = <0, 0, -7>;
|
|
||||||
object { GroundBase_a translate Dz }
|
|
||||||
object { Cabane_Base_2 rotate y*180 translate Dz }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/* ======================================================= */
|
/* ======================================================= */
|
||||||
|
|
||||||
#macro GyroPhare_mat ()
|
#macro GyroPhare_mat ()
|
||||||
union {
|
union {
|
||||||
cylinder { 0, y*H_gyro, R_gyro }
|
cylinder { 0, y*H_gyro, R_gyro }
|
||||||
intersection {
|
intersection {
|
||||||
sphere { 0, R_gyro scale <1, 1.414, 1> }
|
sphere { 0, R_gyro scale <1, 1.717, 1> }
|
||||||
box { <-1, 0, -1>, <1, 1, 1> }
|
box { <-1, 0, -1>, <1, 1.94, 1> }
|
||||||
translate y*(H_gyro+H_gylampe+0.02)
|
translate y*(H_gyro+H_gylampe+0.04)
|
||||||
}
|
}
|
||||||
#if (rand(Rng1) < 0.5)
|
#local R = rand(Rng1);
|
||||||
texture { T_Stone25 scale 1+rand(Rng1) }
|
#if (R < 0.33) texture { T_Stone25 scale 1+rand(Rng1) }
|
||||||
#else
|
#elseif (R < 0.66) texture { T_Stone15 scale 1+rand(Rng1) }
|
||||||
texture { T_Stone6 }
|
#else texture { T_Stone6 scale 1+rand(Rng1) }
|
||||||
#end
|
#end
|
||||||
|
#undef R
|
||||||
}
|
}
|
||||||
#end // macro
|
#end // macro
|
||||||
|
|
||||||
#macro GyroPhare_lampe ()
|
#macro GyroPhare_lampe ()
|
||||||
union {
|
union {
|
||||||
difference {
|
difference {
|
||||||
cylinder { 0, y*H_gylampe, R_gyro }
|
cylinder { 0, y*H_gylampe, R_gyro * 1.12345678 }
|
||||||
cylinder { y*0.01, y*(H_gylampe-0.01), R_gyro*0.97 }
|
cylinder { y*0.01, y*(H_gylampe-0.01), R_gyro*0.97 }
|
||||||
#local WB = 0.015;
|
#local WB = 0.017;
|
||||||
box { <-1, 0.03, -WB>, <1, (H_gylampe-0.03), WB> }
|
union {
|
||||||
box { <-WB, 0.03, -1>, <WB, (H_gylampe-0.03), 1> }
|
box { <-1, 0.03, -WB>, <1, (H_gylampe-0.03), WB> }
|
||||||
|
box { <-WB, 0.03, -1>, <WB, (H_gylampe-0.03), 1> }
|
||||||
|
}
|
||||||
#undef WB
|
#undef WB
|
||||||
pigment { color Gray90 }
|
pigment { color Gray90 }
|
||||||
#local Ro = 5.89*(0.5-rand(Rng1));
|
#local Ro = 0.5 + (1.0 * rand(Rng1));
|
||||||
#if (abs(Ro) < 0.06)
|
#if (rand(Rng1) < 0.50)
|
||||||
#local Ro = Ro * 10;
|
#local Ro = -Ro;
|
||||||
#end
|
#end
|
||||||
|
rotate y * Ro * clock
|
||||||
#undef Ro
|
#undef Ro
|
||||||
rotate y*(0.5-rand(Rng1)) * clock
|
|
||||||
}
|
}
|
||||||
light_source { y*0.10
|
light_source { y*0.10
|
||||||
rgb <0.8, 0.9, 0.999999999>
|
rgb <0.8, 0.9, 0.999999999>
|
||||||
fade_distance 3.96
|
fade_distance 3.90
|
||||||
fade_power 1.55
|
fade_power 1.55
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -147,32 +103,68 @@ union {
|
|||||||
union {
|
union {
|
||||||
object { GyroPhare_mat () }
|
object { GyroPhare_mat () }
|
||||||
object { GyroPhare_lampe ()
|
object { GyroPhare_lampe ()
|
||||||
// rotate y*rand(Rng1)*clock
|
|
||||||
translate y*(H_gyro+0.02) }
|
translate y*(H_gyro+0.02) }
|
||||||
}
|
}
|
||||||
#end // macro
|
#end // macro
|
||||||
|
|
||||||
#macro Les_GyroPhares ()
|
#macro Les_GyroPhares ()
|
||||||
union {
|
union {
|
||||||
#local E = SzSol * 0.488;
|
#local E = SzSol * 0.471;
|
||||||
object { GyroPhare () translate <-E, 0, -E> }
|
#for (Idx, 0, 359, 60)
|
||||||
object { GyroPhare () translate < E, 0, -E> }
|
#local Ang = radians(Idx+9.33);
|
||||||
object { GyroPhare () translate <-E, 0, E> }
|
#local Dx = E * sin(Ang);
|
||||||
object { GyroPhare () translate < E, 0, E> }
|
#local Dz = E * cos(Ang);
|
||||||
object { GyroPhare () translate <-E, 0, 0> }
|
object { GyroPhare () translate <Dx, H_sol, Dz> }
|
||||||
object { GyroPhare () translate < E, 0, 0> }
|
#end
|
||||||
object { GyroPhare () translate < 0, 0, -E> }
|
|
||||||
object { GyroPhare () translate < 0, 0, E> }
|
|
||||||
#undef E
|
#undef E
|
||||||
}
|
}
|
||||||
#end
|
#end
|
||||||
/* ======================================================= */
|
/* ======================================================= */
|
||||||
|
/* 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));
|
||||||
|
#if (rand(Rng1) < 0.50)
|
||||||
|
#local E = R_circular + De;
|
||||||
|
#else
|
||||||
|
#local E = R_circular - De;
|
||||||
|
#end
|
||||||
|
#local Ra = radians(Ang);
|
||||||
|
#local Xp = E * cos(Ra);
|
||||||
|
#local Zp = E * sin(Ra);
|
||||||
|
object { HexaPole () translate <Xp, 0, Zp> }
|
||||||
|
#end // for
|
||||||
|
|
||||||
#declare Rhxba = 0.30;
|
/* pourquoi ce truc est là ? */
|
||||||
#declare R2hxba = Rhxba * 0.48;
|
torus { R_circular, 0.28
|
||||||
|
scale <1, 0.3210, 1>
|
||||||
|
translate 0.33*y
|
||||||
|
// !!! pigment { color Cyan }
|
||||||
|
texture { T_Planete_A scale 3 }
|
||||||
|
}
|
||||||
|
|
||||||
|
#for (Ang, 0,359, 2)
|
||||||
|
#local Ra = radians(Ang);
|
||||||
|
#local Xp = R_circular * cos(Ra);
|
||||||
|
#local Zp = R_circular * sin(Ra);
|
||||||
|
cylinder { 0, 0.33*y, 0.10
|
||||||
|
translate <Xp, 0, Zp>
|
||||||
|
texture { T_Planete_A scale 3 }
|
||||||
|
}
|
||||||
|
#end
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* ======================================================= */
|
||||||
|
|
||||||
#declare HexaBalls = object
|
#declare HexaBalls = object
|
||||||
{
|
{
|
||||||
|
#declare Rhxba = 0.30;
|
||||||
|
#declare R2hxba = Rhxba * 0.48;
|
||||||
merge {
|
merge {
|
||||||
sphere { 0, Rhxba }
|
sphere { 0, Rhxba }
|
||||||
#local E = Rhxba * 1.260;
|
#local E = Rhxba * 1.260;
|
||||||
@@ -186,130 +178,81 @@ merge {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#declare Les_Bibelots = object
|
#declare Les_HexaBalls = object
|
||||||
{
|
{
|
||||||
union {
|
union {
|
||||||
object { HexaBalls
|
object { HexaBalls
|
||||||
texture { Lightning1 scale 0.33 }
|
texture { Lightning1 scale 0.44 }
|
||||||
rotate <clock/3, clock/6, clock/9>
|
rotate <clock/3, clock/4, clock/9>
|
||||||
translate <2, -1.1+1.01*Cos_010(NormClock), 4>
|
translate <2, 0.57+Cos_010(NormClock), 4>
|
||||||
}
|
}
|
||||||
|
|
||||||
object { HexaBalls
|
object { HexaBalls
|
||||||
texture { Lightning2 scale 0.56 }
|
texture { Lightning2 scale 0.56 }
|
||||||
rotate <-clock, clock*0.33333, clock>
|
rotate <-clock, clock*0.33333, clock*3>
|
||||||
translate <5, -1+0.92*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 }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ======================================================= */
|
|
||||||
|
|
||||||
#declare Le_Sol = object
|
|
||||||
{
|
|
||||||
height_field {
|
|
||||||
png "datas/hf.png"
|
|
||||||
smooth
|
|
||||||
translate <-.5, 0, -.5>
|
|
||||||
scale <SzSol, 1, SzSol>
|
|
||||||
texture {
|
|
||||||
pigment {
|
|
||||||
// color DarkGreen
|
|
||||||
image_map { png "datas/cmap.png" }
|
|
||||||
rotate x*90
|
|
||||||
translate <-.5, 0, -.5>
|
|
||||||
scale <SzSol, 1, SzSol>
|
|
||||||
}
|
|
||||||
// normal { bumps 0.035 scale 0.186 }
|
|
||||||
finish { phong 0.105 }
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ======================================================= */
|
/* ======================================================= */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* on déclare et rempli le tableau avec la place des trous
|
||||||
|
*/
|
||||||
|
#declare UnderHoles = array[6]
|
||||||
|
|
||||||
|
#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.09; // magic numbers ?
|
||||||
|
#local Kr = 5 - (rand(Rng1)*2.5);
|
||||||
|
#local Px = Kr + sin(Angle) * (SzSol * 0.98);
|
||||||
|
#local Kr = 5 - (rand(Rng1)*2.5);
|
||||||
|
#local Pz = Kr + cos(Angle) * (SzSol * 1.02);
|
||||||
|
#ifdef (DEBUG_LEVEL)
|
||||||
|
#write (Trid, "Def_", Idx, " ", NormClock, " ", Px, " ", Pz, "\n")
|
||||||
|
#end
|
||||||
|
// put the coords in the array.
|
||||||
|
#declare UnderHoles[Idx] = <Px, 0, Pz>;
|
||||||
|
#end // for loop
|
||||||
|
|
||||||
|
#ifdef (DEBUG_LEVEL)
|
||||||
|
#fclose Trid
|
||||||
|
#end
|
||||||
|
|
||||||
#declare Underground = object
|
#declare Underground = object
|
||||||
{
|
{
|
||||||
difference {
|
difference {
|
||||||
// plane { y, 0 }
|
// plane { y, 0 }
|
||||||
#local Big = 300;
|
#local Big = 300;
|
||||||
box { <-Big, -0.01, -Big>, < Big, 0.01, Big> }
|
box { <-Big, -0.21, -Big>, < Big, 0.0000, Big> }
|
||||||
#undef Big
|
#undef Big
|
||||||
#local W = SzSol * 1.204;
|
#for (Foo, 0, 5)
|
||||||
cylinder { <-W, -1, -W>, <-W, 1, -W>, 5 }
|
cylinder { -y*5, y*5, R_hole translate UnderHoles[Foo] }
|
||||||
cylinder { <-W, -1, W>, <-W, 1, W>, 7 }
|
#end
|
||||||
cylinder { < W, -1, W>, < W, 1, W>, 9 }
|
texture { Ground_Texture }
|
||||||
#undef W
|
|
||||||
}
|
}
|
||||||
texture {
|
|
||||||
pigment { color Gray20 }
|
|
||||||
normal { bumps 0.38 scale 3 }
|
|
||||||
finish { phong 0.125 }
|
|
||||||
}
|
|
||||||
rotate y*35
|
|
||||||
translate -y*2.55
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ======================================================= */
|
/* 10 fev 2026, on place des bordures autour des trous */
|
||||||
|
/* voir aussi -> xperiment.inc */
|
||||||
#declare Repere = object
|
#declare Les_Bordures = object
|
||||||
{
|
{
|
||||||
union {
|
union {
|
||||||
#local R = 0.008;
|
#for (foo, 0, 5)
|
||||||
cylinder { 0, <1, 0, 0>, R pigment { color Red } }
|
// #local YHB = (0.08 + (0.5*rand(Rng1)) * y);
|
||||||
cylinder { 0, <0, 1, 0>, R pigment { color Green } }
|
#if (rand(Rng1) < 0.5)
|
||||||
cylinder { 0, <0, 0, 1>, R pigment { color Blue } }
|
object { HoleBorder_A (1.04) translate UnderHoles[foo] }
|
||||||
|
#else
|
||||||
|
object { HoleBorder_B (1.06) translate UnderHoles[foo] }
|
||||||
|
#end // if
|
||||||
|
#end // for
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ======================================================= */
|
|
||||||
|
|
||||||
#declare OpenBox = object
|
|
||||||
{
|
|
||||||
union {
|
|
||||||
#local R = 0.010;
|
|
||||||
/* les verticales */
|
|
||||||
cylinder { <-1, -1, -1>, <-1, 1, -1>, R }
|
|
||||||
cylinder { < 1, -1, -1>, < 1, 1, -1>, R }
|
|
||||||
cylinder { <-1, -1, 1>, <-1, 1, 1>, R }
|
|
||||||
cylinder { < 1, -1, 1>, < 1, 1, 1>, R }
|
|
||||||
/* en bas */
|
|
||||||
cylinder { < 1, -1, 1>, <-1, -1, 1>, R }
|
|
||||||
cylinder { < 1, -1, -1>, <-1, -1, -1>, R }
|
|
||||||
cylinder { <-1, -1, 1>, <-1, -1, -1>, R }
|
|
||||||
cylinder { < 1, -1, 1>, < 1, -1, -1>, R }
|
|
||||||
|
|
||||||
/* en haut */
|
|
||||||
cylinder { < 1, 1, 1>, <-1, 1, 1>, R }
|
|
||||||
cylinder { < 1, 1, -1>, <-1, 1, -1>, R }
|
|
||||||
cylinder { <-1, 1, 1>, <-1, 1, -1>, R }
|
|
||||||
cylinder { < 1, 1, 1>, < 1, 1, -1>, R }
|
|
||||||
|
|
||||||
#undef R
|
|
||||||
texture { WIP_color }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ======================================================= */
|
/* ======================================================= */
|
||||||
/*
|
/*
|
||||||
* nouvel éclairage du 10 février 2025
|
* nouvel éclairage du 10 février 2025
|
||||||
@@ -320,7 +263,7 @@ light_source {
|
|||||||
0
|
0
|
||||||
color White
|
color White
|
||||||
fade_distance SzSol * 0.40
|
fade_distance SzSol * 0.40
|
||||||
fade_power 1.20
|
fade_power 1.25
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -328,7 +271,6 @@ light_source {
|
|||||||
{
|
{
|
||||||
#local T = E_QuadriLight;
|
#local T = E_QuadriLight;
|
||||||
#local H = H_QuadriLight;
|
#local H = H_QuadriLight;
|
||||||
// #local H = 5;
|
|
||||||
|
|
||||||
union {
|
union {
|
||||||
object { Quad_lampe translate <-T, H, -T> }
|
object { Quad_lampe translate <-T, H, -T> }
|
||||||
@@ -336,18 +278,38 @@ union {
|
|||||||
object { Quad_lampe translate <-T, H, T> }
|
object { Quad_lampe translate <-T, H, T> }
|
||||||
object { Quad_lampe translate < T, H, T> }
|
object { Quad_lampe translate < T, H, T> }
|
||||||
}
|
}
|
||||||
rotate -12 * y
|
rotate -19 * y
|
||||||
}
|
}
|
||||||
/* ======================================================= */
|
/* ======================================================= */
|
||||||
|
/* new Fri Oct 17 07:13:51 PM CEST 2025 */
|
||||||
|
#declare Les_Choses = object
|
||||||
|
{
|
||||||
|
union {
|
||||||
|
/* a l'interieur du 'circular' */
|
||||||
|
object { Chose () translate <-25, 0, -31> }
|
||||||
|
object { Chose () translate < 20, 0, -36> }
|
||||||
|
/* a l'exterieur du 'circular' */
|
||||||
|
#for (foo, 0, 359, 18)
|
||||||
|
#local CK = radians(foo + (9*rand(Rng1)));
|
||||||
|
#local DX = 76 * sin(CK);
|
||||||
|
#local DZ = 74 * cos(CK);
|
||||||
|
object { Chose () translate < DX, 0, DZ> } // XXX
|
||||||
|
#end
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ======================================================= */
|
||||||
|
/*
|
||||||
|
* cette partie demande des explications
|
||||||
|
*/
|
||||||
#declare Les_Lumieres = object
|
#declare Les_Lumieres = object
|
||||||
{
|
{
|
||||||
union {
|
union {
|
||||||
#if (1)
|
#if (1)
|
||||||
light_source {
|
light_source {
|
||||||
<2.3, 5.50, 2.8> color Gray70
|
<2.3, 5.50, 2.86> color Gray70
|
||||||
spotlight
|
spotlight
|
||||||
radius 14 falloff 10 tightness 10
|
radius 19 falloff 10 tightness 8
|
||||||
point_at <0, 0.95, 0.22222222>
|
point_at <0, 0.95, 0.22222222>
|
||||||
}
|
}
|
||||||
#end
|
#end
|
||||||
@@ -366,63 +328,82 @@ union {
|
|||||||
point_at <0, 0.95, -0.22>
|
point_at <0, 0.95, -0.22>
|
||||||
}
|
}
|
||||||
#end
|
#end
|
||||||
|
|
||||||
light_source {
|
|
||||||
<-4, 54, -7>
|
|
||||||
colour Gray50
|
|
||||||
parallel
|
|
||||||
point_at 0
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ======================================================= */
|
/* ======================================================= */
|
||||||
|
/*
|
||||||
// #declare Le_Ciel = object
|
* why a skysphere can't be an object ?
|
||||||
// {
|
*/
|
||||||
sky_sphere {
|
sky_sphere {
|
||||||
pigment {
|
pigment {
|
||||||
gradient y
|
gradient y
|
||||||
color_map {
|
color_map {
|
||||||
[ 0.2 color Gray10 ]
|
[ 0.2 color Gray20 ]
|
||||||
[ 0.4 color rgb <.4, .3, .8> ]
|
[ 0.4 color rgb <.5, .45, .43> ]
|
||||||
[ 0.7 color Gray20 ]
|
[ 0.7 color Gray50 ]
|
||||||
[ 0.8 color rgb <.95, .7, .6> ]
|
[ 0.9 color rgb <.5, .5, .47> ]
|
||||||
[ 1.0 color Gray10 ]
|
[ 1.0 color Gray20 ]
|
||||||
}
|
}
|
||||||
turbulence 3.14159 + 0.74 * Cos_010(NormClock)
|
turbulence 3.14159 + 0.84 * Cos_010(NormClock)
|
||||||
scale 1.620
|
scale 1.600
|
||||||
// translate -1
|
// translate -1
|
||||||
}
|
}
|
||||||
#local Kem = 0.09;
|
#local Kem = 0.09;
|
||||||
emission rgb <Kem, Kem, Kem>
|
emission rgb <Kem, Kem, Kem>
|
||||||
}
|
}
|
||||||
// }
|
|
||||||
|
|
||||||
/* ======================================================= */
|
/* ======================================================= */
|
||||||
|
|
||||||
/* XXX XXX */
|
|
||||||
light_source {
|
|
||||||
<-4, 54, -17>
|
|
||||||
colour Gray40
|
|
||||||
parallel
|
|
||||||
point_at 0
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Et on rassemble tous les éléments...
|
* Et on rassemble tous les éléments...
|
||||||
*/
|
*/
|
||||||
#declare Le_Decor = object
|
#declare Le_Decor = object
|
||||||
{
|
{
|
||||||
union {
|
union {
|
||||||
object { Le_Sol }
|
|
||||||
object { Underground }
|
object { Underground }
|
||||||
|
object { Les_Bordures }
|
||||||
|
|
||||||
|
#include "groundbase.inc"
|
||||||
object { La_GroundBase }
|
object { La_GroundBase }
|
||||||
// object { Les_Bibelots }
|
|
||||||
|
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 { Les_Lumieres }
|
||||||
object { QuadriLight }
|
object { QuadriLight }
|
||||||
object { Les_GyroPhares () }
|
object { Les_GyroPhares () }
|
||||||
|
object { Les_HexaPoles }
|
||||||
|
object { HorlogeDouble rotate y*(104*NormClock)
|
||||||
|
translate < 8, 0, -30> }
|
||||||
|
object { Les_Choses }
|
||||||
|
object { Les_Arches (1.9) rotate y*132 translate <-34, 0, -26> }
|
||||||
|
|
||||||
|
// 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> }
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* ------------------------------------------------------------ */
|
/* ------------------------------------------------------------ */
|
||||||
|
|||||||
36
cutoff.pov
36
cutoff.pov
@@ -7,37 +7,45 @@
|
|||||||
|
|
||||||
#include "globals.inc"
|
#include "globals.inc"
|
||||||
|
|
||||||
#include "contexte.inc"
|
#declare NO_DYNAMIC = 0;
|
||||||
#include "elements.inc"
|
#include "all.inc"
|
||||||
#include "hexabenz.inc"
|
|
||||||
|
|
||||||
// =======================================================
|
// =======================================================
|
||||||
|
|
||||||
// #debug concat("------ cutoff clock = ", str(clock,5,0),"\n")
|
#declare POS_Cutoff = <30.33, 0, -11>;
|
||||||
|
|
||||||
|
#local TY = 1.5;
|
||||||
|
|
||||||
#declare Kbox = (2.03*NormClock);
|
#declare Kbox = (2.03*NormClock);
|
||||||
difference {
|
difference {
|
||||||
object { HexaCone () }
|
object { HexaCone () rotate <9-(11*NormClock), 6, -7> }
|
||||||
box { -1, 1 translate z*Kbox }
|
box { -1, 1 translate z*Kbox }
|
||||||
translate y*1.5
|
translate y*TY + POS_Cutoff
|
||||||
}
|
}
|
||||||
|
|
||||||
/* this one is for debugging */
|
/* this two objects are for debugging */
|
||||||
// object { OpenBox translate <0, 1.5, Kbox> }
|
// object { Repere scale 2 translate y*2.1 + POS_Cutoff }
|
||||||
|
// object { OpenBox (1, 0.02) translate y*TY + POS_Cutoff }
|
||||||
|
|
||||||
// =======================================================
|
// =======================================================
|
||||||
|
light_source {
|
||||||
|
<-14, 0.4, -1>
|
||||||
|
colour Orange
|
||||||
|
parallel
|
||||||
|
point_at y*TY + POS_Cutoff
|
||||||
|
}
|
||||||
|
|
||||||
object { Le_Decor }
|
object { Le_Decor }
|
||||||
// object { Repere }
|
|
||||||
|
|
||||||
// =======================================================
|
// =======================================================
|
||||||
|
|
||||||
#local CamX = -2.7 + (1.4*Cos_01(NormClock));
|
#local CamX = POS_Cutoff.x + 3.5 + (3.14*Cos_01(NormClock));
|
||||||
#local CamY = 2.58 + (0.034*sqrt(NormClock));
|
#local CamY = 2.01 + (1.14*sqrt(NormClock));
|
||||||
#local CamZ = 5.35;
|
#local CamZ = POS_Cutoff.z + 4.30 - (1.02*NormClock);
|
||||||
|
|
||||||
camera {
|
camera {
|
||||||
location <CamX, CamY, CamZ>
|
location <CamX, CamY, CamZ>
|
||||||
look_at <0, 1.6, 0>
|
look_at <0, 1.5, 0> + POS_Cutoff
|
||||||
angle 39 - 5*Cos_01(NormClock)
|
right <image_width/image_height, 0, 0>
|
||||||
|
angle 40 - 12*Cos_01(NormClock)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,14 @@
|
|||||||
# statics datas
|
# statics datas
|
||||||
|
|
||||||
Things like `height_fields` or `image_map` files...
|
This directory is the home of things like :
|
||||||
|
|
||||||
|
- `height_fields`, or « Champs d'altitude »
|
||||||
|
- `image_map`, or « Papier peint »
|
||||||
|
|
||||||
|
But you have to provide your homebrewed one, who must be of high
|
||||||
|
quality, larger than 512x512 pixels. On the other side, you are
|
||||||
|
free to experiment with ugly files *:)*
|
||||||
|
|
||||||
|
You can also see the colors for the EGA conversion :
|
||||||
|
, used by this
|
||||||
|
[script](tools/build-ega-mp4.sh).
|
||||||
BIN
datas/ega-16colors.png
Normal file
BIN
datas/ega-16colors.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 220 B |
176
dynamic.inc
176
dynamic.inc
@@ -1,30 +1,178 @@
|
|||||||
|
/*
|
||||||
|
*/
|
||||||
|
|
||||||
object { Les_Bibelots rotate y*clock translate <28, -1, -32> }
|
// =======================================================
|
||||||
|
// 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>;
|
||||||
|
|
||||||
#declare HC_A = <0.03, 1.18, 0.17>;
|
object { Patrouille }
|
||||||
#declare HC_B = <2.0, 5.0, 9.0>;
|
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.0200)) * 4.05; // radians
|
||||||
|
#declare Xpos = R_circular * sin(CK);
|
||||||
|
#declare Zpos = R_circular * cos(CK);
|
||||||
|
#declare AR = degrees(CK);
|
||||||
|
object {
|
||||||
|
Wagonnet_0 (2.4)
|
||||||
|
rotate y*AR
|
||||||
|
translate <Xpos, 0.75, Zpos>
|
||||||
|
}
|
||||||
|
#end // for
|
||||||
|
|
||||||
|
/// =======================================================
|
||||||
|
/* des trucs autour des trous du sol. */
|
||||||
|
// 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] }
|
||||||
|
|
||||||
|
/// =======================================================
|
||||||
|
/*
|
||||||
|
* deux hexabenz sur une base exterieure
|
||||||
|
*/
|
||||||
|
#declare BiBenz = object
|
||||||
|
{
|
||||||
|
#local K = 1.39;
|
||||||
|
union {
|
||||||
|
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.28) translate Pos_RedB_0 }
|
||||||
|
|
||||||
|
/*
|
||||||
|
* deux hexacones se tournent autour
|
||||||
|
*/
|
||||||
|
#declare BiCone = object
|
||||||
|
{
|
||||||
|
#local K = 1.27;
|
||||||
|
union {
|
||||||
|
object { HexaCone () rotate y*90 translate <-K, 1.7, 0> }
|
||||||
|
object { HexaCone () rotate <9, 1, 7> translate < K, 1.9, 0> }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
object { BiCone rotate -y*(Cos_010(NormClock)*65.38) translate Pos_RedB_1 }
|
||||||
|
|
||||||
|
/* 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, 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.
|
||||||
|
* * les coordonnées de ces trous sont définies
|
||||||
|
* dans le fichier 'contexte.inc'.
|
||||||
|
*/
|
||||||
|
#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
|
||||||
|
|
||||||
|
/*
|
||||||
|
* ----------------------------
|
||||||
|
* echange hexacone et hexabenz
|
||||||
|
*/
|
||||||
|
#declare HC_A = <0.03, 2.18, 0.17>;
|
||||||
|
#declare HC_B = <3.00, 11.07, 11.09>;
|
||||||
#declare HC_P = Interpolate(HC_A, HC_B, Cos_01(NormClock));
|
#declare HC_P = Interpolate(HC_A, HC_B, Cos_01(NormClock));
|
||||||
#declare RX = -9+(NormClock*11);
|
#declare RX = -9+(NormClock*11);
|
||||||
#declare RY = 122 * (exp(NormClock) - 1.0);
|
#declare RY = 122 * (exp(NormClock) - 1.0);
|
||||||
|
#declare RZ = 33 * cos(NormClock*7.65);
|
||||||
object { HexaCone ()
|
object { HexaCone ()
|
||||||
rotate <RX, RY, -4>
|
rotate <RX, RY, RZ>
|
||||||
translate HC_P
|
translate HC_P
|
||||||
}
|
}
|
||||||
|
#declare HB_A = <-5.00, 10.0, 6.33>;
|
||||||
#declare HB_A = <-4.0, 7.0, 5.0>;
|
#declare HB_B = < 0.03, 2.32, -0.37>;
|
||||||
#declare HB_B = <0.03, 1.22, 0.17>;
|
|
||||||
#declare HB_P = Interpolate(HB_A, HB_B, Cos_01(NormClock));
|
#declare HB_P = Interpolate(HB_A, HB_B, Cos_01(NormClock));
|
||||||
#declare RY = -75 * (exp(NormClock*2) - 1.0);
|
#declare RX = Cos_01(NormClock);
|
||||||
#declare RZ = -7+(7*NormClock);
|
#declare RY = -75 * (exp(NormClock*1.8) - 1.0);
|
||||||
|
#declare RZ = abs(33 * sin(NormClock*7.65));
|
||||||
object { HexaBenz ()
|
object { HexaBenz ()
|
||||||
rotate <6, RY, RZ> translate HB_P }
|
rotate <RX, RY, RZ> translate HB_P }
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* nouveau 11 fevrier 2025
|
* passage d'un hexawood près de la base
|
||||||
*/
|
*/
|
||||||
#declare A = <-21, -1.9, (SzSol/2)+8>;
|
#declare A = <-25, 0.4, (SzSol/2)+5>;
|
||||||
#declare B = < 24, -2.4, (SzSol/2)+5>;
|
#declare B = < 29, 0.5, (SzSol/2)+2>;
|
||||||
#declare P = Interpolate(A, B, NormClock);
|
#declare P = Interpolate(A, B, NormClock);
|
||||||
object { HexaWood translate P }
|
#local K = NormClock*31;
|
||||||
|
#local R = 16.64 * cos(K);
|
||||||
|
#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 }
|
||||||
|
|
||||||
|
/*
|
||||||
|
* survol par un trident
|
||||||
|
*/
|
||||||
|
#declare A = < 2, 47, -20>;
|
||||||
|
#declare B = <-3, 35, 22>;
|
||||||
|
#declare P = Interpolate(A, B, NormClock);
|
||||||
|
object { Trident_A () rotate y*(clock*2.7)
|
||||||
|
rotate z*80
|
||||||
|
rotate <2, 94, 0>
|
||||||
|
translate P }
|
||||||
|
|
||||||
|
/* ----------------------------------- */
|
||||||
|
#debug "dynamic is loaded\n"
|
||||||
|
/* ----------------------------------- */
|
||||||
|
|
||||||
|
|||||||
@@ -8,45 +8,60 @@
|
|||||||
|
|
||||||
#include "globals.inc"
|
#include "globals.inc"
|
||||||
|
|
||||||
#include "contexte.inc"
|
#declare NO_DYNAMIC = 0;
|
||||||
#include "elements.inc"
|
#include "all.inc"
|
||||||
#include "hexabenz.inc"
|
|
||||||
|
|
||||||
// =======================================================
|
// =======================================================
|
||||||
|
|
||||||
#for (idX, 0, 5)
|
#local Y_mean = 0;
|
||||||
#for (idZ, 0, 5)
|
#local Y_count = 0;
|
||||||
|
|
||||||
#local posX = (idX * 4.72) - 11.6 + (rand(Rng1)-0.5);
|
#for (idX, -3, 3)
|
||||||
#local posY = 3.1 + (1.2*(rand(Rng1)-0.5));
|
#for (idZ, -3, 3)
|
||||||
#local posZ = (idZ * 4.37) - 7.9;
|
|
||||||
#local Rx = (rand(Rng1) - 0.5) * 8;
|
#local posX = (idX * 4.76) + (rand(Rng1)-0.5);
|
||||||
#local Ry = (rand(Rng1) - 0.5) * 14;
|
#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;
|
#local Rz = (rand(Rng1) - 0.5) * 11;
|
||||||
#if (rand(Rng1) < 0.515)
|
|
||||||
object { HexaCone ()
|
// #debug concat("X ", str(posX,7,3), " Z ", str(posZ,7,3), "\n")
|
||||||
rotate <Rx, Ry, Rz>
|
// #debug concat("position Z ", str(posZ,7,3),"\n")
|
||||||
|
|
||||||
|
#declare Limit = 1.470;
|
||||||
|
#if ( (abs(posX)>Limit) & (abs(posZ)>Limit) ) // position
|
||||||
|
#local Y_mean = Y_mean + posY;
|
||||||
|
#local Y_count = Y_count + 1;
|
||||||
|
#local R = rand(Rng1);
|
||||||
|
#if (R < 0.30)
|
||||||
|
object { HexaCone () rotate <Rx, Ry, Rz>
|
||||||
translate <posX, posY, posZ> }
|
translate <posX, posY, posZ> }
|
||||||
#else
|
#elseif (R < 0.60)
|
||||||
object { HexaBenz ()
|
object { HexaStar rotate y*90 rotate <Rx, Ry, Rz>
|
||||||
rotate <Rx, Ry, Rz>
|
|
||||||
translate <posX, posY, posZ> }
|
translate <posX, posY, posZ> }
|
||||||
#end
|
#else
|
||||||
#end
|
object { HexaBenz () rotate <Rx, Ry, Rz>
|
||||||
#end
|
translate <posX, posY, posZ> }
|
||||||
|
#end
|
||||||
|
#end // if position...
|
||||||
|
#end // loop idX
|
||||||
|
#end // loop idZ
|
||||||
|
|
||||||
// =======================================================
|
// =======================================================
|
||||||
|
|
||||||
object { Le_Decor }
|
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.6*Cos_01(NormClock));
|
#local LatY = (Y_mean / Y_count) - (0.5*NormClock);
|
||||||
#local CamY = 2.95 + (18.64*Cos_01(NormClock));
|
// #debug concat("escadrille: Lat Y ", str(LatY, 7, 3),"\n")
|
||||||
#local CamZ = 16.86 + (12.9*Cos_01(NormClock));
|
|
||||||
|
|
||||||
camera {
|
camera {
|
||||||
location <CamX, CamY, CamZ>
|
location <CamX, CamY, CamZ>
|
||||||
look_at <0.0, -NormClock, 0>
|
look_at <0.0, LatY, 0>
|
||||||
angle 60 - (3.97 * NormClock)
|
right <image_width/image_height, 0, 0>
|
||||||
|
angle 54 - (31 * NormClock)
|
||||||
}
|
}
|
||||||
|
|||||||
415
essai.pov
415
essai.pov
@@ -5,51 +5,398 @@
|
|||||||
|
|
||||||
#version 3.7;
|
#version 3.7;
|
||||||
|
|
||||||
|
// #declare DEBUG_LEVEL = 1; // un nouveau test ?
|
||||||
|
|
||||||
#include "globals.inc"
|
#include "globals.inc"
|
||||||
|
#declare NO_DYNAMIC = 1;
|
||||||
#include "contexte.inc"
|
#include "all.inc"
|
||||||
#include "gadgets.inc"
|
|
||||||
#include "elements.inc"
|
|
||||||
#include "hexabenz.inc"
|
|
||||||
#include "hexawood.inc"
|
|
||||||
|
|
||||||
// =======================================================
|
|
||||||
|
|
||||||
#include "dynamic.inc"
|
|
||||||
|
|
||||||
// =======================================================
|
|
||||||
|
|
||||||
// object { OpenBox translate y*1.30 }
|
|
||||||
#if (0)
|
|
||||||
#local RX = -11 + (10*sin(NormClock*9.81) + 3*sin(NormClock*23));
|
|
||||||
#local RZ = 26 - (14*Cos_010(NormClock));
|
|
||||||
object { HexaWood rotate <RX, 37, RZ> translate <9, 2.777, -11> }
|
|
||||||
#end
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
#declare A = <-21, -0.9, SzSol+9>;
|
* il faut faire le tri ici !
|
||||||
#declare B = < 33, -0.7, SzSol+7>;
|
-* __________________________
|
||||||
#declare P = Interpolate(A, B, NormClock);
|
*/
|
||||||
object { HexaWood translate P }
|
// =======================================================
|
||||||
*/
|
// 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
|
||||||
|
|
||||||
object { Repere scale 10 translate y*6 }
|
// =======================================================
|
||||||
object { Le_Decor }
|
/*
|
||||||
|
* 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.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.001
|
||||||
|
#if (rand(Rng1) < 0.50) texture { Y_Texture }
|
||||||
|
#else texture { M_Texture }
|
||||||
|
#end // if rand
|
||||||
|
}
|
||||||
|
cylinder { 0, -0.08*y, Rco
|
||||||
|
#if (rand(Rng1) < 0.50) texture { R_Texture }
|
||||||
|
#else texture { G_Texture }
|
||||||
|
#end // if rand
|
||||||
|
}
|
||||||
|
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
|
||||||
|
* rail circulaire
|
||||||
|
*/
|
||||||
|
|
||||||
|
#declare Les_Wagonnets = object
|
||||||
|
{
|
||||||
|
#local L = 2.4;
|
||||||
|
|
||||||
|
union {
|
||||||
|
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 25 octobre 2025
|
||||||
|
*/
|
||||||
|
#declare Obj_BasicTexture = object
|
||||||
|
{
|
||||||
|
#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 }
|
||||||
|
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 }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// -------------------------------------------------------
|
||||||
|
|
||||||
|
// -------------------------------------------------------
|
||||||
|
// the place to try new textures
|
||||||
|
#declare ProtoTextures = object
|
||||||
|
{
|
||||||
|
#local TX = 2.55;
|
||||||
|
#local TZ = 2.95;
|
||||||
|
#local Kro = 32 + (NormClock * 37);
|
||||||
|
union {
|
||||||
|
object { Obj_BasicTexture texture { R_Texture }
|
||||||
|
rotate y * (rand(Rng1)*Kro)
|
||||||
|
translate <TX, 0, -TZ> }
|
||||||
|
object { Obj_BasicTexture texture { G_Texture }
|
||||||
|
rotate y * (rand(Rng1)*Kro)
|
||||||
|
translate <TX, 0, 0> }
|
||||||
|
object { Obj_BasicTexture texture { B_Texture }
|
||||||
|
rotate y * (rand(Rng1)*Kro)
|
||||||
|
translate <TX, 0, TZ> }
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
// ------------------------------------
|
||||||
|
|
||||||
// =======================================================
|
// =======================================================
|
||||||
|
|
||||||
#local CamX = -2.7 + (2.8*Cos_010(NormClock));
|
#declare Des_Choses = object
|
||||||
#local CamY = 0.81 + (3*exp(NormClock));
|
{
|
||||||
#local CamZ = 7.777 - (0.8*Cos_010(NormClock));
|
union {
|
||||||
|
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 }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// =======================================================
|
||||||
|
|
||||||
#local K = 8;
|
#declare GyroTrucs = object
|
||||||
|
{
|
||||||
|
union {
|
||||||
|
#for (I, 0, 359, 30)
|
||||||
|
#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 { 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 {
|
||||||
|
<-32, 40, -7>
|
||||||
|
colour <Rv, Gv, Bv>
|
||||||
|
parallel
|
||||||
|
point_at 0
|
||||||
|
}
|
||||||
|
|
||||||
|
// ------------------------------------------------------ ##
|
||||||
|
|
||||||
|
#declare Selector = int(clock/57);
|
||||||
|
#debug concat("Selector = ", str(Selector, 6, 0), "\n")
|
||||||
|
|
||||||
|
#declare AngleCam = 27 - 3*Cos_01(NormClock);
|
||||||
|
|
||||||
|
#switch (Selector)
|
||||||
|
#case (0)
|
||||||
|
object { Des_Choses }
|
||||||
|
#local AngleCam = 17;
|
||||||
|
#break
|
||||||
|
#case (1)
|
||||||
|
object { Architecture rotate -y*(clock*0.666) }
|
||||||
|
#local AngleCam = 31.0;
|
||||||
|
#break
|
||||||
|
#case (2)
|
||||||
|
object { HoleBorder_B (2.222) }
|
||||||
|
#break
|
||||||
|
#case (3)
|
||||||
|
object { HorlogeDouble scale 2 rotate -y*(6*clock) }
|
||||||
|
object { Repere translate y*1 }
|
||||||
|
#break
|
||||||
|
#case (4)
|
||||||
|
object { Blob_Boxed
|
||||||
|
scale 4.000
|
||||||
|
rotate <7, 0, 12> translate 3.7*y
|
||||||
|
}
|
||||||
|
#break
|
||||||
|
#case (5)
|
||||||
|
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 { HexaStar scale 3 rotate y*(clock*1.5) translate y*3.5 }
|
||||||
|
#break
|
||||||
|
#case (7)
|
||||||
|
#local Pos = <0.5-NormClock, 0, 0>;
|
||||||
|
object { ProtoTextures rotate -y*(55*Cos_01(NormClock)) }
|
||||||
|
#break
|
||||||
|
|
||||||
|
#end // switch selector
|
||||||
|
|
||||||
|
plane {
|
||||||
|
y, 0
|
||||||
|
texture { Ground_Texture }
|
||||||
|
}
|
||||||
|
|
||||||
|
// =======================================================
|
||||||
|
|
||||||
|
#local CamX = -2.7 + (1.8*Cos_010(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 CamX = CamX * K;
|
||||||
#local CamY = CamY * K * 2;
|
#local CamY = CamY * K * 0.41;
|
||||||
#local CamZ = CamZ * K;
|
#local CamZ = CamZ * K;
|
||||||
|
|
||||||
camera {
|
camera {
|
||||||
|
orthographic
|
||||||
location <CamX, CamY, CamZ>
|
location <CamX, CamY, CamZ>
|
||||||
look_at <0, 0.98, 0>
|
look_at <0, 1.5, 0>
|
||||||
angle 32 - 5*Cos_01(NormClock)
|
|
||||||
|
right <image_width/image_height, 0, 0>
|
||||||
|
angle AngleCam
|
||||||
}
|
}
|
||||||
|
|||||||
313
gadgets.inc
313
gadgets.inc
@@ -3,26 +3,288 @@
|
|||||||
* nouveau projet du Thu Dec 5 11:37:05 AM UTC 2024
|
* nouveau projet du Thu Dec 5 11:37:05 AM UTC 2024
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#version 3.7;
|
/* ======================================================= */
|
||||||
|
/* moved here from 'contexte.inc' */
|
||||||
#include "globals.inc"
|
#declare Repere = object
|
||||||
|
|
||||||
// =======================================================
|
|
||||||
#declare QuadriPole = object
|
|
||||||
{
|
{
|
||||||
#local R = 0.02;
|
union {
|
||||||
#local E = 0.25;
|
#local R = 0.015;
|
||||||
#local H = H_cone*2;
|
#local R2 = R * 2.33;
|
||||||
union {
|
#local LC = 1.15;
|
||||||
cylinder { 0, y*H, R translate -x*E }
|
merge {
|
||||||
cylinder { 0, y*H, R translate x*E }
|
cylinder { 0, <1, 0, 0>, R }
|
||||||
cylinder { 0, y*H, R translate -z*E }
|
cone { <1, 0, 0>, R2, <LC, 0, 0>, 0 }
|
||||||
cylinder { 0, y*H, R translate z*E }
|
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 }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
texture { WIP_color }
|
}
|
||||||
|
#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 ()
|
||||||
|
merge {
|
||||||
|
#local RCP = R_C * 0.666;
|
||||||
|
cylinder { 0, y/2, 0.07 }
|
||||||
|
sphere { 0, RCP scale <1, 0.17, 1> translate y*0.125 }
|
||||||
|
cylinder { 0, y*0.125, RCP }
|
||||||
|
#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
|
||||||
|
}
|
||||||
|
// #debug "== Fin chose le pied\n"
|
||||||
|
#end // macro
|
||||||
|
// ------------------------------------------------------ ##
|
||||||
|
/*
|
||||||
|
* Il doit être possible de dissocier le noyau des tiges
|
||||||
|
* 29 novembre 2025, je tente l'expérience
|
||||||
|
*/
|
||||||
|
#macro Chose_les_tiges ()
|
||||||
|
union {
|
||||||
|
#local CK = NormClock * (7.876+rand(Rng1));
|
||||||
|
#for (Foo, 0, 7)
|
||||||
|
#local CK2 = CK + Foo;
|
||||||
|
#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.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);
|
||||||
|
#if (R < 0.25) texture { tPlasticOrange }
|
||||||
|
#elseif (R < 0.50) texture { tPlasticBlue }
|
||||||
|
#elseif (R < 0.75) texture { tPlasticPrune }
|
||||||
|
#else texture { tPlasticGreen }
|
||||||
|
#end // if
|
||||||
|
translate y*0.87
|
||||||
|
}
|
||||||
|
// #debug "== Fin chose les tiges\n"
|
||||||
|
#end // macro
|
||||||
|
// ------------------------------------------------------ ##
|
||||||
|
#macro Chose_le_corps () // = object
|
||||||
|
difference {
|
||||||
|
#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);
|
||||||
|
#if (R < 0.25) texture { tPlasticOrange }
|
||||||
|
#elseif (R < 0.50) texture { tPlasticBlue }
|
||||||
|
#elseif (R < 0.75) texture { tPlasticPrune }
|
||||||
|
#else texture { tPlasticGreen }
|
||||||
|
#end // if
|
||||||
|
translate y*0.48
|
||||||
|
}
|
||||||
|
// #debug "== Fin chose le corps\n"
|
||||||
|
#end // macro
|
||||||
|
// ------------------------------------------------------ ##
|
||||||
|
#macro Chose ()
|
||||||
|
union {
|
||||||
|
Chose_le_pied ()
|
||||||
|
Chose_le_corps ()
|
||||||
|
Chose_les_tiges ()
|
||||||
|
}
|
||||||
|
#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);
|
||||||
|
#debug concat("Texte horloge ", Texte, "\n\n")
|
||||||
|
|
||||||
|
text {
|
||||||
|
// ttf "datas/DSEG7Classic-Regular.ttf" Texte 0.1, 0
|
||||||
|
ttf "datas/ComicMono-Bold.ttf" Texte 0.1, 0
|
||||||
|
texture { tPlasticBlue }
|
||||||
|
}
|
||||||
|
scale 1.96
|
||||||
|
rotate 90*x
|
||||||
|
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 !
|
||||||
|
*/
|
||||||
|
#macro Base_hexapole ()
|
||||||
|
prism {
|
||||||
|
linear_sweep
|
||||||
|
linear_spline
|
||||||
|
0, // sweep the following shape from here ...
|
||||||
|
1, // ... up through here
|
||||||
|
7, // the number of points making up the shape ...
|
||||||
|
<3,5>, <-3,5>, <-5,0>, <-3,-5>, <3, -5>, <5,0>, <3,5>
|
||||||
|
#if (rand(Rng1) < 0.5) texture { T_Beton_1 }
|
||||||
|
#else texture { T_Beton_2 }
|
||||||
|
#end // if
|
||||||
|
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
|
||||||
|
* probablement bien tordues pour rendre ça en
|
||||||
|
* même temps kitch et technofutile
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
#end // macro
|
||||||
|
// ------------------------------------------------------ ##
|
||||||
|
|
||||||
|
#macro HexaPole_tubes ()
|
||||||
|
#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));
|
||||||
|
#local Zp = E * sin(radians(A));
|
||||||
|
union {
|
||||||
|
#local H2 = H + rand(Rng1) + rand(Rng1);
|
||||||
|
cylinder { 0, y*H2, R }
|
||||||
|
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 }
|
||||||
|
#elseif (Ra < 0.50) texture { T_Chrome_4D }
|
||||||
|
#elseif (Ra < 0.75) texture { T_Brass_2C }
|
||||||
|
#else texture { Soft_Silver }
|
||||||
|
#end
|
||||||
|
translate <Xp, 0, Zp>
|
||||||
|
}
|
||||||
|
#end
|
||||||
|
}
|
||||||
|
|
||||||
#undef E
|
#undef E
|
||||||
#undef H
|
#undef H
|
||||||
#undef R
|
#undef R
|
||||||
|
#end
|
||||||
|
// ------------------------------------------------------ ##
|
||||||
|
/*
|
||||||
|
* l'assemblage en grand cercle de ces trucs est
|
||||||
|
* dans le fichier "contexte.inc"
|
||||||
|
*/
|
||||||
|
|
||||||
|
#macro HexaPole ()
|
||||||
|
union {
|
||||||
|
object { Base_hexapole () scale <0.24, 0.2, 0.24> }
|
||||||
|
object { HexaPole_tubes () translate y*0.15 }
|
||||||
|
rotate y*(53*rand(Rng1))
|
||||||
|
}
|
||||||
|
#end // macro
|
||||||
|
|
||||||
|
// =======================================================
|
||||||
|
#macro OpenBox (D, R)
|
||||||
|
union {
|
||||||
|
/* les verticales */
|
||||||
|
cylinder { <-D, -D, -D>, <-D, D, -D>, R }
|
||||||
|
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 }
|
||||||
|
cylinder { <-D, -D, D>, <-D, -D, -D>, R }
|
||||||
|
cylinder { < D, -D, D>, < D, -D, -D>, R }
|
||||||
|
|
||||||
|
/* en haut */
|
||||||
|
cylinder { < D, D, D>, <-D, D, D>, R }
|
||||||
|
cylinder { < D, D, -D>, <-D, D, -D>, R }
|
||||||
|
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> }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
// =======================================================
|
// =======================================================
|
||||||
/*
|
/*
|
||||||
@@ -31,35 +293,36 @@ texture { WIP_color }
|
|||||||
*/
|
*/
|
||||||
#macro Bubble ()
|
#macro Bubble ()
|
||||||
sphere {
|
sphere {
|
||||||
0, 0.065
|
0, 0.070 + 0.056*rand(Rng1)
|
||||||
#local R = rand(Rng1);
|
#local R = rand(Rng1);
|
||||||
#if ( R < 0.333 )
|
#if ( R < 0.25 ) texture { Ruby_Glass }
|
||||||
texture { Ruby_Glass }
|
#elseif ( R < 0.50 ) texture { Orange_Glass }
|
||||||
#elseif ( R < 0.666 )
|
#elseif ( R < 0.75 ) texture { Shadow_Clouds }
|
||||||
texture { Orange_Glass }
|
#else texture { Gold_Nugget }
|
||||||
#else
|
|
||||||
texture { Gold_Nugget }
|
|
||||||
#end
|
#end
|
||||||
#undef R
|
#undef R
|
||||||
|
scale <1.414, 1.000, 1.414>
|
||||||
}
|
}
|
||||||
#end
|
#end
|
||||||
|
|
||||||
#macro Un_Machin ()
|
#macro Un_Machin ()
|
||||||
union {
|
union {
|
||||||
#for (Y, 1, 8, 1)
|
#for (Y, 1, 8, 1)
|
||||||
object { Bubble() translate y*Y*0.1 }
|
object { Bubble() translate y*Y*0.115 }
|
||||||
#end
|
#end
|
||||||
}
|
}
|
||||||
#end
|
#end
|
||||||
|
|
||||||
|
// ------------------------------------------------------ ##
|
||||||
|
|
||||||
#declare Les_Machins = object
|
#declare Les_Machins = object
|
||||||
{
|
{
|
||||||
union {
|
union {
|
||||||
#local Rk = 3.95 + NormClock;
|
#local Rk = 3.60 + NormClock;
|
||||||
#for (foo, 0, 359, 45)
|
#for (foo, 0, 359, 45)
|
||||||
#local Xpos = Rk * sin(radians(foo));
|
#local Xpos = Rk * sin(radians(foo));
|
||||||
#local Zpos = Rk * cos(radians(foo));
|
#local Zpos = Rk * cos(radians(foo));
|
||||||
object { Un_Machin () translate <Xpos, 0, Zpos> }
|
object { Un_Machin () translate <Xpos, 0.22, Zpos> }
|
||||||
#end
|
#end
|
||||||
#undef Rk
|
#undef Rk
|
||||||
}
|
}
|
||||||
|
|||||||
3
gif89a/README.md
Normal file
3
gif89a/README.md
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
|
||||||
|
|
||||||
|
Space for the flashy Compuserve pictures.
|
||||||
231
globals.inc
231
globals.inc
@@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
global_settings {
|
global_settings {
|
||||||
assumed_gamma 1.0
|
assumed_gamma 1.0
|
||||||
ambient_light rgb <0.47, 0.47, 0.47>
|
ambient_light rgb <0.48, 0.49, 0.48>
|
||||||
max_trace_level 15
|
max_trace_level 15
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -11,80 +11,260 @@ global_settings {
|
|||||||
#include "stones.inc"
|
#include "stones.inc"
|
||||||
#include "woods.inc"
|
#include "woods.inc"
|
||||||
|
|
||||||
#declare Rng1 = seed(1664);
|
#declare Rng1 = seed(1221);
|
||||||
#declare foo = rand(Rng1);
|
#declare foo = rand(Rng1);
|
||||||
#declare Rng2 = seed(now*24*60*60);
|
#declare Rng2 = seed(now*24*60*60);
|
||||||
#declare bar = rand(Rng2);
|
#declare bar = rand(Rng2);
|
||||||
|
|
||||||
#declare NormClock = clock / 360.0;
|
#declare NormClock = clock / (NbFrames - 1);
|
||||||
|
|
||||||
/* ------------------------------------------------------------ */
|
/* ------------------------------------------------------------ */
|
||||||
/*
|
/*
|
||||||
* Some constants...
|
* Some constants...
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#declare SzSol = 34;
|
#declare SzSol = 36;
|
||||||
|
#declare H_sol = 0.000; // c'est quoi exactement ?
|
||||||
|
|
||||||
#declare SzBase = 2.85;
|
#declare SzBase = 2.97;
|
||||||
#declare H_base = 0.10;
|
#declare H_base = 0.23;
|
||||||
|
|
||||||
#declare R_basecone = 0.117;
|
#declare R_basecone = 0.117;
|
||||||
#declare H_cone = 0.97;
|
#declare H_cone = 0.97;
|
||||||
|
|
||||||
#declare R_gyro = 0.09;
|
#declare R_gyro = 0.14;
|
||||||
#declare H_gyro = 1.20;
|
#declare H_gyro = 1.80;
|
||||||
#declare H_gylampe = 0.25;
|
#declare H_gylampe = 0.25;
|
||||||
|
|
||||||
#declare H_QuadriLight = 36;
|
#declare H_QuadriLight = 37;
|
||||||
#declare E_QuadriLight = SzSol * 1.35;
|
#declare E_QuadriLight = SzSol * 1.35;
|
||||||
|
|
||||||
|
#declare R_circular = (SzSol * 1.60);
|
||||||
|
|
||||||
|
#declare R_hole = 3.1; // holes in the background
|
||||||
|
|
||||||
/* ------------------------------------------------------------ */
|
/* ------------------------------------------------------------ */
|
||||||
/*
|
/*
|
||||||
* Some textures...
|
* Some textures...
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#declare WIP_color = texture
|
#declare LeGris = texture
|
||||||
{
|
{
|
||||||
pigment { color Cyan*0.60 }
|
/* moi j'dis qu'il est temps de définir un "gris de base" */
|
||||||
finish { phong 0.01 }
|
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
|
#declare T_WIP_alert = texture
|
||||||
{
|
{
|
||||||
pigment { color Red }
|
pigment { color Red }
|
||||||
finish { specular 0.90 }
|
finish { ambient 1 specular 0.80 }
|
||||||
}
|
}
|
||||||
|
|
||||||
#declare T_Planete_A = texture
|
#declare T_Planete_A = texture
|
||||||
{
|
{
|
||||||
pigment { color rgb <0.20, 0.30, 0.10> }
|
pigment { color rgb <0.20, 0.30, 0.10> }
|
||||||
normal { dents 0.38 scale 0.5}
|
normal { dents 0.28 scale 0.5}
|
||||||
finish { phong 0.80 reflection 0.05 }
|
finish { phong 0.70 reflection 0.05 }
|
||||||
}
|
}
|
||||||
#declare T_Planete_B = texture
|
#declare T_Planete_B = texture
|
||||||
{
|
{
|
||||||
pigment { rgb <0.40, 0.50, 0.70> }
|
pigment { rgb <0.42, 0.50, 0.70> }
|
||||||
finish { metallic 0.50 reflection 0.55 }
|
normal { dents 0.14 scale 0.5}
|
||||||
|
finish { metallic 0.50 reflection 0.33 }
|
||||||
}
|
}
|
||||||
|
/* ------------------------------------------------------------ */
|
||||||
/*
|
/*
|
||||||
* deux textures
|
* deux textures pour faire des batiments
|
||||||
*/
|
*/
|
||||||
#declare T_Beton_1 = texture
|
#declare T_Beton_1 = texture
|
||||||
{
|
{
|
||||||
pigment { color <0.9, 0.8, 0.8> }
|
pigment { color <0.9, 0.8, 0.7> }
|
||||||
normal { dents 0.75 scale 0.3 }
|
normal { dents 1.75 scale 0.3 }
|
||||||
finish { roughness 1.00 }
|
finish { roughness 1.00 }
|
||||||
}
|
}
|
||||||
|
|
||||||
#declare T_Beton_2 = texture
|
#declare T_Beton_2 = texture
|
||||||
{
|
{
|
||||||
pigment { color <0.7, 0.6, 0.6> }
|
pigment { color <0.7, 0.6, 0.4> }
|
||||||
normal { dents 0.25 scale 2 }
|
normal { dents 0.35 scale 3 }
|
||||||
finish { roughness 1.00 }
|
finish { roughness 1.00 }
|
||||||
}
|
}
|
||||||
|
/* ------------------------------------------------------------ */
|
||||||
|
/*
|
||||||
|
* XXX the finish need a refactoring
|
||||||
|
*/
|
||||||
|
#declare tPlasticOrange = texture
|
||||||
|
{
|
||||||
|
pigment{rgb <2.000, 0.50, 0.0>}
|
||||||
|
finish {
|
||||||
|
ambient 0.1
|
||||||
|
diffuse 0.6
|
||||||
|
specular 0.4
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#declare tPlasticGreen = texture
|
||||||
|
{
|
||||||
|
pigment{rgb <0.20, 1.600, 0.0>}
|
||||||
|
finish {
|
||||||
|
ambient 0.1
|
||||||
|
diffuse 0.6
|
||||||
|
specular 0.4
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#declare tPlasticBlue = texture
|
||||||
|
{
|
||||||
|
pigment{rgb <0.20, 0, 2.0>}
|
||||||
|
finish {
|
||||||
|
ambient 0.1
|
||||||
|
diffuse 0.6
|
||||||
|
specular 0.4
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#declare tPlasticPrune = texture
|
||||||
|
{
|
||||||
|
pigment{rgb <1.50, 0.30, 1.50>}
|
||||||
|
finish {
|
||||||
|
ambient 0.1
|
||||||
|
diffuse 0.6
|
||||||
|
specular 0.4
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* ------------------------------------------------------------ */
|
/* ------------------------------------------------------------ */
|
||||||
|
/* this texture will be clock dependent XXX */
|
||||||
|
#declare Flashy = texture {
|
||||||
|
pigment {
|
||||||
|
onion
|
||||||
|
colour_map {
|
||||||
|
[0.00, Red * 0.70 ]
|
||||||
|
[0.33, Gray40 ]
|
||||||
|
[1.00, Blue * 0.70 ]
|
||||||
|
}
|
||||||
|
turbulence 3.14159 + sin(NormClock*3.14159)
|
||||||
|
scale 0.50
|
||||||
|
}
|
||||||
|
finish {
|
||||||
|
emission 0 ambient 0.717 diffuse 0.209 specular 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ------------------------------------------------------------ */
|
||||||
|
/* new: 28 octobre 2025 */
|
||||||
|
#declare Ground_Texture = texture
|
||||||
|
{
|
||||||
|
pigment { rgb <0.31, 0.33, 0.24> }
|
||||||
|
normal { dents 0.22 scale 1.666}
|
||||||
|
finish {
|
||||||
|
ambient 0 specular 0.3 metallic roughness 0.33
|
||||||
|
reflection { 0.21 metallic }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ------------------------------------------------------------ */
|
||||||
|
/*
|
||||||
|
* Textures avec les six teintes "de base"
|
||||||
|
*/
|
||||||
|
#declare R_Texture = texture {
|
||||||
|
pigment { rgb <1.0, 0.0, 0.0> } finish { ambient 0.33 } }
|
||||||
|
#declare G_Texture = texture {
|
||||||
|
pigment { rgb <0.0, 1.0, 0.0> } finish { ambient 0.33 } }
|
||||||
|
#declare B_Texture = texture {
|
||||||
|
pigment { rgb <0.0, 0.0, 1.0> } finish { ambient 0.33 } }
|
||||||
|
|
||||||
|
#declare Y_Texture = texture {
|
||||||
|
pigment { rgb <0.8, 0.8, 0.0> } finish { ambient 0.33 } }
|
||||||
|
#declare M_Texture = texture {
|
||||||
|
pigment { rgb <0.8, 0.0, 0.8> } finish { ambient 0.33 } }
|
||||||
|
#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
|
||||||
|
{
|
||||||
|
pigment{ rgb <0.81, 0.71, 0.23> }
|
||||||
|
finish{ diffuse 0.5 ambient 0 specular 1 metallic roughness 0.01
|
||||||
|
reflection{0.6 metallic}
|
||||||
|
}
|
||||||
|
} // This is a metal.
|
||||||
|
|
||||||
|
/* ============================================================ */
|
||||||
/*
|
/*
|
||||||
* Usefull macros
|
* Usefull macros
|
||||||
*/
|
*/
|
||||||
@@ -101,4 +281,7 @@ finish { roughness 1.00 }
|
|||||||
resultat
|
resultat
|
||||||
#end
|
#end
|
||||||
|
|
||||||
/* ------------------------------------------------------------ */
|
/* ============================================================ */
|
||||||
|
|
||||||
|
#debug "\n GLOBALS INCLUDED\n"
|
||||||
|
|
||||||
|
|||||||
156
groundbase.inc
Normal file
156
groundbase.inc
Normal file
@@ -0,0 +1,156 @@
|
|||||||
|
/*
|
||||||
|
* _ _
|
||||||
|
* __ _ _ __ ___ _ _ _ __ __| || |__ __ _ ___ ___
|
||||||
|
* / _` || '__|/ _ \ | | | || '_ \ / _` || '_ \ / _` |/ __| / _ \
|
||||||
|
* | (_| || | | (_) || |_| || | | || (_| || |_) || (_| |\__ \| __/
|
||||||
|
* \__, ||_| \___/ \__,_||_| |_| \__,_||_.__/ \__,_||___/ \___|
|
||||||
|
* |___/
|
||||||
|
*
|
||||||
|
* nouveau debut fevrier 2025 - we love raytracing
|
||||||
|
*
|
||||||
|
* une cabane pour faire riche.
|
||||||
|
* une seule forme de cabane pour le moment
|
||||||
|
*/
|
||||||
|
#declare Base_cabane_forme = object
|
||||||
|
{
|
||||||
|
difference {
|
||||||
|
#local Hc = 0.90;
|
||||||
|
box { <-0.90, 0, 0>, <0.90, Hc, 0.80> }
|
||||||
|
box { <-0.89, 0.01, -1> <0.89, Hc-0.01, 0.79> }
|
||||||
|
#local Hc = Hc * 0.75;
|
||||||
|
cylinder { <-1, Hc, -0.29>, <1, Hc, 0.29>, 0.09 }
|
||||||
|
#undef Hc
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* comparaison des deux textures par le rendu
|
||||||
|
* de la meme forme de cabane.
|
||||||
|
*/
|
||||||
|
#declare Cabane_Base_1 = object
|
||||||
|
{
|
||||||
|
object { Base_cabane_forme }
|
||||||
|
texture { T_Beton_1 }
|
||||||
|
}
|
||||||
|
|
||||||
|
#declare Cabane_Base_2 = object
|
||||||
|
{
|
||||||
|
object { Base_cabane_forme }
|
||||||
|
texture { T_Beton_2 }
|
||||||
|
}
|
||||||
|
// ------------------------------------------------------ ##
|
||||||
|
|
||||||
|
#declare Compteur = object
|
||||||
|
{
|
||||||
|
#local Texte = str(clock, 3, 0);
|
||||||
|
#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_bluewave rotate <clock, clock, clock>
|
||||||
|
scale 0.79 }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#declare Cabane_Compteur = object
|
||||||
|
{
|
||||||
|
union {
|
||||||
|
object { Compteur scale 0.666
|
||||||
|
translate <-0.46, 0.22, 0.32> }
|
||||||
|
object { Cabane_Base_2 }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ======================================================= */
|
||||||
|
#declare GroundBase_Sol = object
|
||||||
|
{
|
||||||
|
intersection {
|
||||||
|
height_field {
|
||||||
|
png "datas/hf.png" smooth
|
||||||
|
translate <-.5, 0, -.5>
|
||||||
|
#local SC = SzSol * 1.111;
|
||||||
|
scale <SC, 0.95, SC>
|
||||||
|
texture {
|
||||||
|
pigment {
|
||||||
|
image_map { png "datas/cuivre.png" }
|
||||||
|
rotate x*90
|
||||||
|
translate <-.5, 0, -.5>
|
||||||
|
scale <SC, 1, SC>
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
cylinder { -y*5, y*5, SzSol*0.52 }
|
||||||
|
}
|
||||||
|
finish { phong 0.096 }
|
||||||
|
translate y*H_sol
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ======================================================= */
|
||||||
|
#declare GroundBase_a = object
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
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*3);
|
||||||
|
cylinder { 0, Ha, 0.08 translate < Dx, 0, -Dz> }
|
||||||
|
cylinder { 0, Ha, 0.08 translate <-Dx, 0, -Dz> }
|
||||||
|
#local Hb = Ha * 1.17;
|
||||||
|
cone { Ha, 0.08, Hb, 0.05 translate < Dx, 0, -Dz> }
|
||||||
|
cone { Ha, 0.08, Hb, 0.05 translate <-Dx, 0, -Dz> }
|
||||||
|
#undef Ha
|
||||||
|
#undef Hb
|
||||||
|
#undef Dx
|
||||||
|
#undef Dz
|
||||||
|
}
|
||||||
|
texture { T_Grnt7 rotate 49 scale 0.333 }
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ------------------------------------------------------------ */
|
||||||
|
|
||||||
|
#declare GroudBase_coin = object
|
||||||
|
{
|
||||||
|
merge {
|
||||||
|
cylinder { 0, y*0.5, 0.14 }
|
||||||
|
sphere { 0, 0.14 scale <1, 0.25, 1> translate y*0.5 }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#declare GroundBase_estrade = object
|
||||||
|
{
|
||||||
|
#local Sz = SzBase - 0.14;
|
||||||
|
#local Hc = H_base;
|
||||||
|
union {
|
||||||
|
box { <-SzBase, 0, -SzBase>, <SzBase, H_base, SzBase> }
|
||||||
|
object { GroudBase_coin translate <-Sz, Hc, -Sz> }
|
||||||
|
object { GroudBase_coin translate < Sz, Hc, -Sz> }
|
||||||
|
object { GroudBase_coin translate <-Sz, Hc, Sz> }
|
||||||
|
object { GroudBase_coin translate < Sz, Hc, Sz> }
|
||||||
|
}
|
||||||
|
texture { T_Grnt27 rotate 9 scale 0.302 }
|
||||||
|
#undef Sz
|
||||||
|
#undef Hc
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ------------------------------------------------------------ */
|
||||||
|
|
||||||
|
#declare La_GroundBase = object
|
||||||
|
{
|
||||||
|
union {
|
||||||
|
object { GroundBase_Sol }
|
||||||
|
object { GroundBase_estrade translate y*H_sol }
|
||||||
|
/*
|
||||||
|
* ici, mettre la cabane
|
||||||
|
*/
|
||||||
|
#local Dz = <0, 0, -7>;
|
||||||
|
object { GroundBase_a translate Dz }
|
||||||
|
object { Cabane_Compteur rotate y*180
|
||||||
|
translate Dz + y*H_base }
|
||||||
|
#undef Dz
|
||||||
|
}
|
||||||
|
translate y*(H_sol+H_base) // XXX Why ?
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ======================================================= */
|
||||||
138
hexabenz.inc
138
hexabenz.inc
@@ -8,45 +8,63 @@
|
|||||||
union {
|
union {
|
||||||
#local RA = R_basecone;
|
#local RA = R_basecone;
|
||||||
#local RB = 0.001;
|
#local RB = 0.001;
|
||||||
cone { 0, RA, y*0.89, 0.0001 }
|
difference {
|
||||||
sphere { 0, RA*1.098 scale <1, 0.58, 3.03> translate -0.02*y }
|
cone { 0, RA, y*0.89, 0.0001 }
|
||||||
|
cone { 0, RA, y*0.89, 0.0001 translate -0.014*y }
|
||||||
|
}
|
||||||
|
difference {
|
||||||
|
sphere { 0, RA*1.098 scale <1, 0.58, 3.03> }
|
||||||
|
sphere { 0, RA*1.096 scale <1, 0.58, 3.03> }
|
||||||
|
translate -0.02*y
|
||||||
|
}
|
||||||
}
|
}
|
||||||
// }
|
// }
|
||||||
#end
|
#end
|
||||||
|
// ------------------------------------------------------
|
||||||
|
/* nouveau Fri Oct 17 05:54:38 PM UTC 2025 */
|
||||||
|
#macro Benz_attache_cones (Ec)
|
||||||
|
torus { Ec, Ec*0.06
|
||||||
|
scale <1, 2.4, 1> rotate x*90
|
||||||
|
#if ( rand(Rng1) < 0.55 )
|
||||||
|
texture { GoldDark }
|
||||||
|
#else
|
||||||
|
texture { T_Brass_1C }
|
||||||
|
#end
|
||||||
|
}
|
||||||
|
#end // macro
|
||||||
|
|
||||||
|
// ------------------------------------------------------
|
||||||
|
|
||||||
#macro Benz_Cones () // = object
|
#macro Benz_Cones () // = object
|
||||||
// {
|
// {
|
||||||
union {
|
union {
|
||||||
#for (foo, 0, 360, 60)
|
#for (foo, 0, 360, 60)
|
||||||
#local E = 0.31;
|
#local E = 0.31;
|
||||||
#local Tx = E * sin(radians(foo));
|
#local Tx = E * sin(radians(foo));
|
||||||
#local Ty = E * cos(radians(foo));
|
#local Ty = E * cos(radians(foo));
|
||||||
object {
|
object {
|
||||||
Benz_Cone_Base ()
|
Benz_Cone_Base ()
|
||||||
#if ( rand(Rng1) < 0.5 )
|
#local R = rand(Rng1);
|
||||||
|
#if ( R < 0.3333 )
|
||||||
texture { T_Silver_2C scale 11.50 }
|
texture { T_Silver_2C scale 11.50 }
|
||||||
#else
|
#elseif ( R < 0.6666 )
|
||||||
texture { T_Brass_2C scale 13.50 }
|
texture { T_Brass_2C scale 13.50 }
|
||||||
|
#else
|
||||||
|
texture { T_Brass_4A scale 13.50 }
|
||||||
#end
|
#end
|
||||||
rotate -z*foo
|
rotate -z*foo
|
||||||
translate <Tx, Ty, 0>
|
translate <Tx, Ty, 0>
|
||||||
}
|
}
|
||||||
torus { E, E*0.05
|
|
||||||
scale <1, 2.4, 1> rotate x*90
|
|
||||||
#if ( rand(Rng1) < 0.5 )
|
|
||||||
texture { T_Planete_A }
|
|
||||||
#else
|
|
||||||
texture { T_Planete_B }
|
|
||||||
#end
|
|
||||||
}
|
|
||||||
#end // end for
|
#end // end for
|
||||||
|
#local SBAC = 0.300;
|
||||||
|
object { Benz_attache_cones (SBAC) translate -z*0.175 }
|
||||||
|
object { Benz_attache_cones (SBAC) translate z*0.202 }
|
||||||
}
|
}
|
||||||
// }
|
|
||||||
#end
|
#end
|
||||||
|
|
||||||
// ------------------------------------------------------
|
// ------------------------------------------------------
|
||||||
|
|
||||||
#declare R_Tube = 0.18;
|
#declare R_Tube = 0.17;
|
||||||
#local L_Tube = 0.54;
|
#local L_Tube = 0.54;
|
||||||
|
|
||||||
#macro Benz_Tubules ()
|
#macro Benz_Tubules ()
|
||||||
@@ -56,22 +74,20 @@ merge {
|
|||||||
#for (foo, 0, 360, 30)
|
#for (foo, 0, 360, 30)
|
||||||
#local Tx = E * sin(radians(foo));
|
#local Tx = E * sin(radians(foo));
|
||||||
#local Ty = E * cos(radians(foo));
|
#local Ty = E * cos(radians(foo));
|
||||||
#local Dza = z * 0.20;
|
#local Dza = z * 0.27;
|
||||||
#local Dzb = z * 0.90;
|
#local Dzb = z * 0.97;
|
||||||
cylinder { -Dza, Dzb, R translate <Tx, Ty, 0> }
|
cylinder { -Dza, Dzb, R translate <Tx, Ty, 0> }
|
||||||
sphere { -Dza, R*1.8 translate <Tx, Ty, 0> }
|
sphere { -Dza, R*1.8 translate <Tx, Ty, 0> }
|
||||||
sphere { Dzb, R*1.8 translate <Tx, Ty, 0> }
|
sphere { Dzb, R*1.8 translate <Tx, Ty, 0> }
|
||||||
#end
|
#end
|
||||||
#if ( rand(Rng1) < 0.360)
|
#local R = rand(Rng1);
|
||||||
texture { Orange_Glass }
|
#if ( R < 0.320) texture { Orange_Glass }
|
||||||
#else
|
#elseif (R < 0.64) texture { Ruby_Glass }
|
||||||
texture { Yellow_Glass }
|
#else texture { Yellow_Glass }
|
||||||
#end
|
#end
|
||||||
}
|
}
|
||||||
#end
|
#end
|
||||||
|
|
||||||
// XXX #declare Benz_Fuseau = object
|
|
||||||
// XXX {
|
|
||||||
#macro Benz_Fuseau ()
|
#macro Benz_Fuseau ()
|
||||||
difference {
|
difference {
|
||||||
sphere { 0, R_Tube*0.39 }
|
sphere { 0, R_Tube*0.39 }
|
||||||
@@ -80,14 +96,11 @@ difference {
|
|||||||
cylinder { < 1, 0, -1>, <-1, 0, 1>, R_Tube*0.21 }
|
cylinder { < 1, 0, -1>, <-1, 0, 1>, R_Tube*0.21 }
|
||||||
}
|
}
|
||||||
scale <1, 1, 4.4>
|
scale <1, 1, 4.4>
|
||||||
#if ( rand(Rng1) < 0.360)
|
#if ( rand(Rng1) < 0.420) texture { Shadow_Clouds scale 0.56 }
|
||||||
texture { Shadow_Clouds scale 0.56 }
|
#else texture { Flashy }
|
||||||
#else
|
|
||||||
texture { WIP_color }
|
|
||||||
#end
|
#end
|
||||||
|
|
||||||
#end // end macro
|
#end // end macro
|
||||||
// XXX }
|
|
||||||
|
|
||||||
#declare Benz_Fuseau_Flash = object
|
#declare Benz_Fuseau_Flash = object
|
||||||
{
|
{
|
||||||
@@ -97,41 +110,88 @@ union {
|
|||||||
rgb <rand(Rng2), rand(Rng2), rand(Rng2)>
|
rgb <rand(Rng2), rand(Rng2), rand(Rng2)>
|
||||||
fade_distance 0.96
|
fade_distance 0.96
|
||||||
fade_power 1.95
|
fade_power 1.95
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
rotate -z*clock*8
|
rotate -z*clock*8
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// -------------------------------------------
|
||||||
|
/*
|
||||||
|
* This part need more work
|
||||||
|
*/
|
||||||
|
#local Forme_Cockpit = object
|
||||||
|
{
|
||||||
|
difference {
|
||||||
|
sphere { 0, R_Tube*0.72 }
|
||||||
|
sphere { 0, R_Tube*0.72 scale 0.99 }
|
||||||
|
#for (Foo, 0, 359, 36)
|
||||||
|
cylinder { x, 0, R_Tube*0.15
|
||||||
|
translate y*(R_Tube*0.34)
|
||||||
|
rotate y*Foo }
|
||||||
|
#end
|
||||||
|
}
|
||||||
|
scale <1, 0.92, 1>
|
||||||
|
translate z*L_Tube*1.18
|
||||||
|
}
|
||||||
|
|
||||||
#declare Benz_Cylindre = object
|
#declare Benz_Cylindre = object
|
||||||
{
|
{
|
||||||
|
#local E_tube = 0.02;
|
||||||
|
#local R_int = R_Tube - E_tube;
|
||||||
difference {
|
difference {
|
||||||
union {
|
union {
|
||||||
cylinder { z*L_Tube*1.6, -z*L_Tube, R_Tube }
|
cylinder { z*L_Tube*1.6, -z*L_Tube, R_Tube }
|
||||||
/* les deux bouts du cylindre creux */
|
/* les deux bouts du cylindre creux */
|
||||||
torus { R_Tube, 0.012
|
#local R2 = (R_Tube + R_int) / 2;
|
||||||
|
torus { R2, E_tube scale <1, 5, 1>
|
||||||
rotate x*90 translate z*L_Tube*1.6 }
|
rotate x*90 translate z*L_Tube*1.6 }
|
||||||
torus { R_Tube, 0.012
|
torus { R2, E_tube scale <1, 5, 1>
|
||||||
rotate x*90 translate -z*L_Tube }
|
rotate x*90 translate -z*L_Tube }
|
||||||
|
|
||||||
/* cette sphere devrait devenir
|
/* cette sphere devrait devenir
|
||||||
un vrai cockpit ? */
|
un vrai cockpit ? */
|
||||||
sphere { z*L_Tube*1.18, R_Tube*0.72
|
object { Forme_Cockpit
|
||||||
scale <1, 0.73, 1>
|
translate y*R_Tube*0.97}
|
||||||
translate y*R_Tube*0.87}
|
|
||||||
}
|
}
|
||||||
cylinder { z*4, -z*4, R_Tube*0.95 }
|
cylinder { z*4, -z*4, R_int }
|
||||||
}
|
}
|
||||||
texture { Soft_Silver scale 6.0 }
|
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>
|
||||||
|
}
|
||||||
|
|
||||||
|
#if ( mod(clock, 10+3*rand(Rng1)) < (10*rand(Rng1)) )
|
||||||
|
texture { tPlasticPrune }
|
||||||
|
#else texture { tPlasticGreen }
|
||||||
|
#end
|
||||||
|
}
|
||||||
|
#end
|
||||||
|
// ------------------------------------------------------
|
||||||
|
|
||||||
#macro Benz_Tube ()
|
#macro Benz_Tube ()
|
||||||
// #declare Benz_Tube = object
|
// #declare Benz_Tube = object
|
||||||
// {
|
// {
|
||||||
union {
|
union {
|
||||||
object { Benz_Tubules () }
|
object { Benz_Tubules () }
|
||||||
object { Benz_Fuseau_Flash translate z*0.40 }
|
object { Benz_Fuseau_Flash translate z*0.35 }
|
||||||
object { Benz_Cylindre }
|
object { Benz_Cylindre }
|
||||||
|
|
||||||
|
/* XXX */
|
||||||
|
object { Benz_Antenne ()
|
||||||
|
translate <0, -0.37, 0.76>
|
||||||
|
rotate z*45 }
|
||||||
}
|
}
|
||||||
// }
|
// }
|
||||||
#end
|
#end
|
||||||
@@ -142,7 +202,7 @@ union {
|
|||||||
// #declare HexaBenz = object
|
// #declare HexaBenz = object
|
||||||
// {
|
// {
|
||||||
union {
|
union {
|
||||||
#local Rk = (rand(Rng1)-0.5) * 1312;
|
#local Rk = (rand(Rng1)-0.54) * 1312;
|
||||||
object { Benz_Cones () rotate z*NormClock*Rk}
|
object { Benz_Cones () rotate z*NormClock*Rk}
|
||||||
object { Benz_Tube () }
|
object { Benz_Tube () }
|
||||||
}
|
}
|
||||||
|
|||||||
25
hexabenz.pov
25
hexabenz.pov
@@ -6,33 +6,24 @@
|
|||||||
|
|
||||||
#include "globals.inc"
|
#include "globals.inc"
|
||||||
|
|
||||||
#include "colors.inc"
|
#declare NO_DYNAMIC = 0;
|
||||||
#include "metals.inc"
|
#include "all.inc"
|
||||||
#include "textures.inc"
|
|
||||||
#include "stones.inc"
|
|
||||||
|
|
||||||
#include "contexte.inc"
|
|
||||||
#include "elements.inc"
|
|
||||||
#include "hexabenz.inc"
|
|
||||||
|
|
||||||
|
|
||||||
#local K = 1.48;
|
|
||||||
object { HexaBenz () rotate y*90 translate <-K, 1.85, 0> }
|
|
||||||
object { HexaBenz () translate < K, 1.67, 0> }
|
|
||||||
|
|
||||||
// =======================================================
|
// =======================================================
|
||||||
|
|
||||||
object { Le_Decor }
|
object { Le_Decor }
|
||||||
|
|
||||||
|
#declare Loc_cam = <0.63, 2, 2*NormClock> + (Pos_RedB_0 * 1.32);
|
||||||
|
|
||||||
// object { Repere scale 2 }
|
#declare Lat_Y = 1.21 + 0.16*NormClock;
|
||||||
|
|
||||||
camera {
|
camera {
|
||||||
location <-3.9+(11*NormClock), 1.90, 7.59-NormClock>
|
location Loc_cam
|
||||||
look_at <0.17, 1.47, 0>
|
look_at Pos_RedB_0 + <0, Lat_Y, 0>
|
||||||
|
right <image_width/image_height, 0, 0>
|
||||||
// focal_point <0.37, 0.0, 0>
|
// focal_point <0.37, 0.0, 0>
|
||||||
// aperture 0.046
|
// aperture 0.046
|
||||||
// blur_samples 30
|
// blur_samples 30
|
||||||
angle 60 - 28 * Cos_01(NormClock)
|
angle 40 - 15 * Cos_01(NormClock)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -35,6 +35,15 @@ union {
|
|||||||
cylinder {-y, y, 0.11 }
|
cylinder {-y, y, 0.11 }
|
||||||
cylinder {-z, z, 0.11 }
|
cylinder {-z, z, 0.11 }
|
||||||
}
|
}
|
||||||
|
// XXX not very tested
|
||||||
|
#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/
|
// clignotement de la lumiere \o/
|
||||||
#local kR = 0.065;
|
#local kR = 0.065;
|
||||||
#local xR = (rand(Rng2)-0.5000) * kR;
|
#local xR = (rand(Rng2)-0.5000) * kR;
|
||||||
@@ -54,9 +63,13 @@ union {
|
|||||||
fade_power 1.58
|
fade_power 1.58
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
texture { New_Penny }
|
#if (rand(Rng1) < 0.30)
|
||||||
// }
|
texture { New_Penny }
|
||||||
|
#else
|
||||||
|
texture { GoldDark }
|
||||||
#end
|
#end
|
||||||
|
// }
|
||||||
|
#end // macro
|
||||||
|
|
||||||
// ---------------------------------------------------------
|
// ---------------------------------------------------------
|
||||||
/*
|
/*
|
||||||
@@ -110,7 +123,7 @@ union {
|
|||||||
#end
|
#end
|
||||||
torus { R2, 0.0039 translate -0.08*y }
|
torus { R2, 0.0039 translate -0.08*y }
|
||||||
}
|
}
|
||||||
texture { T_Brass_1C scale 6.50 }
|
texture { GoldDark scale 6.50 }
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ---------------------------------------------------------
|
/* ---------------------------------------------------------
|
||||||
@@ -154,10 +167,13 @@ merge {
|
|||||||
}
|
}
|
||||||
sphere { 0, DTb*1.65 translate -DTa*x }
|
sphere { 0, DTb*1.65 translate -DTa*x }
|
||||||
sphere { 0, DTb*1.65 translate DTa*x }
|
sphere { 0, DTb*1.65 translate DTa*x }
|
||||||
#if (rand(Rng1) < 0.8)
|
#local R = rand(Rng1);
|
||||||
|
#if (R < 0.4)
|
||||||
texture { Orange_Glass }
|
texture { Orange_Glass }
|
||||||
#else
|
#elseif (R < 0.8)
|
||||||
texture { Dark_Green_Glass }
|
texture { Dark_Green_Glass }
|
||||||
|
#else
|
||||||
|
texture { Flashy scale 2 }
|
||||||
#end
|
#end
|
||||||
}
|
}
|
||||||
#end // macro
|
#end // macro
|
||||||
@@ -261,7 +277,7 @@ union {
|
|||||||
object { HexaCone_Body () }
|
object { HexaCone_Body () }
|
||||||
#local T = 0.55;
|
#local T = 0.55;
|
||||||
object { HexaCone_head () translate <0, 0, T+DTa> }
|
object { HexaCone_head () translate <0, 0, T+DTa> }
|
||||||
#if ( (rand(Rng1) > 0.27) )
|
#if ( (rand(Rng1) > 0.47) )
|
||||||
object { HexaCone_radar_A translate <0, T+0.18, 0> }
|
object { HexaCone_radar_A translate <0, T+0.18, 0> }
|
||||||
#else
|
#else
|
||||||
object { HexaCone_radar_B translate <0, T+0.18, 0> }
|
object { HexaCone_radar_B translate <0, T+0.18, 0> }
|
||||||
24
hexacone.pov
24
hexacone.pov
@@ -6,30 +6,26 @@
|
|||||||
|
|
||||||
#include "globals.inc"
|
#include "globals.inc"
|
||||||
|
|
||||||
#include "contexte.inc"
|
// #declare DEBUG_LEVEL = 1;
|
||||||
#include "elements.inc"
|
#declare NO_DYNAMIC = 0;
|
||||||
#include "hexabenz.inc"
|
#include "all.inc"
|
||||||
|
|
||||||
#local K = 1.48;
|
|
||||||
object { HexaCone () rotate y*90 translate <-K, 1.7, 1> }
|
|
||||||
object { HexaCone () translate < K, 1.6, 1> }
|
|
||||||
|
|
||||||
object { Le_Decor }
|
object { Le_Decor }
|
||||||
|
|
||||||
// =======================================================
|
// =======================================================
|
||||||
|
|
||||||
// light_source { <19, 7, 14>, rgb <0.77, 0.79, 0.80> }
|
|
||||||
// light_source { <19, 9, -14>, rgb <0.87, 0.79, 0.70> }
|
|
||||||
|
|
||||||
// object { Repere scale 2 }
|
// object { Repere scale 2 }
|
||||||
|
|
||||||
|
#declare Loc_cam = <2, 2.7-NormClock, 1> + (Pos_RedB_1 * 1.308);
|
||||||
|
|
||||||
camera {
|
camera {
|
||||||
location
|
location Loc_cam
|
||||||
<-1.9+(8*NormClock), 0.70+NormClock, 7.59-NormClock>
|
#local H = 1.16 + (NormClock*0.39);
|
||||||
look_at <0.07, 1.55, 0>
|
look_at Pos_RedB_1 + <0.02, H, 0>
|
||||||
|
right <image_width/image_height, 0, 0>
|
||||||
// focal_point <0.37, 0.90, 0>
|
// focal_point <0.37, 0.90, 0>
|
||||||
// aperture 0.046
|
// aperture 0.046
|
||||||
// blur_samples 30
|
// blur_samples 30
|
||||||
angle 55 - 26 * Cos_01(NormClock)
|
angle 59 - 25 * Cos_01(NormClock)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
109
hexastar.inc
Normal file
109
hexastar.inc
Normal 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
33
hexastar.pov
Normal 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)
|
||||||
|
}
|
||||||
|
|
||||||
90
hexawood.inc
90
hexawood.inc
@@ -18,6 +18,8 @@ merge {
|
|||||||
}
|
}
|
||||||
#end
|
#end
|
||||||
|
|
||||||
|
/* ------------------------------------------------------------ */
|
||||||
|
|
||||||
#macro HW_Cones ()
|
#macro HW_Cones ()
|
||||||
union {
|
union {
|
||||||
#for (foo, 0, 360, 60)
|
#for (foo, 0, 360, 60)
|
||||||
@@ -28,10 +30,8 @@ union {
|
|||||||
HW_Un_Cone ()
|
HW_Un_Cone ()
|
||||||
#if ( rand(Rng1) < 0.5 )
|
#if ( rand(Rng1) < 0.5 )
|
||||||
texture { T_Wood32 rotate 37 scale 1.30 }
|
texture { T_Wood32 rotate 37 scale 1.30 }
|
||||||
// texture { WIP_color }
|
|
||||||
#else
|
#else
|
||||||
texture { T_Wood23 rotate x*87 scale 1.23 }
|
texture { T_Wood23 rotate x*87 scale 1.33 }
|
||||||
// texture { T_WIP_alert }
|
|
||||||
#end
|
#end
|
||||||
// rotate -z*foo
|
// rotate -z*foo
|
||||||
translate <Tx, Hc_ep - 0.22, Tz>
|
translate <Tx, Hc_ep - 0.22, Tz>
|
||||||
@@ -40,6 +40,7 @@ union {
|
|||||||
}
|
}
|
||||||
#end
|
#end
|
||||||
|
|
||||||
|
/* ------------------------------------------------------------ */
|
||||||
|
|
||||||
#macro HW_Chassis ()
|
#macro HW_Chassis ()
|
||||||
difference {
|
difference {
|
||||||
@@ -61,32 +62,39 @@ difference {
|
|||||||
#local Tx = El * E * sin(radians(foo));
|
#local Tx = El * E * sin(radians(foo));
|
||||||
#local Tz = E * cos(radians(foo));
|
#local Tz = E * cos(radians(foo));
|
||||||
sphere { 0, 0.17 translate <Tx, 0.20, Tz> }
|
sphere { 0, 0.17 translate <Tx, 0.20, Tz> }
|
||||||
#end
|
|
||||||
#for (foo, 0, 360, 60)
|
|
||||||
#local E = Hc_rad * 1.14;
|
#local E = Hc_rad * 1.14;
|
||||||
#local Tx = El * E * sin(radians(foo+30));
|
#local Tx = El * E * sin(radians(foo+30));
|
||||||
#local Tz = E * cos(radians(foo+30));
|
#local Tz = E * cos(radians(foo+30));
|
||||||
cylinder { -y, y, 0.05 translate <Tx, 0, Tz> }
|
cylinder { -y, y, 0.07 translate <Tx, 0, Tz> }
|
||||||
#end
|
#end
|
||||||
translate y*0.10
|
#local R = rand(Rng1);
|
||||||
texture { T_Wood17 scale 0.82 }
|
#if (R<0.20)
|
||||||
|
texture { T_Wood17 rotate <10, 20, 30> scale 0.82 }
|
||||||
|
#else
|
||||||
|
texture { T_Wood15 rotate <17, 28, 39> scale 1.42 }
|
||||||
|
#end
|
||||||
|
translate y*0.10 // why ?
|
||||||
}
|
}
|
||||||
#end
|
#end
|
||||||
|
/* ------------------------------------------------------------ */
|
||||||
|
|
||||||
#macro HW_une_patte ()
|
#macro HW_une_patte ()
|
||||||
merge {
|
merge {
|
||||||
sphere { 0, 0.02 scale <1, 0.24, 1> translate 0.30*y }
|
/* XXX */
|
||||||
cylinder { 0, 0.30*y, 0.02 }
|
#local RP = 0.040;
|
||||||
sphere { 0, 0.07 scale <1, 0.29, 1> }
|
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.26, 1> }
|
||||||
}
|
}
|
||||||
#if ( rand(Rng1) < 0.3 )
|
#local R = rand(Rng1);
|
||||||
texture { Tinny_Brass }
|
#if ( R < 0.3 ) texture { Tinny_Brass }
|
||||||
#else
|
#elseif ( R < 0.8 ) texture { New_Penny }
|
||||||
texture { New_Penny }
|
#else texture { T_Brass_2C }
|
||||||
#end // if
|
#end // if
|
||||||
#end // macro
|
#end // macro
|
||||||
|
|
||||||
|
/* ------------------------------------------------------------ */
|
||||||
|
|
||||||
#declare HW_les_pattes = object
|
#declare HW_les_pattes = object
|
||||||
{
|
{
|
||||||
union {
|
union {
|
||||||
@@ -100,15 +108,59 @@ union {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* ------------------------------------------------------------ */
|
||||||
|
#declare HW_Anneau_0 = object
|
||||||
|
{
|
||||||
|
merge {
|
||||||
|
torus { Hc_rad*0.31, 0.0666 scale <1, 0.55, 1> }
|
||||||
|
#for (Foo, 0, 359, 60)
|
||||||
|
#local DX = Hc_rad*0.31 * sin(radians(Foo));
|
||||||
|
#local DZ = Hc_rad*0.31 * cos(radians(Foo));
|
||||||
|
#local HC = 0.30 + (0.03*rand(Rng2));
|
||||||
|
cone { 0, 0.037, y*HC*1.2, 0.0001 translate <DX, 0, DZ> }
|
||||||
|
#end // FOR
|
||||||
|
}
|
||||||
|
texture { GoldDark }
|
||||||
|
}
|
||||||
|
|
||||||
|
#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
|
#declare HexaWood = object
|
||||||
{
|
{
|
||||||
union {
|
union {
|
||||||
object { HW_Chassis () }
|
object { HW_Chassis () }
|
||||||
object { HW_les_pattes }
|
object { HW_les_pattes }
|
||||||
#if (mod(clock, 10) < 6)
|
#if (mod(clock, 8) < 5)
|
||||||
light_source { 0.20*y rgb <0, 0.20, 0.95> }
|
light_source { 0.20*y rgb <0, 0.20, 0.99> }
|
||||||
#end
|
#end
|
||||||
object { HW_Cones () translate y*0.15 }
|
object { HW_Cones () translate y*0.15 }
|
||||||
|
object { HW_Anneau }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
30
hexawood.pov
Normal file
30
hexawood.pov
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
/*
|
||||||
|
* H E X A C O N E - H E X A W O O D
|
||||||
|
*
|
||||||
|
* le troisième de la famille.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#version 3.7;
|
||||||
|
|
||||||
|
#include "globals.inc"
|
||||||
|
|
||||||
|
#declare NO_DYNAMIC = 0;
|
||||||
|
#include "all.inc"
|
||||||
|
|
||||||
|
// =======================================================
|
||||||
|
|
||||||
|
object { Le_Decor }
|
||||||
|
|
||||||
|
// object { Repere translate <10, 1, 10> }
|
||||||
|
|
||||||
|
#declare LOC = <-3.4 - NormClock, 3.35, 31.9-NormClock>;
|
||||||
|
|
||||||
|
#declare LAT = <P_hexawood.x, 0.95+(NormClock*0.11), P_hexawood.z>;
|
||||||
|
|
||||||
|
camera {
|
||||||
|
location LOC
|
||||||
|
look_at LAT
|
||||||
|
right <image_width/image_height, 0, 0>
|
||||||
|
angle 20 + 2.87*NormClock
|
||||||
|
}
|
||||||
|
|
||||||
40
orbite.pov
40
orbite.pov
@@ -6,12 +6,11 @@
|
|||||||
|
|
||||||
#include "globals.inc"
|
#include "globals.inc"
|
||||||
|
|
||||||
#include "contexte.inc"
|
#declare NO_DYNAMIC = 1;
|
||||||
#include "elements.inc"
|
#include "all.inc"
|
||||||
#include "hexabenz.inc"
|
|
||||||
|
|
||||||
// =======================================================
|
// =======================================================
|
||||||
#declare R_planete = 1.45;
|
#declare R_planete = 1.85;
|
||||||
|
|
||||||
#declare Croute = object
|
#declare Croute = object
|
||||||
{
|
{
|
||||||
@@ -52,31 +51,50 @@ union {
|
|||||||
}
|
}
|
||||||
// =======================================================
|
// =======================================================
|
||||||
|
|
||||||
#local RO = 4.15;
|
#local RO = 5.39;
|
||||||
#local CK = NormClock * 13.37;
|
#local CK = NormClock * 13.37;
|
||||||
|
|
||||||
#declare PosX = RO * sin(CK);
|
#declare PosX = RO * sin(CK);
|
||||||
#declare PosY = 0;
|
#declare PosY = 0;
|
||||||
#declare PosZ = RO * cos(CK);
|
#declare PosZ = RO * cos(CK);
|
||||||
object { HexaBenz ()
|
object { HexaBenz ()
|
||||||
rotate -y*CK*42.3 translate <PosX, PosY, PosZ>
|
rotate -y*CK*82.3 translate <PosX, PosY, PosZ>
|
||||||
}
|
}
|
||||||
#declare PosX = RO * sin(CK+2.12);
|
#declare PosX = RO * sin(CK+2.12);
|
||||||
#declare PosY = 0;
|
#declare PosY = 0;
|
||||||
#declare PosZ = RO * cos(CK+2.23);
|
#declare PosZ = RO * cos(CK+2.23);
|
||||||
object { HexaCone ()
|
object { HexaCone ()
|
||||||
rotate y*CK*49.22 translate <PosX, PosY, PosZ>
|
rotate y*CK*99.22 translate <PosX, PosY, PosZ>
|
||||||
}
|
}
|
||||||
|
|
||||||
object { Planete rotate (-clock*0.21)*y }
|
#declare PosX = RO * 1.5 * sin(CK+3.14);
|
||||||
light_source { <19, 6, 15>, rgb <0.77, 0.79, 0.80> }
|
#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 {
|
camera {
|
||||||
location <3, -1.0+(2*NormClock), 10.59>
|
location <9+NormClock, 1.60+(9.8*NormClock), 11.59>
|
||||||
look_at <0.0, 0.0, 0>
|
look_at <0.0, 0.0, 0>
|
||||||
|
right <image_width/image_height, 0, 0>
|
||||||
|
#if (0)
|
||||||
focal_point <0.0, 0.0, 0>
|
focal_point <0.0, 0.0, 0>
|
||||||
aperture 0.046
|
aperture 0.046
|
||||||
blur_samples 30
|
blur_samples 30
|
||||||
angle 62
|
#end
|
||||||
|
angle 57
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
35
panoramic.pov
Normal file
35
panoramic.pov
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
/*
|
||||||
|
* H E X A C O N E - P A N O R A M I C
|
||||||
|
* nouveau projet du Thu Dec 5 11:37:05 AM UTC 2024
|
||||||
|
*/
|
||||||
|
|
||||||
|
#version 3.7;
|
||||||
|
|
||||||
|
#include "globals.inc"
|
||||||
|
|
||||||
|
#declare NO_DYNAMIC = 0;
|
||||||
|
#include "all.inc"
|
||||||
|
|
||||||
|
// =======================================================
|
||||||
|
|
||||||
|
object { Le_Decor }
|
||||||
|
|
||||||
|
// =======================================================
|
||||||
|
|
||||||
|
#declare CK = 1.97 + (2.72 * Cos_01(NormClock));
|
||||||
|
|
||||||
|
#declare CamX = 1.72;
|
||||||
|
#declare CamY = 7 + (4*Cos_01(NormClock));
|
||||||
|
|
||||||
|
#declare LatX = 20 * cos(CK*1.08);
|
||||||
|
#declare LatY = 3.0 - sqrt(NormClock);
|
||||||
|
#declare LatZ = 20 * sin(CK);
|
||||||
|
// object { Repere scale 2 translate <LatX, LatY, LatZ> }
|
||||||
|
|
||||||
|
camera {
|
||||||
|
// orthographic
|
||||||
|
location <CamX, CamY, 0>
|
||||||
|
look_at <LatX, LatY, LatZ>
|
||||||
|
right <image_width/image_height, 0, 0>
|
||||||
|
angle 65 + (NormClock * 15)
|
||||||
|
}
|
||||||
37
passage.pov
37
passage.pov
@@ -7,27 +7,23 @@
|
|||||||
|
|
||||||
#include "globals.inc"
|
#include "globals.inc"
|
||||||
|
|
||||||
#include "contexte.inc"
|
#declare NO_DYNAMIC = 0;
|
||||||
#include "elements.inc"
|
#include "all.inc"
|
||||||
#include "hexabenz.inc"
|
|
||||||
#include "hexawood.inc"
|
|
||||||
|
|
||||||
// ---------------------------------------
|
#declare PosX = 3.95;
|
||||||
|
#declare PosY = 3.80 + (NormClock*0.299);
|
||||||
#include "dynamic.inc"
|
#declare PosZ = (NormClock-0.5) * 45.27;
|
||||||
|
|
||||||
#declare PosX = 2.95;
|
|
||||||
#declare PosY = 2.60 + (NormClock*0.28);
|
|
||||||
#declare PosZ = (NormClock-0.5) * 53.27;
|
|
||||||
object { HexaCone () translate <PosX, PosY, PosZ> }
|
object { HexaCone () translate <PosX, PosY, PosZ> }
|
||||||
|
|
||||||
object { HexaCone () translate <PosX+2.96, PosY+1.72, PosZ-11.5> }
|
|
||||||
object { HexaBenz () translate <PosX-1.96, PosY+2.42, 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 }
|
object { Le_Decor }
|
||||||
|
|
||||||
|
|
||||||
#if ( (clock < 141) )
|
#if ( (clock < 181) )
|
||||||
light_source {
|
light_source {
|
||||||
<3, 0.30, -8> color Blue
|
<3, 0.30, -8> color Blue
|
||||||
spotlight
|
spotlight
|
||||||
@@ -38,23 +34,24 @@ light_source {
|
|||||||
}
|
}
|
||||||
#end
|
#end
|
||||||
|
|
||||||
#if ( (clock > 230) & (clock < 300) )
|
#if ( (clock > 230) & (clock < 340) )
|
||||||
light_source {
|
light_source {
|
||||||
<2, 0.30, -2> color White
|
<2, 0.30, -2> color Green
|
||||||
spotlight
|
spotlight
|
||||||
radius .044
|
radius .044
|
||||||
falloff 2
|
falloff 2
|
||||||
tightness 3
|
tightness 3
|
||||||
point_at <PosX, PosY-0.30, PosZ>
|
point_at <PosX, PosY-0.10, PosZ>
|
||||||
}
|
}
|
||||||
#end
|
#end
|
||||||
|
|
||||||
camera {
|
camera {
|
||||||
location <-2.76, 1.03, 9.76>
|
location <-2.76, 1.53, 8.76>
|
||||||
look_at <PosX+0.08, PosY, PosZ>
|
look_at <PosX+0.09, PosY, PosZ-0.03>
|
||||||
|
right <image_width/image_height, 0, 0>
|
||||||
// focal_point <0, 1, 0>
|
// focal_point <0, 1, 0>
|
||||||
// aperture 0.046
|
// aperture 0.046
|
||||||
// blur_samples 30
|
// blur_samples 30
|
||||||
angle 34
|
angle 32
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
38
patrouille.pov
Normal file
38
patrouille.pov
Normal 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
|
||||||
|
}
|
||||||
|
|
||||||
|
/* =============================================================== */
|
||||||
24
remote.pov
24
remote.pov
@@ -7,26 +7,25 @@
|
|||||||
|
|
||||||
#include "globals.inc"
|
#include "globals.inc"
|
||||||
|
|
||||||
#include "contexte.inc"
|
#declare NO_DYNAMIC = 0;
|
||||||
#include "elements.inc"
|
#include "all.inc"
|
||||||
#include "hexabenz.inc"
|
|
||||||
#include "hexawood.inc"
|
|
||||||
|
|
||||||
#declare A = <-SzSol, 16, -8>;
|
#declare A = <-SzSol, 16, -8>;
|
||||||
#declare B = <SzSol+4, 18, -11>;
|
#declare B = <SzSol+4, 18, -11>;
|
||||||
#declare P = Interpolate(A, B, NormClock);
|
#declare P = Interpolate(A, B, NormClock);
|
||||||
object { HexaCone () rotate y*((6*NormClock)+80) translate P }
|
object { HexaCone () rotate y*((6*NormClock)+80) translate P }
|
||||||
|
|
||||||
#include "dynamic.inc"
|
|
||||||
|
|
||||||
object { HexaBenz () rotate y*(clock/9) translate <-9, 3, 7> }
|
object { HexaBenz () rotate y*(clock/9) translate <-9, 3, 7> }
|
||||||
|
|
||||||
// ---------------------------------------------------------
|
// ---------------------------------------------------------
|
||||||
|
// WTF is that ??? XXX
|
||||||
|
|
||||||
|
#if (0)
|
||||||
#declare A = <-15, -1.9, SzSol>;
|
#declare A = <-15, -1.9, SzSol>;
|
||||||
#declare B = < 23, -0.7, SzSol>;
|
#declare B = < 23, -0.7, SzSol>;
|
||||||
#declare P = Interpolate(A, B, NormClock);
|
#declare P = Interpolate(A, B, NormClock);
|
||||||
object { HexaWood translate P }
|
object { HexaWood scale 10 translate P }
|
||||||
|
#end
|
||||||
|
|
||||||
// ---------------------------------------------------------
|
// ---------------------------------------------------------
|
||||||
|
|
||||||
@@ -34,17 +33,18 @@ object { Le_Decor }
|
|||||||
|
|
||||||
// object { Repere scale 3 translate <SzSol, 2, SzSol> }
|
// object { Repere scale 3 translate <SzSol, 2, SzSol> }
|
||||||
|
|
||||||
#local DistCam = 239;
|
#local DistCam = 460 + (16 * NormClock);
|
||||||
#local CK = 0.56 + (0.72 * NormClock);
|
#local CK = -1.71 - (0.039 * NormClock);
|
||||||
#declare CamX = DistCam * sin(CK);
|
#declare CamX = DistCam * sin(CK);
|
||||||
#declare CamY = 28;
|
#declare CamY = 28 + NormClock;
|
||||||
#declare CamZ = DistCam * cos(CK);
|
#declare CamZ = DistCam * cos(CK);
|
||||||
|
|
||||||
camera {
|
camera {
|
||||||
location <CamX, CamY, CamZ>
|
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>
|
// focal_point <2, 1, 12>
|
||||||
// aperture 0.046
|
// aperture 0.046
|
||||||
// blur_samples 30
|
// blur_samples 30
|
||||||
angle 10
|
angle 3.5
|
||||||
}
|
}
|
||||||
|
|||||||
28
scene.pov
28
scene.pov
@@ -1,32 +1,32 @@
|
|||||||
/*
|
/*
|
||||||
* H E X A C O N E
|
* H E X A C O N E - S C E N E
|
||||||
* nouveau projet Thu Dec 5 11:37:05 AM UTC 2024
|
* nouveau projet Thu Dec 5 11:37:05 AM UTC 2024
|
||||||
|
* The first one...
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#version 3.7;
|
#version 3.7;
|
||||||
|
|
||||||
#include "globals.inc"
|
#include "globals.inc"
|
||||||
|
|
||||||
#include "contexte.inc"
|
#declare NO_DYNAMIC = 0;
|
||||||
#include "elements.inc"
|
#include "all.inc"
|
||||||
#include "hexabenz.inc"
|
|
||||||
#include "hexawood.inc"
|
|
||||||
|
|
||||||
#include "dynamic.inc"
|
|
||||||
|
|
||||||
// ---------------------------------------------------------
|
// ---------------------------------------------------------
|
||||||
|
|
||||||
object { Le_Decor }
|
object { Le_Decor }
|
||||||
|
|
||||||
#declare CK = 96 + (clock * 0.36);
|
#declare CK = 144 + (clock * 0.25);
|
||||||
#declare Dcam = 3.55;
|
|
||||||
#declare CamX = Dcam * sin(radians(CK));
|
#declare Dcam = 3.75;
|
||||||
#declare CamZ = Dcam * 1.20 * cos(radians(CK));
|
#declare CamX = Dcam * cos(radians(CK+0.9));
|
||||||
|
#declare CamZ = Dcam * 1.20 * sin(radians(CK));
|
||||||
|
|
||||||
|
#declare LatY = 2.45 + (1.47 * Cos_010(NormClock));
|
||||||
|
|
||||||
#declare Lat = <0.03, 1.18, 0.17>;
|
|
||||||
camera {
|
camera {
|
||||||
location <CamX, 1.23, CamZ>
|
location <CamX, 1.97, CamZ>
|
||||||
look_at Lat
|
look_at <0.03, LatY, 0.17>
|
||||||
|
right <image_width/image_height, 0, 0>
|
||||||
// focal_point Lat
|
// focal_point Lat
|
||||||
// aperture 0.046
|
// aperture 0.046
|
||||||
// blur_samples 30
|
// blur_samples 30
|
||||||
|
|||||||
125
splined.pov
Normal file
125
splined.pov
Normal file
@@ -0,0 +1,125 @@
|
|||||||
|
/*
|
||||||
|
* H E X A C O N E - S P L I N E D
|
||||||
|
*
|
||||||
|
* new: Sun Oct 19 05:20:49 PM UTC 2025
|
||||||
|
* https://www.f-lohmueller.de/pov_tut/animate/anim210e.htm
|
||||||
|
*/
|
||||||
|
|
||||||
|
#version 3.7;
|
||||||
|
|
||||||
|
#include "globals.inc"
|
||||||
|
|
||||||
|
#declare NO_DYNAMIC = 0;
|
||||||
|
#include "all.inc"
|
||||||
|
|
||||||
|
object { Le_Decor }
|
||||||
|
// =======================================================
|
||||||
|
#declare Spline_1 =
|
||||||
|
spline {
|
||||||
|
cubic_spline
|
||||||
|
-0.2, <-2, 1.0, -3>, // control 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>; // XXX please explain
|
||||||
|
|
||||||
|
#declare ViewSpline = object
|
||||||
|
{
|
||||||
|
union {
|
||||||
|
#for (CK, 0.00, 1.00, 0.0021)
|
||||||
|
sphere { <0,0,0>, 0.023
|
||||||
|
texture{
|
||||||
|
pigment {color rgb <0.20, 0.24, 0.14> }
|
||||||
|
finish {ambient 0.15 diffuse 0.85 phong 0.6 }
|
||||||
|
}
|
||||||
|
translate (Scaler * Spline_1(CK))
|
||||||
|
}
|
||||||
|
#end // for loop
|
||||||
|
} // closing union
|
||||||
|
}
|
||||||
|
|
||||||
|
#declare AllTheSpline = object
|
||||||
|
{
|
||||||
|
#local K1 = 0.90 - (NormClock * 0.003);
|
||||||
|
#local K2 = 1.00 - K1;
|
||||||
|
#local V1 = NormClock * K1;
|
||||||
|
#local V2 = V1 + K2;
|
||||||
|
|
||||||
|
union {
|
||||||
|
object { ViewSpline }
|
||||||
|
#declare P1 = Scaler * Spline_1(V1);
|
||||||
|
#declare P2 = <1, -1.3, 0.2> + (0.95 * Scaler * Spline_1(V2));
|
||||||
|
sphere {
|
||||||
|
0, 0.06
|
||||||
|
texture { B_Texture }
|
||||||
|
translate P1
|
||||||
|
}
|
||||||
|
sphere {
|
||||||
|
0, 0.06
|
||||||
|
texture { R_Texture }
|
||||||
|
translate P2
|
||||||
|
}
|
||||||
|
cylinder {
|
||||||
|
P1, P2, 0.017
|
||||||
|
texture { G_Texture }
|
||||||
|
}
|
||||||
|
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")
|
||||||
|
#fclose KP
|
||||||
|
#end
|
||||||
|
}
|
||||||
|
|
||||||
|
// =======================================================
|
||||||
|
|
||||||
|
#declare Flag = (mod(clock,120) < 40);
|
||||||
|
|
||||||
|
#if ( Flag )
|
||||||
|
object { AllTheSpline scale 10 translate y*2 }
|
||||||
|
#debug " FLAG IS YES\n"
|
||||||
|
#else
|
||||||
|
#debug " FLAG IS NO\n"
|
||||||
|
#end
|
||||||
|
|
||||||
|
/* P1 and P2 are computed in AllTheSpline object */
|
||||||
|
#local P1B = (P1 * 10) + <0, 2, 0>;
|
||||||
|
#local P2B = (P2 * 8) + <0, 2, 0>;
|
||||||
|
#if ( Flag )
|
||||||
|
#declare Loc_cam = <87-(12*NormClock), 29-NormClock, 4-(9*exp(NormClock))>;
|
||||||
|
#declare Lat_tmp = Interpolate(P1, P2, 0.50);
|
||||||
|
#declare Lat_cam = (Lat_tmp * 10) + <0, 2, 0>;
|
||||||
|
#declare Ang_cam = 105;
|
||||||
|
#else
|
||||||
|
#declare Loc_cam = P1B;
|
||||||
|
#declare Lat_cam = P2B; // XXX * 0.85;
|
||||||
|
#declare Ang_cam = 52;
|
||||||
|
#end
|
||||||
|
|
||||||
|
// vstr(N,A,S,L,P)
|
||||||
|
#debug concat(" LOC: ", vstr(3, Loc_cam, " ", 6, 3), "\n")
|
||||||
|
#debug concat(" LAT: ", vstr(3, Lat_cam, " ", 6, 3), "\n")
|
||||||
|
|
||||||
|
// object { Repere scale 4 translate Lat_cam }
|
||||||
|
|
||||||
|
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
|
||||||
|
angle Ang_cam
|
||||||
|
}
|
||||||
|
|
||||||
39
survol.pov
39
survol.pov
@@ -7,42 +7,29 @@
|
|||||||
|
|
||||||
#include "globals.inc"
|
#include "globals.inc"
|
||||||
|
|
||||||
#include "contexte.inc"
|
#declare NO_DYNAMIC = 0;
|
||||||
#include "elements.inc"
|
#include "all.inc"
|
||||||
#include "hexabenz.inc"
|
|
||||||
#include "hexawood.inc"
|
|
||||||
|
|
||||||
// =======================================================
|
|
||||||
|
|
||||||
/*
|
|
||||||
* on fait passer un hexatruc
|
|
||||||
*/
|
|
||||||
#declare A = <-SzSol, 16, 9>;
|
|
||||||
#declare B = < SzSol+4, 18, 11>;
|
|
||||||
#declare P = Interpolate(A, B, NormClock);
|
|
||||||
object { HexaCone () rotate y*((12*NormClock)+80) translate P }
|
|
||||||
|
|
||||||
|
|
||||||
#include "dynamic.inc"
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
object { Le_Decor }
|
object { Le_Decor }
|
||||||
|
|
||||||
// object { Repere translate y*2 }
|
// XXX instrumenter la caméra serait un GROS plus !!!
|
||||||
|
|
||||||
// =======================================================
|
// =======================================================
|
||||||
|
|
||||||
#declare Debut = <-3, 57, 47> ;
|
#declare Debut = <-33, 89, 289> ;
|
||||||
#declare Fin = < 2, 53, 7> ;
|
#declare Fin = < 36, 78, -2> ;
|
||||||
#declare Pos = Cos_01(NormClock);
|
#declare Pos = sqrt(NormClock);
|
||||||
#declare PosCam = Interpolate(Debut, Fin, Pos);
|
#declare PosCam = Interpolate(Debut, Fin, Pos);
|
||||||
|
|
||||||
#declare LatCam = PosCam + <-1, -20, -(NormClock+9)>;
|
#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 {
|
camera {
|
||||||
location PosCam
|
location PosCam
|
||||||
look_at LatCam
|
look_at LatCam
|
||||||
angle 54
|
right <image_width/image_height, 0, 0>
|
||||||
|
angle 64
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,23 +1,33 @@
|
|||||||
# Tools
|
# Tools
|
||||||
|
|
||||||
Build system and utilities.
|
The page for « Build system and utilities ».
|
||||||
|
|
||||||
## Make a sequence
|
## Make a sequence
|
||||||
|
|
||||||
Un argument pour construire la séquence entière ou deux pour démarrer au milieu, c'est pratique quand le disjoncteur fait un *beu-beu*. Exemples :
|
Un argument pour construire la séquence entière ou deux pour démarrer au
|
||||||
|
milieu, c'est parfois pratique quand le disjoncteur fait un *beu-beu* en
|
||||||
|
plein milieu. Exemples :
|
||||||
|
|
||||||
```
|
```
|
||||||
$ tools/mkloop.sh survol
|
$ tools/mkloop.sh survol
|
||||||
$ tools/mkloop.sh survol 133
|
$ tools/mkloop.sh survol 133
|
||||||
```
|
```
|
||||||
|
|
||||||
|
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
|
## Linkfarming
|
||||||
|
|
||||||
C'est le directeur de la production, le grand
|
C'est le directeur de la production, le grand
|
||||||
[script](./linkfarmer.sh)
|
[script](./linkfarmer.sh)
|
||||||
d'assemblage des séquences avec générique et intertitres.
|
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
|
## Encoding
|
||||||
|
|
||||||
@@ -29,4 +39,18 @@ Le fichier de sortie s'appelle *wip.mp4* dans tous les cas.
|
|||||||
|
|
||||||
## Plot the timing
|
## Plot the timing
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
38
tools/build-ega-mp4.sh
Executable file
38
tools/build-ega-mp4.sh
Executable file
@@ -0,0 +1,38 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -eu
|
||||||
|
|
||||||
|
source tools/fonctions.sh
|
||||||
|
|
||||||
|
# retour aux vieilles pratiques : EGA 640x350
|
||||||
|
# c'est une nouveauté du 18 octobre 2025
|
||||||
|
|
||||||
|
SEQ="essai"
|
||||||
|
if [ $# == 1 ] ; then
|
||||||
|
SEQ=$1
|
||||||
|
fi
|
||||||
|
# echo "[$SEQ] going EGA" | tee -a WS/log
|
||||||
|
|
||||||
|
debut=$(date +%s)
|
||||||
|
|
||||||
|
rm -f spool/EGA/*.png
|
||||||
|
|
||||||
|
for source in $(ls -1 frames/$SEQ/*.png)
|
||||||
|
do
|
||||||
|
bname=$( basename $source )
|
||||||
|
destname="frames/EGA/$bname"
|
||||||
|
# echo $source "==>" $destname
|
||||||
|
|
||||||
|
convert $source \
|
||||||
|
-equalize \
|
||||||
|
-dither none \
|
||||||
|
-resize '640x350!' \
|
||||||
|
-remap datas/ega-16colors.png \
|
||||||
|
$destname
|
||||||
|
|
||||||
|
done
|
||||||
|
|
||||||
|
ff_encodage "EGA/" "ega-$SEQ.mp4"
|
||||||
|
|
||||||
|
fin=$(date +%s)
|
||||||
|
echo "$SEQ -> ega" $(( fin-debut )) "secondes"
|
||||||
27
tools/build-gif89a.sh
Executable file
27
tools/build-gif89a.sh
Executable file
@@ -0,0 +1,27 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -eu
|
||||||
|
|
||||||
|
# retour aux vieilles pratiques : la Gif animée.
|
||||||
|
# c'est une nouveauté du 18 octobre 2025
|
||||||
|
|
||||||
|
SEQ="essai"
|
||||||
|
|
||||||
|
if [ $# == 1 ] ; then
|
||||||
|
SEQ=$1
|
||||||
|
fi
|
||||||
|
|
||||||
|
GIF="gif89a/$SEQ.gif"
|
||||||
|
|
||||||
|
# echo "seq $SEQ -> $GIF" | tee -a WS/log
|
||||||
|
|
||||||
|
convert \
|
||||||
|
-delay 7 \
|
||||||
|
-dither none \
|
||||||
|
-equalize \
|
||||||
|
-resize '320x240!' \
|
||||||
|
-remap datas/ega-16colors.png \
|
||||||
|
frames/$SEQ/00??[369].png \
|
||||||
|
$GIF
|
||||||
|
|
||||||
|
|
||||||
@@ -1,9 +1,10 @@
|
|||||||
|
|
||||||
|
# size of the video
|
||||||
Img_Width=1024
|
Img_Width=1024
|
||||||
Img_Height=720
|
Img_Height=720
|
||||||
|
|
||||||
TEXTCOL="PowderBlue"
|
# for imagemagick
|
||||||
STROKOL="RosyBrown"
|
TEXTCOL="Yellow"
|
||||||
|
STROKOL="Green"
|
||||||
|
|
||||||
NBFRAMES=360
|
NBFRAMES=450
|
||||||
|
|||||||
@@ -38,11 +38,11 @@ ff_encodage()
|
|||||||
SRCDIR="$1"
|
SRCDIR="$1"
|
||||||
FILMNAME="$2"
|
FILMNAME="$2"
|
||||||
|
|
||||||
echo "Encoding $SRCDIR to $FILMNAME" | tee -a WS/log
|
# echo "Encoding $SRCDIR to $FILMNAME" | tee -a WS/log
|
||||||
ffmpeg -nostdin \
|
ffmpeg -nostdin \
|
||||||
-y -r 30 -f image2 -i frames/${SRCDIR}/%05d.png \
|
-y -r 30 -f image2 -i frames/${SRCDIR}/%05d.png \
|
||||||
-metadata artist='--[ tTh ]--' \
|
-metadata artist='--[ tTh des Bourtoulots ]--' \
|
||||||
-metadata title='-- HexaCone --' \
|
-metadata title='--[ la famille HexaCone ]--' \
|
||||||
-c:v libx264 \
|
-c:v libx264 \
|
||||||
-pix_fmt yuv420p \
|
-pix_fmt yuv420p \
|
||||||
-tune film \
|
-tune film \
|
||||||
|
|||||||
@@ -31,26 +31,27 @@ IDX=$(( IDX + 1 ))
|
|||||||
linkfarm ()
|
linkfarm ()
|
||||||
{
|
{
|
||||||
SRC="frames/$1"
|
SRC="frames/$1"
|
||||||
echo "linkfarm $SRC" | tee -a WS/log
|
# echo "linkfarm $SRC" | tee -a WS/log
|
||||||
|
|
||||||
local INTER="/dev/shm/tmp-intertitre.png"
|
local INTER="/dev/shm/tmp-intertitre.png"
|
||||||
tools/plot-timing.sh $1
|
tools/plot-timing.sh $1
|
||||||
|
|
||||||
local NBRE=75
|
local NBRE=78
|
||||||
|
|
||||||
convert "WS/negatif.png" \
|
convert "WS/negatif.png" \
|
||||||
-gravity north \
|
-gravity north \
|
||||||
-font $FONTE \
|
-font $FONTE \
|
||||||
-pointsize 96 \
|
-pointsize 108 \
|
||||||
-kerning 8 \
|
-kerning 8 \
|
||||||
-fill $TEXTCOL \
|
-fill $TEXTCOL \
|
||||||
-strokewidth 2 -stroke $STROKOL \
|
-strokewidth 3 -stroke $STROKOL \
|
||||||
-annotate +0+530 "$1" \
|
-annotate +0+330 "$1" \
|
||||||
${INTER}
|
${INTER}
|
||||||
|
|
||||||
for foo in $(seq 0 $NBRE)
|
for foo in $(seq 0 $NBRE)
|
||||||
do
|
do
|
||||||
copy_a_file $INTER
|
copy_a_file $INTER
|
||||||
|
# :
|
||||||
done
|
done
|
||||||
|
|
||||||
for foo in $(seq 0 $NBRE)
|
for foo in $(seq 0 $NBRE)
|
||||||
@@ -63,9 +64,11 @@ do
|
|||||||
copy_a_file $src
|
copy_a_file $src
|
||||||
done
|
done
|
||||||
|
|
||||||
|
PIC=$( printf "%s/%05d.png" $SRC $((NBFRAMES-1)) )
|
||||||
|
# echo "End pic $PIC" >> WS/log
|
||||||
for foo in $(seq 0 $NBRE)
|
for foo in $(seq 0 $NBRE)
|
||||||
do
|
do
|
||||||
copy_a_file "$SRC/00359.png"
|
copy_a_file "$PIC"
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
# -------------------------------------------------------
|
# -------------------------------------------------------
|
||||||
@@ -73,11 +76,11 @@ faire_le_titre ()
|
|||||||
{
|
{
|
||||||
echo "faire le titre"
|
echo "faire le titre"
|
||||||
|
|
||||||
local NBRE=320
|
local NBRE=300
|
||||||
local SRC="frames/passage/00099.png"
|
local SRC="frames/hexacone/00199.png"
|
||||||
local GRAY="/dev/shm/tmp-titre.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)
|
for foo in $(seq 0 $NBRE)
|
||||||
do
|
do
|
||||||
@@ -88,7 +91,7 @@ do
|
|||||||
-pointsize 140 \
|
-pointsize 140 \
|
||||||
-kerning 6 \
|
-kerning 6 \
|
||||||
-fill $TEXTCOL \
|
-fill $TEXTCOL \
|
||||||
-strokewidth 3 -stroke $STROKOL \
|
-strokewidth 5 -stroke $STROKOL \
|
||||||
-annotate +0+${Ypos} "La famille\nHexaCone" \
|
-annotate +0+${Ypos} "La famille\nHexaCone" \
|
||||||
${TMP}
|
${TMP}
|
||||||
# identify ${TMP}
|
# identify ${TMP}
|
||||||
@@ -101,12 +104,12 @@ echo
|
|||||||
faire_la_fin ()
|
faire_la_fin ()
|
||||||
{
|
{
|
||||||
local NBRE=180
|
local NBRE=180
|
||||||
datetime=$(LANG=fr date -u +"%Y/%m/%d")
|
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 SRC="frames/patrouille/00165.png"
|
||||||
local GRAY="/dev/shm/tmp-titre.png"
|
local GRAY="/dev/shm/tmp-fin.png"
|
||||||
convert -colorspace gray -colors 27 $SRC $GRAY
|
convert -colorspace gray -colors 90 $SRC $GRAY
|
||||||
|
|
||||||
for foo in $(seq 0 $NBRE)
|
for foo in $(seq 0 $NBRE)
|
||||||
do
|
do
|
||||||
@@ -114,8 +117,8 @@ do
|
|||||||
convert ${GRAY} \
|
convert ${GRAY} \
|
||||||
-gravity north \
|
-gravity north \
|
||||||
-font $FONTE \
|
-font $FONTE \
|
||||||
-pointsize 86 \
|
-pointsize 92 \
|
||||||
-kerning 6 \
|
-kerning 5 \
|
||||||
-fill $TEXTCOL \
|
-fill $TEXTCOL \
|
||||||
-strokewidth 2 -stroke $STROKOL \
|
-strokewidth 2 -stroke $STROKOL \
|
||||||
-annotate +0+${Ypos} \
|
-annotate +0+${Ypos} \
|
||||||
@@ -127,6 +130,7 @@ do
|
|||||||
${TMP}
|
${TMP}
|
||||||
# identify ${TMP}
|
# identify ${TMP}
|
||||||
copy_a_file ${TMP}
|
copy_a_file ${TMP}
|
||||||
|
|
||||||
printf "."
|
printf "."
|
||||||
done
|
done
|
||||||
echo
|
echo
|
||||||
@@ -139,22 +143,31 @@ rm -f frames/Spool/*.png
|
|||||||
|
|
||||||
faire_le_titre
|
faire_le_titre
|
||||||
|
|
||||||
linkfarm hexabenz
|
linkfarm approche
|
||||||
linkfarm hexacone
|
linkfarm hexacone
|
||||||
|
linkfarm remote
|
||||||
|
linkfarm hexabenz
|
||||||
|
linkfarm patrouille # new St Valentine 2026
|
||||||
|
linkfarm hexawood
|
||||||
linkfarm escadrille
|
linkfarm escadrille
|
||||||
linkfarm survol
|
linkfarm survol
|
||||||
|
linkfarm around # new 26 jan 2026
|
||||||
linkfarm cutoff
|
linkfarm cutoff
|
||||||
|
linkfarm panoramic
|
||||||
linkfarm topview
|
linkfarm topview
|
||||||
|
linkfarm trident
|
||||||
linkfarm passage
|
linkfarm passage
|
||||||
linkfarm scene
|
linkfarm scene
|
||||||
|
linkfarm carto
|
||||||
|
linkfarm circular
|
||||||
|
linkfarm bubblecut
|
||||||
linkfarm orbite
|
linkfarm orbite
|
||||||
linkfarm remote
|
|
||||||
linkfarm essai
|
linkfarm essai
|
||||||
|
|
||||||
tools/plot-timing.sh
|
tools/plot-timing.sh
|
||||||
faire_la_fin
|
faire_la_fin
|
||||||
|
|
||||||
ff_encodage Spool full.mp4
|
ff_encodage Spool the-hexacone-family.mp4
|
||||||
|
|
||||||
nb=$(( $IDX - 1 ))
|
nb=$(( $IDX - 1 ))
|
||||||
echo "linkfarmed $nb files" | tee -a WS/log
|
echo "linkfarmed $nb files" | tee -a WS/log
|
||||||
|
|||||||
@@ -16,12 +16,15 @@ fi
|
|||||||
echo "$0 $SEQNAME from $START" >> WS/log
|
echo "$0 $SEQNAME from $START" >> WS/log
|
||||||
|
|
||||||
DIMS="-W$Img_Width -H$Img_Height"
|
DIMS="-W$Img_Width -H$Img_Height"
|
||||||
POVOPT="+q9 +A0.02 -d ${DIMS} -WT5"
|
NBFR=" Declare=NbFrames=$NBFRAMES "
|
||||||
|
POVOPT="+q9 +A0.02 -d ${DIMS} ${NBFR} -WT4"
|
||||||
|
echo $NBFR "frames."
|
||||||
echo $POVOPT ; echo ; sleep 2
|
echo $POVOPT ; echo ; sleep 2
|
||||||
|
|
||||||
TMPIMG=/dev/shm/${SEQNAME}-tmp.png
|
TMPIMG=/dev/shm/${SEQNAME}-tmp.png
|
||||||
|
# echo "TMPIMG" ${TMPIMG} | tee -a WS/log # DEBUG !
|
||||||
for frame in $(seq $START $((NBFRAMES-1)))
|
INC=1
|
||||||
|
for frame in $(seq $START $INC $((NBFRAMES-1)))
|
||||||
do
|
do
|
||||||
|
|
||||||
img=$(printf "frames/%s/%05d.png" $SEQNAME $frame)
|
img=$(printf "frames/%s/%05d.png" $SEQNAME $frame)
|
||||||
@@ -31,24 +34,27 @@ do
|
|||||||
err=$?
|
err=$?
|
||||||
if [ $err != 0 ] ; then
|
if [ $err != 0 ] ; then
|
||||||
echo "$SEQNAME fail $frame" >> WS/log
|
echo "$SEQNAME fail $frame" >> WS/log
|
||||||
mogrify -colorspace gray -blur 5x5 $img
|
mogrify -colorspace gray -blur 5x5 -colors 8 $img
|
||||||
visual_sleep "render fail" 12
|
visual_sleep "render fail" 12
|
||||||
continue
|
continue
|
||||||
fi
|
fi
|
||||||
set -e
|
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
|
# echo $frame $img $txt
|
||||||
convert ${TMPIMG} \
|
convert ${TMPIMG} \
|
||||||
-font Courier-Bold \
|
-font Courier-Bold \
|
||||||
-pointsize 16 \
|
-pointsize 44 \
|
||||||
-kerning 8 \
|
-kerning 3 \
|
||||||
-fill ${TEXTCOL} \
|
-fill ${TEXTCOL} \
|
||||||
-gravity north \
|
-strokewidth 2 -stroke $STROKOL \
|
||||||
-annotate +12+5 "$txt" \
|
-gravity south \
|
||||||
|
-annotate +0+5 "$txt" \
|
||||||
${img}
|
${img}
|
||||||
fin=$(date +%s)
|
fin=$(date +%s)
|
||||||
echo
|
echo ; sleep 1
|
||||||
printf "%-12s %4d %4d\n" \
|
printf "%-12s %5d %5d\n" \
|
||||||
${SEQNAME} $frame $(( fin-debut )) | \
|
${SEQNAME} $frame $(( fin-debut )) | \
|
||||||
tee -a WS/mp4.timing
|
tee -a WS/mp4.timing
|
||||||
echo ; sleep 2
|
echo ; sleep 2
|
||||||
@@ -59,5 +65,6 @@ echo
|
|||||||
|
|
||||||
ff_encodage $SEQNAME wip-${SEQNAME}.mp4
|
ff_encodage $SEQNAME wip-${SEQNAME}.mp4
|
||||||
|
|
||||||
echo "+------- build of $SEQNAME done"
|
echo "build of '$SEQNAME' done" | tee -a WS/log
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
24
tools/mkseqs.sh
Executable file
24
tools/mkseqs.sh
Executable file
@@ -0,0 +1,24 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
source tools/config.sh
|
||||||
|
source tools/fonctions.sh
|
||||||
|
|
||||||
|
echo "MKSEX ( $* )" | tee -a WS/log
|
||||||
|
sleep 1
|
||||||
|
|
||||||
|
for foo in $*
|
||||||
|
do
|
||||||
|
|
||||||
|
if [ -r "$foo.pov" ] ; then
|
||||||
|
tools/mkloop.sh $foo
|
||||||
|
tools/build-ega-mp4.sh $foo
|
||||||
|
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
43
tools/motionblur.sh
Executable 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
|
||||||
|
|
||||||
|
# -------------------------------------------------------
|
||||||
@@ -16,7 +16,10 @@ fi
|
|||||||
|
|
||||||
# echo "plot timing $sequence" >> WS/log
|
# echo "plot timing $sequence" >> WS/log
|
||||||
|
|
||||||
grep $sequence WS/mp4.timing | tail -3600 | awk \
|
count=$( grep $sequence WS/mp4.timing | wc -l )
|
||||||
|
echo "$count samples for $sequence"
|
||||||
|
|
||||||
|
grep $sequence WS/mp4.timing | tail -4000 | awk \
|
||||||
-v nbframes=$NBFRAMES \
|
-v nbframes=$NBFRAMES \
|
||||||
' \
|
' \
|
||||||
BEGIN { \
|
BEGIN { \
|
||||||
@@ -56,7 +59,7 @@ gnuplot << __EOC__
|
|||||||
set term png size $Img_Width,$Img_Height
|
set term png size $Img_Width,$Img_Height
|
||||||
set output "timing.png"
|
set output "timing.png"
|
||||||
set grid
|
set grid
|
||||||
set xrange [:360]
|
set xrange [:450]
|
||||||
set yrange [0:]
|
set yrange [0:]
|
||||||
set title "Séquence '${sequence}'"
|
set title "Séquence '${sequence}'"
|
||||||
set xlabel "numéro de la trame"
|
set xlabel "numéro de la trame"
|
||||||
|
|||||||
39
topview.pov
39
topview.pov
@@ -7,31 +7,21 @@
|
|||||||
|
|
||||||
#include "globals.inc"
|
#include "globals.inc"
|
||||||
|
|
||||||
#include "contexte.inc"
|
#declare NO_DYNAMIC = 0;
|
||||||
#include "elements.inc"
|
#include "all.inc"
|
||||||
#include "hexabenz.inc"
|
|
||||||
#include "hexawood.inc"
|
|
||||||
|
|
||||||
|
/*
|
||||||
/* XXX
|
* XXX
|
||||||
#declare TrX = 1.84 * sqrt(NormClock);
|
* why this two moving hexathings are not in "dynamic.inc" ?
|
||||||
#declare TrY = 0.90 + (3.5 * Cos_01(NormClock));
|
*/
|
||||||
#declare TrZ = 9.999 * sqrt(NormClock);
|
object { HexaCone () rotate z*9.1 translate <7, 3+NormClock, -8> }
|
||||||
#declare TrH = <TrX, TrY, TrZ>;
|
|
||||||
#declare RrY = 97 * sqrt(NormClock);
|
|
||||||
object { HexaCone () rotate y*RrY translate TrH }
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "dynamic.inc"
|
|
||||||
|
|
||||||
object { HexaCone () rotate z*9.1 translate <7, 3, -8> }
|
|
||||||
object { HexaBenz () translate <-9+NormClock, 2, -6> }
|
object { HexaBenz () translate <-9+NormClock, 2, -6> }
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* nouveau 11 fevrier 2025
|
* nouveau 11 fevrier 2025
|
||||||
*/
|
*/
|
||||||
#declare A = <-21, -0.9, (SzSol/2)+9>;
|
#declare A = <-29, -0.5, (SzSol/2)+9>;
|
||||||
#declare B = < 33, -0.7, (SzSol/2)+7>;
|
#declare B = < 36, -0.7, (SzSol/2)+7>;
|
||||||
#declare P = Interpolate(A, B, NormClock);
|
#declare P = Interpolate(A, B, NormClock);
|
||||||
object { HexaWood translate P }
|
object { HexaWood translate P }
|
||||||
|
|
||||||
@@ -39,14 +29,15 @@ object { HexaWood translate P }
|
|||||||
|
|
||||||
object { Le_Decor }
|
object { Le_Decor }
|
||||||
|
|
||||||
#declare CamY = 31 + (13.37*Cos_01(NormClock));
|
#declare CamY = 47 - (9.50 * Cos_01(NormClock));
|
||||||
#declare LatY = -3 + (1.12*NormClock);
|
#declare LatY = -4 + ( 2.12 * NormClock);
|
||||||
|
|
||||||
camera {
|
camera {
|
||||||
location <-3.60, CamY, 21.09>
|
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>
|
// focal_point <2, 1, 12>
|
||||||
// aperture 0.046
|
// aperture 0.046
|
||||||
// blur_samples 30
|
// blur_samples 30
|
||||||
angle 45 + (6*NormClock)
|
angle 45 + (65*NormClock)
|
||||||
}
|
}
|
||||||
|
|||||||
101
trident.inc
101
trident.inc
@@ -1,10 +1,101 @@
|
|||||||
|
/*
|
||||||
|
* 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 {
|
||||||
|
cone { 0, R_basecone, y*0.89, 0.0001 }
|
||||||
|
sphere { 0, R_basecone }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#macro Trid_A_cone ()
|
||||||
|
difference {
|
||||||
|
object { Trid_cone }
|
||||||
|
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 }
|
||||||
|
#elseif (Foo < 0.75) texture { T_Chrome_3A }
|
||||||
|
#else texture { GoldDark }
|
||||||
|
#end // else
|
||||||
|
#undef Foo
|
||||||
|
}
|
||||||
|
#end // macro
|
||||||
|
// ------------------------------------------------------
|
||||||
|
#macro Trid_A_head ()
|
||||||
|
union {
|
||||||
|
#for (A, 0, 360, 120)
|
||||||
|
#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> }
|
||||||
|
#end // for
|
||||||
|
#undef Tx
|
||||||
|
#undef Tz
|
||||||
|
torus { E*1.51, 0.012
|
||||||
|
scale <1, 3, 1> translate y*0.05
|
||||||
|
texture { T_Chrome_3B } }
|
||||||
|
}
|
||||||
|
#end
|
||||||
|
// ------------------------------------------------------
|
||||||
|
#macro Trid_A_body ()
|
||||||
|
#local L = Trid_length / 2;
|
||||||
|
#local R = 0.095;
|
||||||
|
merge {
|
||||||
|
cylinder { <0, -L, 0>, <0, L, 0>, R }
|
||||||
|
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 { T_WIP_rasta scale 3 }
|
||||||
|
#end
|
||||||
|
}
|
||||||
|
#undef L
|
||||||
|
#end // macro
|
||||||
|
// ------------------------------------------------------
|
||||||
|
#macro Trid_A_ailette ()
|
||||||
|
union {
|
||||||
|
#local E = 0.49;
|
||||||
|
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.86 ) texture { T_Silver_3A }
|
||||||
|
#else texture { T_WIP_rasta }
|
||||||
|
#end
|
||||||
|
#undef E
|
||||||
|
}
|
||||||
|
#end
|
||||||
|
// ------------------------------------------------------
|
||||||
|
#macro Trid_A_tail ()
|
||||||
|
union {
|
||||||
|
#for (A, 0, 359, 120)
|
||||||
|
#local RY = A + 27*rand(Rng1);
|
||||||
|
object { Trid_A_ailette () rotate RY*y }
|
||||||
|
#end // for
|
||||||
|
}
|
||||||
|
#end
|
||||||
|
// ------------------------------------------------------
|
||||||
|
// ------------------------------------------------------
|
||||||
|
#macro Trident_A ()
|
||||||
|
union {
|
||||||
|
object { Trid_A_head () translate y*0.83 }
|
||||||
|
object { Trid_A_body () }
|
||||||
|
object { Trid_A_tail () translate -y*0.60 }
|
||||||
|
// object { Repere translate <0.1, 0, 0.1> }
|
||||||
|
}
|
||||||
|
#end
|
||||||
|
// ------------------------------------------------------
|
||||||
|
// ------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
39
trident.pov
Normal file
39
trident.pov
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
/*
|
||||||
|
* H E X A C O N E - T R I D E N T
|
||||||
|
*/
|
||||||
|
|
||||||
|
#version 3.7;
|
||||||
|
|
||||||
|
#include "globals.inc"
|
||||||
|
|
||||||
|
#declare NO_DYNAMIC = 0;
|
||||||
|
#include "all.inc"
|
||||||
|
|
||||||
|
// =======================================================
|
||||||
|
|
||||||
|
object { Le_Decor }
|
||||||
|
|
||||||
|
// object { Repere scale 2 }
|
||||||
|
|
||||||
|
#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, 2.05+NormClock, 0>
|
||||||
|
right <image_width/image_height, 0, 0>
|
||||||
|
|
||||||
|
// focal_point <0.37, 0.0, 0>
|
||||||
|
// aperture 0.046
|
||||||
|
// blur_samples 30
|
||||||
|
angle 65 - 7 * Cos_01(NormClock)
|
||||||
|
}
|
||||||
|
|
||||||
296
xperiment.inc
Normal file
296
xperiment.inc
Normal file
@@ -0,0 +1,296 @@
|
|||||||
|
/*
|
||||||
|
* H E X A C O N E - X P E R I M E N T
|
||||||
|
*
|
||||||
|
* 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 {
|
||||||
|
cone { 0, 0.06, y*0.33, 0.001 }
|
||||||
|
sphere { 0, 0.06 }
|
||||||
|
#local R = rand(Rng1);
|
||||||
|
#if (R < 0.25)
|
||||||
|
texture { T_Chrome_3A }
|
||||||
|
#elseif (R < 0.50)
|
||||||
|
texture { T_Chrome_2B }
|
||||||
|
#elseif (R < 0.75)
|
||||||
|
texture { T_Chrome_3C }
|
||||||
|
#else
|
||||||
|
texture { T_Chrome_3D }
|
||||||
|
#end // IF
|
||||||
|
}
|
||||||
|
#end // Macro
|
||||||
|
/* --------------------------------------------------------------- */
|
||||||
|
#macro Corps_Wagonnet_0 (Longueur)
|
||||||
|
object {
|
||||||
|
/* le corps */
|
||||||
|
merge {
|
||||||
|
#local L2 = Longueur / 2;
|
||||||
|
#local R = 0.29;
|
||||||
|
cylinder { <L2, 0, 0>, <-L2, 0, 0>, R }
|
||||||
|
sphere { <0, 0, 0>, R
|
||||||
|
scale <3, 1, 1>
|
||||||
|
translate x*L2
|
||||||
|
}
|
||||||
|
sphere { <-L2, 0, 0>, R }
|
||||||
|
|
||||||
|
/* le kiosque (est-ce un sous-marin ?) */
|
||||||
|
merge {
|
||||||
|
#local H2 = L2 * 0.50;
|
||||||
|
cylinder { <0, 0, 0>, <0, H2, 0>, R/4 }
|
||||||
|
sphere { <0, 0, 0>, R/4
|
||||||
|
scale <1, 0.5, 1> translate y*H2
|
||||||
|
}
|
||||||
|
scale <2.5, 1, 1> translate x*L2*0.75
|
||||||
|
}
|
||||||
|
#local R = rand(Rng1);
|
||||||
|
#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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#end // macro
|
||||||
|
/* --------------------------------------------------------------- */
|
||||||
|
#macro Wagonnet_0 (Longueur)
|
||||||
|
union {
|
||||||
|
object { Corps_Wagonnet_0 (Longueur) }
|
||||||
|
#for (Foo, 0, 5)
|
||||||
|
#local DX = 0.35 - (Foo*0.24);
|
||||||
|
#local RP = -30 + (60 * rand(Rng1));
|
||||||
|
object { Pointe_Wagonnet_0 ()
|
||||||
|
translate <DX, 0.31, 0> rotate x*RP }
|
||||||
|
#end
|
||||||
|
// object { Repere scale 0.75 translate <0.06, 0.55, 0.25> }
|
||||||
|
}
|
||||||
|
#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
|
||||||
|
*/
|
||||||
|
#macro Une_Arche (Val)
|
||||||
|
object {
|
||||||
|
// #debug concat(" Arche, val = ", str(Val, 6, 4), "\n")
|
||||||
|
merge {
|
||||||
|
#local Ha = 1.80;
|
||||||
|
#local D2 = Val * 1.414;
|
||||||
|
// mettre une base de la colonne
|
||||||
|
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)
|
||||||
|
torus { 0.008, Val*1.08 translate <-1, Ha, 0> }
|
||||||
|
torus { 0.008, Val*1.08 translate < 1, Ha, 0> }
|
||||||
|
#else
|
||||||
|
cylinder { y*(Ha-0.07), y*(Ha+0.01), Val*1.12 translate -x }
|
||||||
|
cylinder { y*(Ha-0.08), y*(Ha+0.01), Val*1.13 translate x }
|
||||||
|
#end
|
||||||
|
intersection {
|
||||||
|
torus { 1, Val }
|
||||||
|
box { <-20, -5, 0>, <20, 5, -20> }
|
||||||
|
rotate <90, 0, 0> translate Ha*y
|
||||||
|
}
|
||||||
|
#local R = rand(Rng1);
|
||||||
|
#if (R < 0.20) texture { T_Stone40 scale 5+rand(Rng1) }
|
||||||
|
#elseif (R < 0.40) texture { T_Stone44 scale 4+rand(Rng1) }
|
||||||
|
#elseif (R < 0.60) texture { T_Stone32 scale 6+3*rand(Rng1) }
|
||||||
|
#elseif (R < 0.80) texture { T_Stone24 scale 5+rand(Rng1) }
|
||||||
|
#else texture { T_Stone36 scale 3+rand(Rng1) }
|
||||||
|
#end
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#end
|
||||||
|
|
||||||
|
#macro Les_Arches (EK)
|
||||||
|
union {
|
||||||
|
#local E = EK + (rand(Rng1) * 0.50);
|
||||||
|
object { Une_Arche (0.20) }
|
||||||
|
object { Une_Arche (0.16) translate -z*E }
|
||||||
|
object { Une_Arche (0.16) translate z*E }
|
||||||
|
object { Une_Arche (0.12) translate -z*E*2 }
|
||||||
|
object { Une_Arche (0.12) translate z*E*2 }
|
||||||
|
object { Une_Arche (0.08) translate -z*E*3 }
|
||||||
|
object { Une_Arche (0.08) translate z*E*3 }
|
||||||
|
}
|
||||||
|
#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
|
||||||
|
*/
|
||||||
|
#macro Un_Pylone (Type, Hauteur)
|
||||||
|
#debug " Un pylone ?\n"
|
||||||
|
|
||||||
|
#end // macro
|
||||||
|
|
||||||
|
|
||||||
|
// ==============================================================
|
||||||
|
/*
|
||||||
|
* nouveau du 12 octobre 2025
|
||||||
|
*/
|
||||||
|
|
||||||
|
#macro Cahute_0 ()
|
||||||
|
difference {
|
||||||
|
#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));
|
||||||
|
box { <-KX, 0, -KZ>, <KX, KH, KZ> }
|
||||||
|
|
||||||
|
#local Mult = 0.97;
|
||||||
|
#local KX = KX * Mult;
|
||||||
|
#local KH = KH * Mult;
|
||||||
|
#local KZ = KZ * Mult;
|
||||||
|
box { <-KX, 0.0001, -KZ>, <KX, KH, KZ> }
|
||||||
|
|
||||||
|
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.23 ) texture { T_Planete_A }
|
||||||
|
#elseif ( R < 0.56 ) texture { T_Beton_1 }
|
||||||
|
#else texture { T_Beton_2 }
|
||||||
|
#end // if
|
||||||
|
|
||||||
|
rotate y * (207 * rand(Rng1))
|
||||||
|
}
|
||||||
|
|
||||||
|
#end // macro
|
||||||
|
|
||||||
|
/* le support des cahutes XXX */
|
||||||
|
|
||||||
|
#macro Les_Cahutes ()
|
||||||
|
union {
|
||||||
|
#local H = 0.80;
|
||||||
|
#local K = 2.75;
|
||||||
|
union {
|
||||||
|
object { Cahute_0 () translate -x * K }
|
||||||
|
object { Cahute_0 () translate x * K }
|
||||||
|
object { Cahute_0 () translate -z * K }
|
||||||
|
object { Cahute_0 () translate z * K }
|
||||||
|
translate y*H
|
||||||
|
}
|
||||||
|
#local K2 = K + 1.35;
|
||||||
|
box { <-K2, 0, -K2>, <K2, H, K2> pigment { Gray30 } }
|
||||||
|
}
|
||||||
|
scale 0.5
|
||||||
|
// rotate -y * (clock*0.33)
|
||||||
|
#end
|
||||||
|
// =======================================================
|
||||||
Reference in New Issue
Block a user