Compare commits

..

405 Commits

Author SHA1 Message Date
Tonton Th
c37530d999 reglage texture 2026-03-04 21:40:09 +01:00
Tonton Th
15849c4aa2 ajustement horloge double 2026-03-04 21:39:25 +01:00
Tonton Th
3f57aec353 another another camera twiddling 2026-03-03 19:42:05 +01:00
Tonton Th
90562d2ce6 camera tuning 2026-03-01 21:09:10 +01:00
Tonton Th
daaa8eeb01 better metadata in vidz 2026-02-27 22:38:56 +01:00
Tonton Th
35e6c0dfb5 camera change 2026-02-25 14:14:45 +01:00
Tonton Th
6ee8932ba4 typographic perversity 2026-02-20 23:20:17 +01:00
Tonton Th
a3558cc1db adjust cameras before the next rendering batch 2026-02-20 23:14:10 +01:00
Tonton Th
2eea147f82 another bunch of little changes 2026-02-20 12:54:57 +01:00
Tonton Th
4dca1e7d79 geometry tuning 2026-02-20 12:52:50 +01:00
Tonton Th
0207fc942b add the "Vase" concept 2026-02-20 12:51:23 +01:00
Tonton Th
59c2b266ef small changes 2026-02-19 13:04:02 +01:00
Tonton Th
f6104c8b5d that was a bad idea 2026-02-18 19:19:20 +01:00
Tonton Th
676cf5bd87 clean the brotch 2026-02-18 02:02:10 +01:00
Tonton Th
c0a0d2467e hardening the camera 2026-02-17 23:15:31 +01:00
Tonton Th
5e5d0ae116 fix an excessive psychedelic effect 2026-02-17 23:14:51 +01:00
Tonton Th
b6ac4f8ce5 dynamic and camera tuning 2026-02-17 22:28:18 +01:00
Tonton Th
3fdfa5a0c0 swap two elements 2026-02-17 14:16:36 +01:00
Tonton Th
fd452889ea correction du planning 2026-02-17 14:16:08 +01:00
Tonton Th
b3030b886d Blob_Boxed is alive 2026-02-16 23:55:40 +01:00
Tonton Th
b246f3ba23 another try... 2026-02-16 23:53:20 +01:00
Tonton Th
27b37f17dd fix an of-by-0.2 bug 2026-02-16 19:51:47 +01:00
Tonton Th
ffd3f48b9d moving Blob_Boxed to the right file 2026-02-16 18:22:43 +01:00
Tonton Th
dfedf5f52c fine tuning 2026-02-16 18:10:58 +01:00
Tonton Th
dd4fe05229 radical change of the camera position 2026-02-16 12:44:06 +01:00
Tonton Th
0649930f7e hexablob + openbox -> boxed_blob 2026-02-15 16:12:53 +01:00
Tonton Th
606536c3f3 welcome here, hexa-patrol 2026-02-14 13:35:54 +01:00
Tonton Th
6a983ee560 add the "patrouille" sequence 2026-02-13 23:28:37 +01:00
Tonton Th
d349b23a91 fix a bug & enhance cli 2026-02-13 12:11:52 +01:00
Tonton Th
77c82f6e96 essential adjustements 2026-02-12 10:35:40 +01:00
Tonton Th
e5439eee54 nice try, but... 2026-02-12 10:21:52 +01:00
Tonton Th
fe3bdff7dd better hole borders 2026-02-11 00:00:47 +01:00
Tonton Th
f1fcebd77d a better name 2026-02-10 20:15:14 +01:00
Tonton Th
c47606438f last commits of this night 2026-02-10 04:59:43 +01:00
Tonton Th
ceb4dea907 add border to the hole 2026-02-10 04:08:49 +01:00
Tonton Th
1bef5baa93 tweak the dynamic 2026-02-10 01:21:32 +01:00
Tonton Th
2d5093eab9 changes are to small to be commited 2026-02-09 18:53:47 +01:00
Tonton Th
1ed6ce79d1 pour faire plaisir à brunus 2026-02-09 14:40:34 +01:00
Tonton Th
47a2089561 un bon gros paquet de changements :) 2026-02-09 12:29:28 +01:00
Tonton Th
9de6929b48 keep cool, bro ! 2026-02-02 14:41:01 +01:00
Tonton Th
9779b15176 slow down, bro ! 2026-02-02 14:39:38 +01:00
Tonton Th
8a6f4b3e12 + archi things 2026-01-31 09:27:58 +01:00
Tonton Th
a4025b907f add a new sequence: "around" 2026-01-26 22:23:49 +01:00
Tonton Th
957fb39ec2 add a new sequence: "around" 2026-01-26 22:22:32 +01:00
Tonton Th
438cb71b43 increase zoom-out 2026-01-25 08:42:30 +01:00
Tonton Th
d479b566b3 patch emerging tridents 2026-01-25 08:41:18 +01:00
Tonton Th
02556e71d3 commit su soir, espoir 2026-01-22 02:38:31 +01:00
Tonton Th
c08cd56637 silent superflous msg 2026-01-20 21:37:07 +01:00
Tonton Th
a51a963ba0 commit for rabbit 2026-01-16 18:29:15 +01:00
Tonton Th
77ebfd9018 some tweaks... 2026-01-15 20:30:08 +01:00
Tonton Th
4e88f481ff on the way to a new hexastar 2026-01-15 20:29:32 +01:00
Tonton Th
f251fbb825 mettre le Repere au bon endroit 2026-01-14 15:34:39 +01:00
Tonton Th
0c4aa1a31c a lot of patches 2026-01-14 14:01:20 +01:00
Tonton Th
83c8ce3f79 comment off an useless message 2026-01-14 13:50:54 +01:00
Tonton Th
243490996f slow down render for // builds 2026-01-11 13:49:18 +01:00
Tonton Th
5ae1cd149c small changes to the cam 2026-01-11 13:02:05 +01:00
Tonton Th
32eb08a0c1 typographic consmetic changes 2026-01-11 12:48:15 +01:00
Tonton Th
80044acb4c a little more doc 2026-01-11 12:22:21 +01:00
Tonton Th
6350c799db tuning 2026-01-09 20:28:50 +01:00
Tonton Th
fb126ec1b0 add comment & fix a bug ? 2026-01-08 12:01:28 +01:00
Tonton Th
eda56a4ac1 downsizing hexastar 2026-01-08 11:43:50 +01:00
Tonton Th
6032290f5e ops 2026-01-08 11:41:54 +01:00
Tonton Th
722795a45f adjust new objects 2026-01-06 06:47:42 +01:00
Tonton Th
e321cd510b oups camera 2026-01-06 06:46:10 +01:00
Tonton Th
297d0f478b adjuste the cam 2026-01-06 06:45:33 +01:00
Tonton Th
324198eb3f cosmetic 2026-01-06 06:44:43 +01:00
Tonton Th
4efc950a50 smaller is better 2026-01-06 06:44:04 +01:00
Tonton Th
ad0272bff1 rotación de la estrella 2026-01-06 06:42:37 +01:00
Tonton Th
bdd3a53a8c oups again... 2026-01-06 06:40:19 +01:00
Tonton Th
cf3fa8f1ce oupsss... 2026-01-06 06:12:44 +01:00
Tonton Th
0803d45d5c little cleanup 2026-01-05 12:38:25 +01:00
Tonton Th
111a7519f1 commits du dimanche soir, espoir 2026-01-04 23:01:37 +01:00
Tonton Th
90894f8008 explorations 2026-01-04 04:16:52 +01:00
Tonton Th
b0c0cc3140 little cosmetic change 2026-01-03 12:53:54 +01:00
Tonton Th
f5eb6cfe78 omfg, a bug in the Makefile ! 2026-01-03 08:39:40 +01:00
Tonton Th
36f1e1df37 fix an include order bug 2026-01-03 08:30:54 +01:00
Tonton Th
a575e428b2 big revamping, part 1 2026-01-02 21:15:55 +01:00
Tonton Th
f5b2e1c227 cosmetic again 2026-01-02 19:07:32 +01:00
Tonton Th
75cb2ff594 add a todo list 2026-01-02 19:05:16 +01:00
Tonton Th
2b92b3d584 more doc is better 2026-01-02 12:43:30 +01:00
Tonton Th
ebeb9abf11 l'anneau va tourner plus vite 2026-01-02 12:33:25 +01:00
Tonton Th
30ad204b5e more work on hexabenz 2026-01-01 08:46:21 +01:00
Tonton Th
8e58e59806 bla 2026-01-01 03:37:21 +01:00
Tonton Th
b83fee3574 welcome in 2026, random number generator 2026-01-01 02:05:51 +01:00
Tonton Th
0ba81b2668 les derniers commits de 2026 2026-01-01 00:50:52 +01:00
Tonton Th
d3e630b423 last sequence for 2025, part 2 2025-12-31 18:54:16 +01:00
Tonton Th
bef33435a0 last sequence for 2025 2025-12-31 18:53:22 +01:00
Tonton Th
86f8f3b53f dont know how to write a good spline 2025-12-30 09:47:03 +01:00
Tonton Th
6c78be63d8 cosmetic 2025-12-30 08:23:11 +01:00
Tonton Th
98248e6cbb slow down tracing of pngs 2025-12-29 17:25:08 +01:00
Tonton Th
b3bb7319a7 suppression message de debug 2025-12-29 15:01:34 +01:00
Tonton Th
836e8e7c17 last commits before xmas 2025-12-23 08:35:07 +01:00
Tonton Th
4e960026d2 no more useless msg in log 2025-12-22 18:25:03 +01:00
Tonton Th
83b32f6c27 calmer la camera qui bouge trop 2025-12-21 17:18:51 +01:00
Tonton Th
93ef224bac oups... 2025-12-21 06:09:48 +01:00
Tonton Th
33de761dcd work on texture and dynamic and something 2025-12-21 05:32:19 +01:00
Tonton Th
99496a7e57 tweak the trident 2025-12-20 11:51:54 +01:00
Tonton Th
5f69f2f286 one more, another to come 2025-12-19 21:42:37 +01:00
Tonton Th
674654cc62 ajust some dynamic knobes 2025-12-19 19:27:04 +01:00
Tonton Th
ef1737006d cosmetic, again... 2025-12-19 18:49:38 +01:00
Tonton Th
ada61cc4fb meilleure cahute ? 2025-12-19 18:29:44 +01:00
Tonton Th
d19c46c25e oups, forget the right ! 2025-12-19 18:06:40 +01:00
Tonton Th
2167808563 tuning on hexacone 2025-12-19 18:06:01 +01:00
Tonton Th
acbd813d9b faster pussy cat blink blink 2025-12-19 02:16:17 +01:00
Tonton Th
9aa1f37dcf le commit avant-sieste 2025-12-18 22:28:33 +01:00
Tonton Th
38d3863124 add ConeStack 2025-12-18 22:26:31 +01:00
Tonton Th
f2e324e038 trident in action 2025-12-18 22:25:33 +01:00
Tonton Th
f9054a1248 add a new seq for the trident 2025-12-18 21:53:36 +01:00
Tonton Th
936b3dda9e a new sequence is born 2025-12-18 13:55:42 +01:00
Tonton Th
48a85f3e70 look a the poor docs... 2025-12-18 12:46:51 +01:00
Tonton Th
0171c92682 ajust the camera 2025-12-18 11:28:16 +01:00
Tonton Th
93faad3ec2 a small tuning 2025-12-18 11:22:16 +01:00
Tonton Th
0f15000cf5 patch & explain 2025-12-18 11:21:03 +01:00
Tonton Th
2ec6a3f11c cosmetic 2025-12-18 11:19:51 +01:00
Tonton Th
8aaab36673 enlarge your heightfield 2025-12-18 11:18:18 +01:00
Tonton Th
77f4f50477 add a trident 2025-12-18 11:17:20 +01:00
Tonton Th
3a4532625e update the "fail image" color processing 2025-12-18 11:16:27 +01:00
Tonton Th
2f0894985d make camera more funny 2025-12-18 01:05:11 +01:00
Tonton Th
db527e05c2 changement papier pein 2025-12-18 01:04:02 +01:00
Tonton Th
768c10aa56 more tuning, rings and golddark 2025-12-18 01:03:15 +01:00
Tonton Th
346a4ed6ad the "fiouuu" commit 2025-12-17 19:36:17 +01:00
Tonton Th
a357cd0b1c nice cosmetic, bro 2025-12-17 19:05:08 +01:00
Tonton Th
7b9eb5743d FIX: position error 2025-12-17 00:12:42 +01:00
Tonton Th
7525862909 renaming a thing 2025-12-15 22:42:44 +01:00
Tonton Th
24469ba611 une chose presque meilleure 2025-12-15 14:46:25 +01:00
Tonton Th
23254ba7fa contexte plus contextuel 2025-12-15 14:34:10 +01:00
Tonton Th
636e019e97 cosmetic 2025-12-15 13:23:47 +01:00
Tonton Th
11c8461d38 tweaking the textures 2025-12-15 13:22:19 +01:00
Tonton Th
9ad8fcd1c9 some camera adjustements 2025-12-15 12:57:13 +01:00
Tonton Th
1fe506b568 make hexathings going more high 2025-12-15 12:54:06 +01:00
Tonton Th
5e57a65ea8 make hexathings going more high 2025-12-15 12:50:24 +01:00
Tonton Th
ab8c293cd1 add a mollyguard 2025-12-09 19:21:53 +01:00
Tonton Th
4f3140dd32 full sequences builder 2025-12-09 12:07:51 +01:00
Tonton Th
245740d2a2 meilleur pied pour la chose 2025-12-05 20:23:28 +01:00
Tonton Th
a924f62890 a new woup is coming 2025-12-05 20:22:06 +01:00
Tonton Th
3728c5f738 évolution de la chose 2025-12-03 12:51:23 +01:00
Tonton Th
aff60cf979 fine tuning 2025-12-03 12:50:28 +01:00
Tonton Th
454b2ddfbb redesign of "Chose" 2025-11-29 21:43:55 +01:00
Tonton Th
83d4e55871 change text colors 2025-11-29 21:38:40 +01:00
Tonton Th
c56db2a87d big commit, a lot of small adjustemnst 2025-11-25 02:36:52 +01:00
Tonton Th
fa8f9578b5 cosmetic 2025-11-19 15:19:10 +01:00
Tonton Th
58221df55c une couleur de plus 2025-11-15 03:51:33 +01:00
Tonton Th
32ca8c29c2 add six cones to the ring 2025-11-15 03:48:39 +01:00
Tonton Th
572bbc9561 working on textures 2025-11-15 03:47:45 +01:00
Tonton Th
f9cd36f83e complexification 2025-11-15 03:47:04 +01:00
Tonton Th
d7960898df trying a new noise 2025-11-15 03:46:17 +01:00
Tonton Th
7ad90524c1 add to contacts 2025-11-14 13:23:43 +01:00
Tonton Th
98f0354f91 camera change 2025-11-14 13:16:47 +01:00
Tonton Th
0e3a481e14 change colormap 2025-11-13 21:41:35 +01:00
Tonton Th
858c4201db correct the camera 2025-11-13 21:40:52 +01:00
Tonton Th
b123e035d2 symplify camera 2025-11-13 21:40:14 +01:00
Tonton Th
212993963d cosmetic 2025-11-13 19:20:50 +01:00
Tonton Th
9560b26090 slower gyros 2025-11-13 18:16:15 +01:00
Tonton Th
730b4d5a23 camera adjustements 2025-11-13 17:50:23 +01:00
Tonton Th
7fbcbec840 better ring 2025-11-13 17:32:16 +01:00
Tonton Th
46b0f2005b ajustements 2025-11-13 17:31:44 +01:00
Tonton Th
0b04ffd359 a lot of little changes 2025-11-13 02:15:11 +01:00
Tonton Th
030f2fb2cf add a new target 2025-11-13 00:19:21 +01:00
Tonton Th
b3e2cd4ac9 cosmetic 2025-11-12 22:27:10 +01:00
Tonton Th
75b1b9f741 a lot of minor changes 2025-11-04 13:28:16 +01:00
Tonton Th
8532b81c36 add a moving wagonnet 2025-11-04 13:26:11 +01:00
Tonton Th
29bed43554 add a missing png file 2025-11-02 14:47:32 +01:00
Tonton Th
40bf162ba8 moving a wagonet to a better file 2025-11-02 13:58:23 +01:00
Tonton Th
1a2fbe84b9 camera tuning 2025-11-02 09:54:01 +01:00
Tonton Th
4581bb3e37 make your things at the correct size 2025-11-01 18:30:14 +01:00
Tonton Th
63b99262a9 move things to the context 2025-10-31 20:45:03 +01:00
Tonton Th
bebb802f36 add new thins to the context 2025-10-31 20:29:14 +01:00
Tonton Th
048148967b a lot of cosmetic changes 2025-10-31 14:14:07 +01:00
Tonton Th
5706911bde enhance doc 2025-10-31 14:12:39 +01:00
Tonton Th
9f177bc3fd ajust useless messages 2025-10-31 12:34:52 +01:00
Tonton Th
876d574eec trying new things 2025-10-31 12:08:50 +01:00
Tonton Th
7c2fc424b3 some work on textures 2025-10-27 18:35:51 +01:00
Tonton Th
5aa179c8e8 fine tuning 2025-10-27 18:34:15 +01:00
Tonton Th
70469c7904 add splined sequence 2025-10-25 13:45:46 +02:00
Tonton Th
7a17acc39e patch for the futur ? 2025-10-25 11:18:40 +02:00
Tonton Th
da5afe8283 change default POV clock 2025-10-25 11:17:28 +02:00
Tonton Th
fcb1fb7467 enhance your spline seq 2025-10-22 03:00:56 +02:00
Tonton Th
fc8ae98193 camera change 2025-10-22 01:58:17 +02:00
Tonton Th
74892d028c add random texture 2025-10-22 01:56:13 +02:00
Tonton Th
be152900c4 + plot-timing 2025-10-22 01:55:18 +02:00
Tonton Th
fef45190f3 fix an off-by-one error 2025-10-22 01:53:39 +02:00
Tonton Th
3ab7c627d9 a lot of tweaks 2025-10-22 01:52:56 +02:00
Tonton Th
85c447f825 change text color 2025-10-22 01:51:36 +02:00
Tonton Th
b03e7f5571 better EGA colors 2025-10-21 14:45:49 +02:00
Tonton Th
2b1ffaf4cb tragic error, sorry 2025-10-20 12:19:19 +02:00
Tonton Th
d0bd061b50 mute useless message 2025-10-20 07:20:11 +02:00
Tonton Th
f127948f49 oups again... 2025-10-20 04:47:52 +02:00
Tonton Th
c30c7a7b11 oups... 2025-10-20 04:45:59 +02:00
Tonton Th
ac5272c2c5 add normalization 2025-10-20 04:41:59 +02:00
Tonton Th
aefee1de0b camera tweaking 2025-10-20 04:40:59 +02:00
Tonton Th
912eea2f3d better spline usage 2025-10-20 04:40:03 +02:00
Tonton Th
1f534e88cf add a new sequence 2025-10-19 21:42:42 +02:00
Tonton Th
150c546fb4 camera adjustements 2025-10-19 19:11:08 +02:00
Tonton Th
18c84133b6 more experiment 2025-10-19 19:09:46 +02:00
Tonton Th
d911af44c6 tuning colors 2025-10-19 19:08:42 +02:00
Tonton Th
319e44a072 patching the hexfighter 2025-10-19 19:07:53 +02:00
Tonton Th
75d51755cb bla 2025-10-19 19:06:55 +02:00
Tonton Th
90af7dd796 better EGA transcoding tool 2025-10-19 16:46:51 +02:00
Tonton Th
b2cbcd928f switch to EGA mode 2025-10-19 14:44:34 +02:00
Tonton Th
0f72fd1ed0 work on Chose, part 2 2025-10-19 06:33:12 +02:00
Tonton Th
c3b4d94977 work on Chose 2025-10-19 06:32:17 +02:00
Tonton Th
9a00f7317f adjust colorimetry 2025-10-19 06:31:44 +02:00
Tonton Th
1c2a4f9be2 tweaks... 2025-10-18 16:15:59 +02:00
Tonton Th
fd7c2fe707 La Chose est maintenant une macro 2025-10-18 16:14:59 +02:00
Tonton Th
3eae9b7308 making gif89a NOW ! 2025-10-18 16:13:10 +02:00
Tonton Th
b324d4a5df increase font size 2025-10-18 11:30:06 +02:00
Tonton Th
877b5aaef6 add more choses 2025-10-18 01:54:04 +02:00
Tonton Th
50199c18d4 better camera 2025-10-18 01:53:15 +02:00
Tonton Th
d823515699 move hexabenz 2025-10-18 01:52:36 +02:00
Tonton Th
34c94e0338 increase Y of camera 2025-10-18 01:51:55 +02:00
Tonton Th
48c5ccbe66 move camera hardly 2025-10-12 16:52:52 +02:00
Tonton Th
c156230406 ajout piliers sur rail circular 2025-10-12 16:49:28 +02:00
Tonton Th
8c60007b71 thi is a really big commit 2025-10-10 12:52:49 +02:00
Tonton Th
a5f2e41502 complexification de la chose 2025-10-07 11:01:51 +02:00
Tonton Th
302b25a790 kill useless message 2025-10-07 10:47:26 +02:00
Tonton Th
266c9cb543 add a debug msg 2025-09-27 16:03:09 +02:00
Tonton Th
f0e69c9478 a good camera 2025-09-27 02:19:49 +02:00
Tonton Th
6dde4cbf0f add a few explanation 2025-09-23 04:34:41 +02:00
Tonton Th
cb43cb4481 cutting sphere tuning 2025-09-23 03:18:44 +02:00
Tonton Th
97f6018cc9 some tuning 2025-09-23 03:17:34 +02:00
Tonton Th
a459f22073 add debug printf 2025-09-23 03:16:15 +02:00
Tonton Th
5b2ef0c558 add a new sequence 2025-09-23 00:51:38 +02:00
Tonton Th
55a174f4f2 adjustements MUST be tested 2025-09-16 14:21:20 +02:00
Tonton Th
7d6e50cb7d moving camera 2025-09-16 14:14:30 +02:00
Tonton Th
d620783ab8 je deviens vieux et pinailleur 2025-09-16 14:13:09 +02:00
Tonton Th
898828b49d a lot of cosmetic 2025-09-12 03:56:21 +02:00
Tonton Th
11717a4f6a use the new Define 2025-09-12 03:53:53 +02:00
Tonton Th
879dab3239 add a Define 2025-09-12 03:53:05 +02:00
Tonton Th
cf0bcb9cab enhance your tools 2025-09-12 03:52:23 +02:00
Tonton Th
32606a5a18 very small tuning 2025-09-09 22:05:29 +02:00
Tonton Th
abaa6437fd texturing is a mess 2025-09-06 20:38:46 +02:00
Tonton Th
f28b260f8d a lot of tweaks 2025-09-06 01:00:39 +02:00
Tonton Th
540c16b47f get more cpu powa 2025-09-05 14:23:33 +02:00
Tonton Th
29d23630b4 ajuster la camera 2025-09-02 16:07:50 +02:00
Tonton Th
d25c217e6a tuning textures 2025-09-02 11:32:58 +02:00
Tonton Th
d30036415a preparation edition automnale 2025-08-29 22:57:24 +02:00
Tonton Th
bf7550e52e small tuning 2025-08-29 17:40:26 +02:00
Tonton Th
5d105ccde9 small tuning 2025-08-29 17:39:37 +02:00
Tonton Th
bbd9cf40e5 small tuning 2025-08-29 17:38:35 +02:00
Tonton Th
fe94d3036e cosmetic 2025-06-21 02:45:41 +02:00
Tonton Th
3510b57523 cosmetic 2025-06-21 02:30:40 +02:00
Tonton Th
71cce4f60c very small refactoring 2025-06-19 14:54:49 +02:00
Tonton Th
3535e16a20 camera tuning 2025-06-19 14:34:53 +02:00
Tonton Th
92a015b46a add a sequence 2025-06-19 14:33:30 +02:00
Tonton Th
435d5b56b3 horloge 2025-05-24 14:20:20 +02:00
Tonton Th
3fd4ce827f + sequence carto 2025-05-21 14:39:34 +02:00
Tonton Th
9cb2d9f123 cam tuning 2025-05-17 19:19:27 +02:00
Tonton Th
9a3b4807e4 trying a new sky 2025-05-09 20:07:33 +02:00
Tonton Th
3ce1994e97 moving "Horloge" to a better place 2025-05-09 20:06:14 +02:00
Tonton Th
03c8c1cbd8 oups... 2025-05-07 17:24:15 +02:00
Tonton Th
3143bb87ba enhanced hexapole 2025-05-04 18:36:13 +02:00
Tonton Th
c2731bbfc2 move the cam ! 2025-05-04 12:58:14 +02:00
Tonton Th
2a3b3a65b4 adjust camera 2025-04-28 20:23:01 +02:00
Tonton Th
89e4e1420e cosmetic on texts 2025-04-28 20:09:04 +02:00
Tonton Th
41af9f42d2 adjust camera 2025-04-28 20:08:15 +02:00
Tonton Th
5de41466dd adjust a texture 2025-04-28 03:58:49 +02:00
Tonton Th
5c3a56bbef cosmetic 2025-04-27 20:55:04 +02:00
Tonton Th
1b50ba7616 ajust parameters of the bubble-cuting sphere 2025-04-27 20:33:52 +02:00
Tonton Th
802a4ab8c2 HexaPole is now a macro 2025-04-25 21:39:34 +02:00
Tonton Th
ffd73e832c add a new texture 2025-04-25 21:38:12 +02:00
Tonton Th
c82f6f4de5 le commit en chocolat 2025-04-22 00:49:18 +02:00
Tonton Th
a9ec016184 change textcolors, add bubblecut 2025-04-13 10:09:13 +02:00
Tonton Th
134fd180c1 oups... 2025-04-12 21:20:43 +02:00
Tonton Th
5361536d30 cosmetic 2025-04-06 13:17:03 +02:00
Tonton Th
ff733efaa7 add a new sequence 2025-04-04 00:50:48 +02:00
Tonton Th
363274e273 premier commit du printemps 2025-03-31 03:55:29 +02:00
Tonton Th
3c4012945f fine tuning 2025-03-27 00:47:41 +01:00
Tonton Th
f338b1e925 add hexawood view 2025-03-25 14:50:14 +01:00
Tonton Th
05ab348be3 cosmetic change of look_at 2025-03-21 20:49:03 +01:00
Tonton Th
80cd442a73 meilleur cadrage ? 2025-03-21 19:55:38 +01:00
Tonton Th
34e3ef5bf4 other kerning is cool 2025-03-21 19:21:09 +01:00
Tonton Th
a8009c0803 others colors are cool 2025-03-21 19:15:19 +01:00
Tonton Th
ebe9eba8da tweaking the trident 2025-03-20 21:23:43 +01:00
Tonton Th
bb68a37188 better rotation and look of gyrophares 2025-03-20 21:22:02 +01:00
Tonton Th
b072c816a4 patch the groundbase 2025-03-18 23:20:18 +01:00
Tonton Th
b385c14f79 oups... 2025-03-18 21:33:34 +01:00
Tonton Th
c03f402b4c commit du dimanche soir de la flemme 2025-03-16 21:32:23 +01:00
Tonton Th
095dfbdd39 remove faulty include 2025-03-16 10:30:15 +01:00
Tonton Th
8e7ccfda66 adjust camera 2025-03-13 02:25:56 +01:00
Tonton Th
04abd21718 cosmetic 2025-03-12 23:54:35 +01:00
Tonton Th
90eb52f548 add debug tool 2025-03-12 23:54:05 +01:00
Tonton Th
455578dc33 adjust cam position 2025-03-12 22:34:57 +01:00
Tonton Th
ba9c8e47c7 working on groundbase 2025-03-12 20:54:30 +01:00
Tonton Th
afbeaaf887 renaming a file 2025-03-12 15:36:32 +01:00
Tonton Th
c65090e4a2 commit big mess before refactoring 2025-03-07 10:51:57 +01:00
Tonton Th
f417711da3 cosmetic 2025-02-27 13:26:21 +01:00
Tonton Th
8bcb56e9ea timing adjust 2025-02-27 13:25:57 +01:00
Tonton Th
db5eedffe1 a lot of change, stay tuned 2025-02-19 02:49:16 +01:00
Tonton Th
532560518c cosmetic 2025-02-19 02:48:45 +01:00
Tonton Th
479e4ee18d cosmetic 2025-02-19 02:48:26 +01:00
Tonton Th
3ff83f012d the best cosmetic change ever 2025-02-15 02:55:07 +01:00
Tonton Th
cd65855f2c release of the official "full-v2" video 2025-02-14 19:47:29 +01:00
Tonton Th
14a03b78eb add the "hexawood" to the family 2025-02-12 14:09:11 +01:00
Tonton Th
39adef1e90 unused parts update 2025-02-11 18:04:48 +01:00
Tonton Th
a95ff22653 better API 2025-02-10 23:57:32 +01:00
Tonton Th
e7ccaf8089 misc changes 2025-02-10 16:11:51 +01:00
Tonton Th
14c6cbb818 more explanations 2025-02-10 16:10:46 +01:00
Tonton Th
f9755cf0a2 La cabane part en prod' un lundi matin 2025-02-10 04:16:53 +01:00
Tonton Th
7e7f9fbe40 little tweak 2025-02-10 04:15:42 +01:00
Tonton Th
6407a3ed3a cosmetic 2025-02-10 04:15:02 +01:00
Tonton Th
701b6187a5 plot the last timing value 2025-02-10 04:14:38 +01:00
Tonton Th
6f637ca79a more doc, really ? 2025-02-10 02:25:39 +01:00
Tonton Th
97950f2483 cosmetic and addition of "survol" seq 2025-02-10 02:15:10 +01:00
Tonton Th
15eedb2034 change a default value 2025-02-09 22:15:04 +01:00
Tonton Th
f487f35ccd centering 2025-02-09 20:44:55 +01:00
Tonton Th
66f54c283d fine tuning 2025-02-09 20:44:05 +01:00
Tonton Th
955af75151 tune the cam, bro 2025-02-09 19:06:00 +01:00
Tonton Th
e3b13c0631 tuning the groundbase 2025-02-09 19:05:10 +01:00
Tonton Th
72d99f9400 add a "start from here" option 2025-02-09 19:03:26 +01:00
Tonton Th
f737579090 etude pour une cabane 2025-02-09 19:02:32 +01:00
Tonton Th
46bb5ee3da cosmetic: change display of frame number 2025-02-07 23:16:17 +01:00
Tonton Th
8b5dbb7a99 reduction of image height for better aspect ratio 2025-02-07 23:14:59 +01:00
Tonton Th
3117141b52 commit du soir, espoir 2025-02-04 01:06:18 +01:00
Tonton Th
aed3fa6cf7 add done files 2025-02-03 22:49:23 +01:00
Tonton Th
3ab1079214 view from the sky 2025-02-01 17:31:21 +01:00
Tonton Th
32f4b403e2 ready for prime time ? 2025-01-27 16:38:55 +01:00
Tonton Th
949d5b328d preparing the next release, stay tuned 2025-01-27 03:34:51 +01:00
Tonton Th
1944fdd337 add a new sequence : cutoff 2025-01-27 03:33:53 +01:00
Tonton Th
b344d0b762 a lot a better things 2025-01-26 19:32:18 +01:00
Tonton Th
9962480356 remove useless message 2025-01-25 07:05:30 +01:00
Tonton Th
8e02e9e466 very fine tuning 2025-01-23 21:49:59 +01:00
Tonton Th
45ac640ba6 affiner le contexte... 2025-01-22 19:46:55 +01:00
Tonton Th
27891b70dc cosmetic 2025-01-22 19:30:23 +01:00
Tonton Th
05f40fae75 add intertitres 2025-01-22 19:29:20 +01:00
Tonton Th
070679ec5b add a new sequence 2025-01-19 21:45:56 +01:00
Tonton Th
1eac9d4cfc increase video size 2025-01-16 15:07:06 +01:00
Tonton Th
cf899967ce moving the gyrophare to the right file 2025-01-16 13:01:46 +01:00
Tonton Th
af4f9fc282 oups... 2025-01-16 01:11:56 +01:00
Tonton Th
b9299568f4 using anti-aliasing 2025-01-16 01:04:49 +01:00
Tonton Th
22be42d86e reworking the build system 2025-01-15 22:13:42 +01:00
Tonton Th
6828b25402 this is the eternall wip 2025-01-15 21:34:15 +01:00
Tonton Th
a290042ee9 parameters tweaking 2025-01-15 21:30:44 +01:00
Tonton Th
d8de01a0ae small tuning 2025-01-15 21:30:03 +01:00
Tonton Th
f8f3dcd85e increase phy of blinkenlight 2025-01-15 21:29:11 +01:00
Tonton Th
f8fa077655 tuning prises de vues 2025-01-15 14:01:02 +01:00
Tonton Th
8b3126cd78 moved a constant to globals 2025-01-14 09:06:51 +01:00
Tonton Th
8d438d5885 wip du 2024/01/14 2025-01-14 00:38:40 +01:00
Tonton Th
8c30830837 add global constants 2025-01-13 15:27:56 +01:00
Tonton Th
540dc86601 fine tuning 2025-01-13 15:26:12 +01:00
Tonton Th
6133319acd oups... 2025-01-13 14:47:58 +01:00
Tonton Th
3d779f68c6 cosmetic 2025-01-13 14:47:20 +01:00
Tonton Th
abda4f6896 a new sequence 2025-01-13 14:46:45 +01:00
Tonton Th
afefaa9188 cosmetic 2025-01-12 15:47:46 +01:00
Tonton Th
273312e7c5 gigantic refactoring, part one 2025-01-12 02:33:39 +01:00
Tonton Th
5d34aac50c can now take a sequence name 2025-01-11 20:37:54 +01:00
Tonton Th
936afb01b4 bla 2025-01-11 17:07:50 +01:00
Tonton Th
e62a531a82 + webp 2025-01-11 17:05:13 +01:00
Tonton Th
f06283b570 dependencies 2025-01-08 00:51:03 +01:00
Tonton Th
2ed567a33c use the #macro force, Luke ! 2025-01-08 00:13:37 +01:00
Tonton Th
cb36297499 bla 2025-01-07 14:34:12 +01:00
Tonton Th
afc4fee8a7 tuning... 2025-01-07 14:33:26 +01:00
Tonton Th
a60281b684 + escadrille 2025-01-06 16:07:14 +01:00
Tonton Th
8569be0327 two is better than one 2025-01-06 16:06:26 +01:00
Tonton Th
7b186fad2a et en escadrille ? 2025-01-06 16:05:57 +01:00
Tonton Th
384df739dd clean 2025-01-05 09:09:25 +01:00
Tonton Th
8c548c6f0e refactoring the build system, part 2 2025-01-05 00:44:36 +01:00
Tonton Th
d89876b633 refactoring the build system 2025-01-05 00:41:14 +01:00
Tonton Th
5b7ad96a29 first release of hexabenz 2025-01-05 00:18:06 +01:00
Tonton Th
124c3bfd5c a new hexacone is born 2025-01-04 18:56:37 +01:00
Tonton Th
1d91199ebb tweak the cam 2025-01-03 19:17:36 +01:00
Tonton Th
ce8c0f2bd7 do not log this message 2025-01-02 15:03:47 +01:00
Tonton Th
0285a14e02 multiple tweakings... 2025-01-02 01:30:37 +01:00
Tonton Th
cf95106744 add orbital view 2025-01-02 01:27:23 +01:00
Tonton Th
cdc0fb6780 brotching the build system 2025-01-02 01:23:49 +01:00
Tonton Th
e978a02196 add a readme in frames dir 2025-01-01 18:06:17 +01:00
Tonton Th
d993296ea9 enhanced reliability 2025-01-01 17:58:50 +01:00
Tonton Th
5c4287a572 + orbite sequence 2025-01-01 16:30:11 +01:00
Tonton Th
750a9d7214 take a sequence name as parameter 2025-01-01 16:29:42 +01:00
Tonton Th
e02ec90a44 ugly patch, need more work 2025-01-01 16:28:56 +01:00
Tonton Th
977baa89f4 two flash colors 2025-01-01 16:27:57 +01:00
Tonton Th
e9ae829ab3 add and move stuff 2025-01-01 16:20:23 +01:00
Tonton Th
09792791f7 add stuff 2025-01-01 16:15:06 +01:00
Tonton Th
1f330dec14 add end sequence 2025-01-01 15:57:38 +01:00
Tonton Th
73bcc2a984 + séquence orbite 2025-01-01 15:05:03 +01:00
Tonton Th
d16132de30 commit video full-v0 2024-12-31 12:51:12 +01:00
Tonton Th
929d59b169 made Repere an object 2024-12-29 19:02:14 +01:00
Tonton Th
8cbae25479 bla 2024-12-29 19:01:30 +01:00
Tonton Th
8368fe54e8 better messages 2024-12-29 18:45:06 +01:00
Tonton Th
2fa9a9918a small changes 2024-12-29 18:43:29 +01:00
Tonton Th
2a59fba488 cosmetic 2024-12-29 18:42:52 +01:00
Tonton Th
090981d84c big refactoring: step 1 2024-12-29 04:56:10 +01:00
Tonton Th
adf59ceff6 two new points of view 2024-12-29 00:47:02 +01:00
Tonton Th
ef23006b9b bla 2024-12-28 14:45:01 +01:00
Tonton Th
b40680cb62 ajust context 2024-12-28 14:44:26 +01:00
Tonton Th
47b0d005c8 tweaking... 2024-12-28 14:42:12 +01:00
Tonton Th
7e869133a5 more work on the reactors 2024-12-27 18:10:53 +01:00
Tonton Th
8a3e889145 better random seed 2024-12-26 17:21:02 +01:00
Tonton Th
d299ad13a1 add random numbers generator 2024-12-23 20:09:00 +01:00
Tonton Th
89c78425ce fix critical bug 2024-12-23 20:08:25 +01:00
Tonton Th
00790763b1 add rotor to the reactors 2024-12-23 19:36:38 +01:00
Tonton Th
1fc0810d40 small encoder script 2024-12-23 19:35:42 +01:00
Tonton Th
d0ef5351d3 la deuxième vidéo... 2024-12-22 15:05:36 +01:00
Tonton Th
e51921d212 video release 2024-12-20 14:24:45 +01:00
Tonton Th
ff8ccfea55 ajustements... 2024-12-19 19:26:49 +01:00
Tonton Th
cda8b7d2cd plot rendering time - first try 2024-12-19 19:26:03 +01:00
Tonton Th
f5007558ed lower bitrate 2024-12-19 19:13:31 +01:00
Tonton Th
c4c2d4a307 add exclusions 2024-12-19 18:35:12 +01:00
Tonton Th
0eecce13be add dirs check 2024-12-17 16:52:23 +01:00
Tonton Th
7665329c25 little tweaks 2024-12-17 16:47:24 +01:00
Tonton Th
2c87793fb1 more work on the main subject 2024-12-17 14:36:26 +01:00
Tonton Th
7936e64a06 pimping 2024-12-16 14:18:21 +01:00
Tonton Th
6b16d3fb75 fine tuning 2024-12-16 13:58:04 +01:00
Tonton Th
6450765979 bla 2024-12-16 12:52:48 +01:00
Tonton Th
286e384f64 antenne radar, première version 2024-12-15 22:24:38 +01:00
Tonton Th
76e0955e19 more bla 2024-12-15 19:05:15 +01:00
58 changed files with 4885 additions and 227 deletions

17
.gitignore vendored
View File

@@ -1,8 +1,21 @@
frames/* frames/*
datas/*.xcf !frames/README.md
WS/timing datas/*.xcf
datas/*.ttf
datas/*.jpg
datas/*.webp
!datas/README.md
!datas/ega-16colors.png
WS/*timing
WS/log*
WS/*.done
WS/*.log
*.png *.png
*.gif *.gif
*.mp4
*.pov-state

View File

@@ -1,16 +1,96 @@
DIMS = -W1600 -H1200
POVOPT = +q9 +a -d POVOPT = +q9 +A0.05 -WT2 Declare=NbFrames=450 -d
POVDEP = contexte.inc elements.inc datas/hf.png
POVDEP = contexte.inc hexacone.inc hexabenz.inc \
all.inc hexastar.inc \
architecture.inc \
globals.inc hexawood.inc datas/hf.png \
dynamic.inc trident.inc groundbase.inc \
gadgets.inc xperiment.inc
PNG: essai.png scene.png # ! Define a default value for the POV clock
# ! You can overide with this command line :
# $ make CK=449 essai.png
CK=225
essai.png: essai.pov Makefile $(POVDEP) PNG: essai.png scene.png topview.png passage.png \
povray $(POVOPT) -W640 -H480 -i$< -o$@ orbite.png hexabenz.png escadrille.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
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)
povray $(POVOPT) $(DIMS) -K$(CK) -i$< -o$@
cutoff.png: cutoff.pov Makefile $(POVDEP)
povray $(POVOPT) $(DIMS) -K$(CK) -i$< -o$@
bubblecut.png: bubblecut.pov Makefile $(POVDEP)
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)
povray $(POVOPT) $(DIMS) +K$(CK) -i$< -o$@
hexacone.png: hexacone.pov Makefile $(POVDEP)
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)
povray $(POVOPT) $(DIMS) -K$(CK) -i$< -o$@
orbite.png: orbite.pov Makefile $(POVDEP)
povray $(POVOPT) $(DIMS) -K$(CK) -i$< -o$@
scene.png: scene.pov Makefile $(POVDEP) scene.png: scene.pov Makefile $(POVDEP)
povray $(POVOPT) -W1280 -H1024 +K166 -i$< -o$@ povray $(POVOPT) $(DIMS) +K$(CK) -i$< -o$@
escadrille.png: escadrille.pov Makefile $(POVDEP)
povray $(POVOPT) $(DIMS) +K$(CK) -i$< -o$@
remote.png: remote.pov Makefile $(POVDEP)
povray $(POVOPT) $(DIMS) +K$(CK) -i$< -o$@
survol.png: survol.pov Makefile $(POVDEP)
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$@

View File

@@ -1,8 +1,77 @@
# HexaCone # HexaCone
Projet POVray de l'hiver 2024/2025 : un objet hexaconal,7 Un projet POVray né pendant l'hiver 2024/2025, au fin fond du Gers :
prenant en compte les divergences d'opinion. Le concept un objet **hexaconal**
sera amélioré au fil du temps, et vous pourrez lire son prenant en compte les divergences d'opinion et les fluctuations
évolution dans de la température du salon.
[Mastodon](https://mastodon.tetaneutral.net/@tth) #hexacone. Le concept initial, assez inprécis, sera amélioré au fil du temps,
et vous pouvez
suivre son évolution par l'intermédiaire de
[Mastodon](https://mastodon.tetaneutral.net/@tth)
avec le *croisimot* `#hexacone`.
Quelques images sont disponibles sur mon serveur de
[cuisine](http://maison.tth.netlib.re/pov/hexacone.html),
avec même des liens vers les vidz.
## Prérequis
Avant toute chose, il faut avoir installé les logiciels
suivants : bash, awk, gnuplot, imagemagick, ffmpeg, et bien
entendu, [povray](https://povray.org/).
Une bonne maitrise des scripts shell (en Bash) sera un plus.
## Utilisation
Il y a deux choses que l'on peut raytracer :
les images fixes, qui sont traitées
par un classique [`Makefile`](./Makefile) et les séquences animées
produites par un [script shell](./mkloop.sh).
Avant toute chose, vous devrez vérifier la présence de plusieurs
répertoires :
D'un coté `./frames/<name>` pour stocker les images calculées
de chaque séquence et
./frames/Spool` pour l'assemblage de la vidéo intégrale :
```
frames/
├── essai
├── orbite
├── passage
├── escadrille
├── scene
├── Spool
└── topview
```
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
* La [mailing-list du tetalab](https://lists.tetalab.org/postorius/lists/tetalab.tetalab.org/) ;
* Par IRC, canal `#tetalab` ou `#povray` sur le réseau de [Libera](https://libera.chat/).
* Dans [Mastodon](https://mastodon.tetaneutral.net/@tth) et [Peertube](https://tube.interhacker.space/c/tth_channel/videos)
## La suite
Il reste bien des choses à faire : [TODO](TODO.md) list.
**Le gras c'est la vie** (proverbe local)

30
TODO.md Normal file
View File

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

View File

@@ -1,3 +1,3 @@
# Workspace
For intermediates files, and timing log.
workspace

31
all.inc Normal file
View File

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

36
approche.pov Normal file
View File

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

106
architecture.inc Normal file
View File

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

31
around.pov Normal file
View File

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

60
bubblecut.pov Normal file
View 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
View 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
View 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
}

View File

@@ -2,33 +2,408 @@
* nouveau projet Thu Dec 5 11:37:05 AM UTC 2024 * nouveau projet Thu Dec 5 11:37:05 AM UTC 2024
*/ */
// plane { y, 0 pigment { color DarkGreen } } /* voir aussi le fichier 'globals.inc' */
height_field { /* ======================================================= */
png "datas/hf.png" // #debug "+++++++++++++++++++++ debut contexte\n"
smooth /* ======================================================= */
texture {
pigment { DarkGreen } #macro Trois_Portiques (Dist)
finish { phong 0.333 } union {
object { Portique_A () }
object { Portique_A () scale <1, 1.2, 1> translate z*11 }
object { Portique_A () rotate y*11 translate z*22 }
// XXX scale 1.85
} }
translate <-.5, 0, -.5> #end // macro trois portiques
scale <18, 0.85, 18>
/* ======================================================= */
/*
* essai du 12 mars 2025
*/
#declare RedB_0_X = 19; #declare RedB_0_Z = 29;
#declare RedB_1_X = -24; #declare RedB_1_Z = 8;
// 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 }
#end // macro
/* ======================================================= */
#macro GyroPhare_mat ()
union {
cylinder { 0, y*H_gyro, R_gyro }
intersection {
sphere { 0, R_gyro scale <1, 1.717, 1> }
box { <-1, 0, -1>, <1, 1.94, 1> }
translate y*(H_gyro+H_gylampe+0.04)
}
#local R = rand(Rng1);
#if (R < 0.33) texture { T_Stone25 scale 1+rand(Rng1) }
#elseif (R < 0.66) texture { T_Stone15 scale 1+rand(Rng1) }
#else texture { T_Stone6 scale 1+rand(Rng1) }
#end
#undef R
}
#end // macro
#macro GyroPhare_lampe ()
union {
difference {
cylinder { 0, y*H_gylampe, R_gyro * 1.12345678 }
cylinder { y*0.01, y*(H_gylampe-0.01), R_gyro*0.97 }
#local WB = 0.017;
union {
box { <-1, 0.03, -WB>, <1, (H_gylampe-0.03), WB> }
box { <-WB, 0.03, -1>, <WB, (H_gylampe-0.03), 1> }
}
#undef WB
pigment { color Gray90 }
#local Ro = 0.5 + (1.0 * rand(Rng1));
#if (rand(Rng1) < 0.50)
#local Ro = -Ro;
#end
rotate y * Ro * clock
#undef Ro
}
light_source { y*0.10
rgb <0.8, 0.9, 0.999999999>
fade_distance 3.90
fade_power 1.55
}
}
#end // macro
#macro GyroPhare ()
union {
object { GyroPhare_mat () }
object { GyroPhare_lampe ()
translate y*(H_gyro+0.02) }
}
#end // macro
#macro Les_GyroPhares ()
union {
#local E = SzSol * 0.471;
#for (Idx, 0, 359, 60)
#local Ang = radians(Idx+9.33);
#local Dx = E * sin(Ang);
#local Dz = E * cos(Ang);
object { GyroPhare () translate <Dx, H_sol, Dz> }
#end
#undef E
}
#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
/* pourquoi ce truc est là ? */
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
}
}
/* ======================================================= */
#if (0) #declare HexaBalls = object
cylinder { 0, <1, 0, 0>, 0.008 pigment { color Red } } {
cylinder { 0, <0, 0, 1>, 0.008 pigment { color Blue } } #declare Rhxba = 0.30;
#declare R2hxba = Rhxba * 0.48;
merge {
sphere { 0, Rhxba }
#local E = Rhxba * 1.260;
sphere { 0, R2hxba translate <-E, 0, 0> }
sphere { 0, R2hxba translate < E, 0, 0> }
sphere { 0, R2hxba translate < 0, -E, 0> }
sphere { 0, R2hxba translate < 0, E, 0> }
sphere { 0, R2hxba translate < 0, 0, -E> }
sphere { 0, R2hxba translate < 0, 0, E> }
#undef E
}
}
#declare Les_HexaBalls = object
{
union {
object { HexaBalls
texture { Lightning1 scale 0.44 }
rotate <clock/3, clock/4, clock/9>
translate <2, 0.57+Cos_010(NormClock), 4>
}
object { HexaBalls
texture { Lightning2 scale 0.56 }
rotate <-clock, clock*0.33333, clock*3>
translate <4, 0.61+Cos_010(NormClock), -3>
}
}
}
/* ======================================================= */
/*
* 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 #end
#declare Underground = object
{
difference {
// plane { y, 0 }
#local Big = 300;
box { <-Big, -0.21, -Big>, < Big, 0.0000, Big> }
#undef Big
#for (Foo, 0, 5)
cylinder { -y*5, y*5, R_hole translate UnderHoles[Foo] }
#end
texture { Ground_Texture }
}
}
/* 10 fev 2026, on place des bordures autour des trous */
/* voir aussi -> xperiment.inc */
#declare Les_Bordures = object
{
union {
#for (foo, 0, 5)
// #local YHB = (0.08 + (0.5*rand(Rng1)) * y);
#if (rand(Rng1) < 0.5)
object { HoleBorder_A (1.04) translate UnderHoles[foo] }
#else
object { HoleBorder_B (1.06) translate UnderHoles[foo] }
#end // if
#end // for
}
}
/* ======================================================= */
/*
* nouvel éclairage du 10 février 2025
*/
#declare Quad_lampe = object
{
light_source { light_source {
<2, 2.50, 3> color White 0
color White
fade_distance SzSol * 0.40
fade_power 1.25
}
}
#declare QuadriLight = object
{
#local T = E_QuadriLight;
#local H = H_QuadriLight;
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 -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
{
union {
#if (1)
light_source {
<2.3, 5.50, 2.86> color Gray70
spotlight spotlight
radius 12 radius 19 falloff 10 tightness 8
falloff 20
tightness 10
point_at <0, 0.95, 0.22222222> point_at <0, 0.95, 0.22222222>
} }
#end
// light_source { <-6, 7, -4>, rgb <0.81, 0.65, 0.40> } #if (1)
light_source {
<-5, 5.60, 18>
#if ( (clock > 290) & (clock<344) )
#local Couleur = rgb <0.20, 0.20, 0.90>;
#else
#local Couleur = rgb <0.80, 0.80, 0.70>;
#end
color Couleur
spotlight
radius 12 falloff 10 tightness 5
point_at <0, 0.95, -0.22>
}
#end
}
}
/* ======================================================= */
/*
* why a skysphere can't be an object ?
*/
sky_sphere {
pigment {
gradient y
color_map {
[ 0.2 color Gray20 ]
[ 0.4 color rgb <.5, .45, .43> ]
[ 0.7 color Gray50 ]
[ 0.9 color rgb <.5, .5, .47> ]
[ 1.0 color Gray20 ]
}
turbulence 3.14159 + 0.84 * Cos_010(NormClock)
scale 1.600
// translate -1
}
#local Kem = 0.09;
emission rgb <Kem, Kem, Kem>
}
/* ======================================================= */
/*
* Et on rassemble tous les éléments...
*/
#declare Le_Decor = object
{
union {
object { Underground }
object { Les_Bordures }
#include "groundbase.inc"
object { La_GroundBase }
object { RoundBase_0 (T_Beton_1)
translate <RedB_0_X, 0, RedB_0_Z> }
object { RoundBase_0 (T_Beton_2)
translate <RedB_1_X, 0, RedB_1_Z> }
object { RoundBase_0 (T_Planete_B)
translate <RedB_2_X, 0, RedB_2_Z> }
object { RoundBase_0 (T_Planete_A)
translate <RedB_3_X, 0, RedB_3_Z> }
// object { Les_Lumieres }
object { QuadriLight }
object { Les_GyroPhares () }
object { Les_HexaPoles }
object { 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> }
}
}
/* ------------------------------------------------------------ */

51
cutoff.pov Normal file
View File

@@ -0,0 +1,51 @@
/*
* 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 = 0;
#include "all.inc"
// =======================================================
#declare POS_Cutoff = <30.33, 0, -11>;
#local TY = 1.5;
#declare Kbox = (2.03*NormClock);
difference {
object { HexaCone () rotate <9-(11*NormClock), 6, -7> }
box { -1, 1 translate z*Kbox }
translate y*TY + POS_Cutoff
}
/* this two objects are for debugging */
// 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 }
// =======================================================
#local CamX = POS_Cutoff.x + 3.5 + (3.14*Cos_01(NormClock));
#local CamY = 2.01 + (1.14*sqrt(NormClock));
#local CamZ = POS_Cutoff.z + 4.30 - (1.02*NormClock);
camera {
location <CamX, CamY, CamZ>
look_at <0, 1.5, 0> + POS_Cutoff
right <image_width/image_height, 0, 0>
angle 40 - 12*Cos_01(NormClock)
}

View File

@@ -1,4 +1,14 @@
# statics datas
This directory is the home of things like :
statics datas, like height-fields files... - `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 :
![16 colors](ega-16colors.png), used by this
[script](tools/build-ega-mp4.sh).

BIN
datas/ega-16colors.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 220 B

178
dynamic.inc Normal file
View File

@@ -0,0 +1,178 @@
/*
*/
// =======================================================
// rajout d'une patrouille en vol
// 2 janvier 2026
object {
#local CK = (clock / 230) - 0.75; // en radians
#local RD = 63; // rayon deplacement
#local Xp = RD * sin(CK);
#local Zp = RD * cos(CK);
#declare Loc_Patrouille = <Xp+10, 70+(11*NormClock), Zp>;
object { Patrouille }
rotate y*degrees(CK)
translate Loc_Patrouille
}
// =======================================================
// on va tenter de placer quelques trucs
// qui bougent sur le rail circulaire
#for (foo, 0, 5)
#local CK = (NormClock+(foo*0.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 RX = -9+(NormClock*11);
#declare RY = 122 * (exp(NormClock) - 1.0);
#declare RZ = 33 * cos(NormClock*7.65);
object { HexaCone ()
rotate <RX, RY, RZ>
translate HC_P
}
#declare HB_A = <-5.00, 10.0, 6.33>;
#declare HB_B = < 0.03, 2.32, -0.37>;
#declare HB_P = Interpolate(HB_A, HB_B, Cos_01(NormClock));
#declare RX = Cos_01(NormClock);
#declare RY = -75 * (exp(NormClock*1.8) - 1.0);
#declare RZ = abs(33 * sin(NormClock*7.65));
object { HexaBenz ()
rotate <RX, RY, RZ> translate HB_P }
/*
* passage d'un hexawood près de la base
*/
#declare A = <-25, 0.4, (SzSol/2)+5>;
#declare B = < 29, 0.5, (SzSol/2)+2>;
#declare P = Interpolate(A, B, NormClock);
#local K = NormClock*31;
#local R = 16.64 * cos(K);
#local H = 0.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"
/* ----------------------------------- */

View File

@@ -1,87 +0,0 @@
/*
* nouveau projet Thu Dec 5 11:37:05 AM UTC 2024
*/
#declare HexaCone_shape = object
{
#local RA = 0.125;
#local RB = 0.001;
union {
cone { 0, RA, <-1, 0, 0>, RB }
cone { 0, RA, < 1, 0, 0>, RB }
cone { 0, RA, < 0, 0, 1>, RB }
cone { 0, RA, < 0, 0, -1>, RB }
cone { 0, RA, < 0, 1, 0>, RB }
cone { 0, RA, < 0, -1, 0>, RB }
}
}
#declare HexaCone_body = object
{
union {
difference {
object { HexaCone_shape }
object { HexaCone_shape scale 0.99 }
sphere {0, 0.24 }
cylinder { <-1, 0, 0.55>, <1, 0, 0.55>,
RA*0.40 }
}
difference {
sphere {0, 0.20 }
sphere {0, 0.18 }
cylinder {-x, x, 0.10 }
cylinder {-y, y, 0.10 }
cylinder {-z, z, 0.10 }
}
light_source { 0, rgb <0.99, 0.05, 0.05> }
}
texture { New_Penny }
}
/*
*
*/
#declare HexaCone_radar = object
{
union {
#for (foo, 0, 360, 60)
#local RR = 0.16;
#local PX = RR * sin(radians(foo));
#local PZ = RR * cos(radians(foo));
sphere { 0, 0.008
scale <1, 1.37, 1>
translate <PX, 0, PZ>
}
cylinder { -0.11*y, <PX, 0, PZ>, 0.003 }
#end
}
texture { PinkAlabaster scale 8 }
}
#declare HexaCone_head = object
{
#local DTa = 0.278;
#local DTb = 0.030;
merge {
difference {
torus { DTa, DTb }
#local TB = 0.50;
box { <-TB, -TB, TB>, <TB, TB, 0> }
}
sphere { 0, DTb*1.55 translate -DTa*x }
sphere { 0, DTb*1.55 translate DTa*x }
}
texture { Orange_Glass }
}
#declare HexaCone = object
{
union {
object { HexaCone_body }
#local T = 0.55;
object { HexaCone_head translate <0, 0, T+DTa> }
object { HexaCone_radar translate <0, T+0.07, 0> }
}
rotate <-7, 0, -9>
}

67
escadrille.pov Normal file
View File

@@ -0,0 +1,67 @@
/*
* H E X A C O N E
*
* 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"
// =======================================================
#local Y_mean = 0;
#local Y_count = 0;
#for (idX, -3, 3)
#for (idZ, -3, 3)
#local posX = (idX * 4.76) + (rand(Rng1)-0.5);
#local posY = 3.2 + (NormClock * 17 * (rand(Rng1)+0.95));
#local posZ = (idZ * 4.44) ;
#local Rx = (rand(Rng1) - 0.5) * 12;
#local Ry = (rand(Rng1) - 0.5) * (24+NormClock);
#local Rz = (rand(Rng1) - 0.5) * 11;
// #debug concat("X ", str(posX,7,3), " Z ", str(posZ,7,3), "\n")
// #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> }
#elseif (R < 0.60)
object { HexaStar rotate y*90 rotate <Rx, Ry, Rz>
translate <posX, posY, posZ> }
#else
object { HexaBenz () rotate <Rx, Ry, Rz>
translate <posX, posY, posZ> }
#end
#end // if position...
#end // loop idX
#end // loop idZ
// =======================================================
object { Le_Decor }
#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 LatY = (Y_mean / Y_count) - (0.5*NormClock);
// #debug concat("escadrille: Lat Y ", str(LatY, 7, 3),"\n")
camera {
location <CamX, CamY, CamZ>
look_at <0.0, LatY, 0>
right <image_width/image_height, 0, 0>
angle 54 - (31 * NormClock)
}

402
essai.pov
View File

@@ -1,22 +1,402 @@
/* /*
* nouveau projet Thu Dec 5 11:37:05 AM UTC 2024 * 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; #version 3.7;
global_settings { // #declare DEBUG_LEVEL = 1; // un nouveau test ?
assumed_gamma 1.0
#include "globals.inc"
#declare NO_DYNAMIC = 1;
#include "all.inc"
/*
* il faut faire le tri ici !
-* __________________________
*/
// =======================================================
// nouveau du 10 février 2026
#macro Anemone_A (E, H)
union {
#for (foo, 0, 5)
#local A = radians(foo*60);
#local DX = E * sin(A);
#local DZ = E * cos(A);
cone { y*(H/8), 0.20, <DX, H, DZ>, 0.001
#local Rv = 0.7 + (0.2*rand(Rng1));
#local Gv = 0.6 + (0.2*rand(Rng1));
#local Bv = 0.6 + (0.3*rand(Rng1));
texture {
pigment { rgb <Rv, Gv, Bv> }
finish { phong 0.51 reflection 0.05 }
}
}
sphere { 0, 0.45 texture { T_WIP_color } }
#end // for
}
#end // macro
// =======================================================
/*
* 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
} }
#include "colors.inc" #ifdef (DEBUG_LEVEL)
#include "textures.inc" #fclose Log
#include "elements.inc" #end // debug level
#include "contexte.inc"
object { HexaCone_radar translate y*0.6 } #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
// ------------------------------------
// =======================================================
#declare Des_Choses = object
{
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 }
}
}
// =======================================================
#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 CamY = CamY * K * 0.41;
#local CamZ = CamZ * K;
camera { camera {
location <-3, 2, 1> orthographic
look_at <0, 0.6, 0> location <CamX, CamY, CamZ>
angle 10 look_at <0, 1.5, 0>
right <image_width/image_height, 0, 0>
angle AngleCam
} }

View File

@@ -1,25 +0,0 @@
set -eu
ff_encodage()
{
ffmpeg -nostdin \
-y -r 30 -f image2 -i frames/%05d.png \
-metadata artist='--[ tTh ]--' \
-metadata title='-- HexaCone --' \
-c:v libx264 \
-pix_fmt yuv420p \
-tune film \
wip.mp4
}
mp_encodage()
{
mencoder 'mf://frames/*.png' \
-mf \
fps=30 \
-ovc lavc \
-lavcopts vcodec=mpeg4 \
-o output.avi
}

19
frames/README.md Normal file
View File

@@ -0,0 +1,19 @@
# Le silo des frames
Avant tout, il faut créer ces répertoires :
```
frames/
+--- essai
+--- orbite
+--- passage
+--- scene
+--- scene
+--- orbite
+--- survol
+--- escadrille
+--- topview
+--- Spool
```

331
gadgets.inc Normal file
View File

@@ -0,0 +1,331 @@
/*
* H E X A C O N E - G A D G E T S
* nouveau projet du Thu Dec 5 11:37:05 AM UTC 2024
*/
/* ======================================================= */
/* moved here from 'contexte.inc' */
#declare Repere = object
{
union {
#local R = 0.015;
#local R2 = R * 2.33;
#local LC = 1.15;
merge {
cylinder { 0, <1, 0, 0>, R }
cone { <1, 0, 0>, R2, <LC, 0, 0>, 0 }
texture { R_Texture }
}
merge {
cylinder { 0, <0, 1, 0>, R }
cone { <0, 1, 0>, R2, <0, LC, 0>, 0 }
texture { G_Texture }
}
merge {
cylinder { 0, <0, 0, 1>, R }
cone { <0, 0, 1>, R2, <0, 0, LC>, 0 }
texture { B_Texture }
}
}
}
#declare Fleche = object
{
union {
cylinder { -5*x, 5*x, 0.09 }
cone { 5*x, 0.27, 6.66*x, 0.00007 }
}
texture { LeGris }
}
// ------------------------------------------------------ ##
#declare R_C = 0.335;
/* ce truc mérite un nom plus parlant ! */
#macro Chose_le_pied ()
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 H
#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> }
}
}
// =======================================================
/*
* first written macro for testing the generation of
* differente instances of the same shape.
*/
#macro Bubble ()
sphere {
0, 0.070 + 0.056*rand(Rng1)
#local R = rand(Rng1);
#if ( R < 0.25 ) texture { Ruby_Glass }
#elseif ( R < 0.50 ) texture { Orange_Glass }
#elseif ( R < 0.75 ) texture { Shadow_Clouds }
#else texture { Gold_Nugget }
#end
#undef R
scale <1.414, 1.000, 1.414>
}
#end
#macro Un_Machin ()
union {
#for (Y, 1, 8, 1)
object { Bubble() translate y*Y*0.115 }
#end
}
#end
// ------------------------------------------------------ ##
#declare Les_Machins = object
{
union {
#local Rk = 3.60 + NormClock;
#for (foo, 0, 359, 45)
#local Xpos = Rk * sin(radians(foo));
#local Zpos = Rk * cos(radians(foo));
object { Un_Machin () translate <Xpos, 0.22, Zpos> }
#end
#undef Rk
}
}
// =======================================================

3
gif89a/README.md Normal file
View File

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

287
globals.inc Normal file
View File

@@ -0,0 +1,287 @@
global_settings {
assumed_gamma 1.0
ambient_light rgb <0.48, 0.49, 0.48>
max_trace_level 15
}
#include "colors.inc"
#include "metals.inc"
#include "textures.inc"
#include "stones.inc"
#include "woods.inc"
#declare Rng1 = seed(1221);
#declare foo = rand(Rng1);
#declare Rng2 = seed(now*24*60*60);
#declare bar = rand(Rng2);
#declare NormClock = clock / (NbFrames - 1);
/* ------------------------------------------------------------ */
/*
* Some constants...
*/
#declare SzSol = 36;
#declare H_sol = 0.000; // c'est quoi exactement ?
#declare SzBase = 2.97;
#declare H_base = 0.23;
#declare R_basecone = 0.117;
#declare H_cone = 0.97;
#declare R_gyro = 0.14;
#declare H_gyro = 1.80;
#declare H_gylampe = 0.25;
#declare H_QuadriLight = 37;
#declare E_QuadriLight = SzSol * 1.35;
#declare R_circular = (SzSol * 1.60);
#declare R_hole = 3.1; // holes in the background
/* ------------------------------------------------------------ */
/*
* Some textures...
*/
#declare LeGris = texture
{
/* moi j'dis qu'il est temps de définir un "gris de base" */
pigment { color Gray70 }
finish { phong 0.33 ambient 0.33 }
}
#declare T_WIP_color = texture
{
#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
{
pigment { color Red }
finish { ambient 1 specular 0.80 }
}
#declare T_Planete_A = texture
{
pigment { color rgb <0.20, 0.30, 0.10> }
normal { dents 0.28 scale 0.5}
finish { phong 0.70 reflection 0.05 }
}
#declare T_Planete_B = texture
{
pigment { rgb <0.42, 0.50, 0.70> }
normal { dents 0.14 scale 0.5}
finish { metallic 0.50 reflection 0.33 }
}
/* ------------------------------------------------------------ */
/*
* deux textures pour faire des batiments
*/
#declare T_Beton_1 = texture
{
pigment { color <0.9, 0.8, 0.7> }
normal { dents 1.75 scale 0.3 }
finish { roughness 1.00 }
}
#declare T_Beton_2 = texture
{
pigment { color <0.7, 0.6, 0.4> }
normal { dents 0.35 scale 3 }
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
*/
#macro Cos_01( X )
(0.5-0.5*cos( 3.141592654 * X))
#end
#macro Cos_010( X )
(0.5-0.5*cos( 2 * 3.141592654 * X))
#end
/* Interpolate */
#macro Interpolate(A, B, pos)
#local resultat = ( (B-A) * pos) +A;
resultat
#end
/* ============================================================ */
#debug "\n GLOBALS INCLUDED\n"

156
groundbase.inc Normal file
View 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 ?
}
/* ======================================================= */

211
hexabenz.inc Normal file
View File

@@ -0,0 +1,211 @@
/*
* H E X A B E N Z
*/
// =======================================================
#macro Benz_Cone_Base () // = object
// {
union {
#local RA = R_basecone;
#local RB = 0.001;
difference {
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
// ------------------------------------------------------
/* 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
// {
union {
#for (foo, 0, 360, 60)
#local E = 0.31;
#local Tx = E * sin(radians(foo));
#local Ty = E * cos(radians(foo));
object {
Benz_Cone_Base ()
#local R = rand(Rng1);
#if ( R < 0.3333 )
texture { T_Silver_2C scale 11.50 }
#elseif ( R < 0.6666 )
texture { T_Brass_2C scale 13.50 }
#else
texture { T_Brass_4A scale 13.50 }
#end
rotate -z*foo
translate <Tx, Ty, 0>
}
#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
// ------------------------------------------------------
#declare R_Tube = 0.17;
#local L_Tube = 0.54;
#macro Benz_Tubules ()
merge {
#local E = R_Tube * 0.75;
#local R = 0.009;
#for (foo, 0, 360, 30)
#local Tx = E * sin(radians(foo));
#local Ty = E * cos(radians(foo));
#local Dza = z * 0.27;
#local Dzb = z * 0.97;
cylinder { -Dza, Dzb, R translate <Tx, Ty, 0> }
sphere { -Dza, R*1.8 translate <Tx, Ty, 0> }
sphere { Dzb, R*1.8 translate <Tx, Ty, 0> }
#end
#local R = rand(Rng1);
#if ( R < 0.320) texture { Orange_Glass }
#elseif (R < 0.64) texture { Ruby_Glass }
#else texture { Yellow_Glass }
#end
}
#end
#macro Benz_Fuseau ()
difference {
sphere { 0, R_Tube*0.39 }
sphere { 0, R_Tube*0.37 }
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>
#if ( rand(Rng1) < 0.420) texture { Shadow_Clouds scale 0.56 }
#else texture { Flashy }
#end
#end // end macro
#declare Benz_Fuseau_Flash = object
{
union {
object { Benz_Fuseau () }
light_source { 0,
rgb <rand(Rng2), rand(Rng2), rand(Rng2)>
fade_distance 0.96
fade_power 1.95
}
}
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
{
#local E_tube = 0.02;
#local R_int = R_Tube - E_tube;
difference {
union {
cylinder { z*L_Tube*1.6, -z*L_Tube, R_Tube }
/* les deux bouts du cylindre creux */
#local R2 = (R_Tube + R_int) / 2;
torus { R2, E_tube scale <1, 5, 1>
rotate x*90 translate z*L_Tube*1.6 }
torus { R2, E_tube scale <1, 5, 1>
rotate x*90 translate -z*L_Tube }
/* cette sphere devrait devenir
un vrai cockpit ? */
object { Forme_Cockpit
translate y*R_Tube*0.97}
}
cylinder { z*4, -z*4, R_int }
}
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 ()
// #declare Benz_Tube = object
// {
union {
object { Benz_Tubules () }
object { Benz_Fuseau_Flash translate z*0.35 }
object { Benz_Cylindre }
/* XXX */
object { Benz_Antenne ()
translate <0, -0.37, 0.76>
rotate z*45 }
}
// }
#end
// ------------------------------------------------------
#macro HexaBenz ()
// #declare HexaBenz = object
// {
union {
#local Rk = (rand(Rng1)-0.54) * 1312;
object { Benz_Cones () rotate z*NormClock*Rk}
object { Benz_Tube () }
}
// }
#end

29
hexabenz.pov Normal file
View File

@@ -0,0 +1,29 @@
/*
* H E X A C O N E - H E X A B E N Z
*/
#version 3.7;
#include "globals.inc"
#declare NO_DYNAMIC = 0;
#include "all.inc"
// =======================================================
object { Le_Decor }
#declare Loc_cam = <0.63, 2, 2*NormClock> + (Pos_RedB_0 * 1.32);
#declare Lat_Y = 1.21 + 0.16*NormClock;
camera {
location Loc_cam
look_at Pos_RedB_0 + <0, Lat_Y, 0>
right <image_width/image_height, 0, 0>
// focal_point <0.37, 0.0, 0>
// aperture 0.046
// blur_samples 30
angle 40 - 15 * Cos_01(NormClock)
}

289
hexacone.inc Normal file
View File

@@ -0,0 +1,289 @@
/*
* nouveau projet Thu Dec 5 11:37:05 AM UTC 2024
*/
#declare RA = R_basecone;
// #declare RB = 0.001;
#declare HexaCone_shape = object
{
union {
cone { 0, RA, <-1, 0, 0>, 0.0001 }
cone { 0, RA, < 1, 0, 0>, 0.0001 }
cone { 0, RA, < 0, 0, 1>, 0.0001 }
cone { 0, RA, < 0, 0, -1>, 0.0001 }
cone { 0, RA, < 0, 1, 0>, 0.0001 }
cone { 0, RA, < 0, -1, 0>, 0.0001 }
}
}
#macro HexaCone_Body ()
// #declare HexaCone_body = object
// {
union {
difference {
object { HexaCone_shape }
object { HexaCone_shape scale 0.98 }
sphere {0, 0.24 }
cylinder { <-1, 0, 0.55>, <1, 0, 0.55>,
RA*0.40 }
}
difference {
sphere {0, 0.21 }
sphere {0, 0.19 }
cylinder {-x, x, 0.11 }
cylinder {-y, y, 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/
#local kR = 0.065;
#local xR = (rand(Rng2)-0.5000) * kR;
#local yR = (rand(Rng2)-0.5000) * kR;
#local zR = (rand(Rng2)-0.5000) * kR;
#local Value = sin( (NormClock * 26.536) +
(3.14*rand(Rng1)) );
#if (Value < 0)
#local Couleur = rgb <abs(Value), 0, 0>;
#else
#local Couleur = rgb <0, abs(Value), 0>;
#end
#local Couleur = Couleur * rand(Rng2);
light_source {
<xR, yR, xR>, Couleur
fade_distance 0.99
fade_power 1.58
}
}
#if (rand(Rng1) < 0.30)
texture { New_Penny }
#else
texture { GoldDark }
#end
// }
#end // macro
// ---------------------------------------------------------
/*
*
*/
#local Branche_radar = object
{
#local D1 = 0.08;
#local D2 = 0.0045;
merge {
cone { 0, D2, 0.08*y, 0.00007 }
sphere { 0, D2*2.3 scale <1, 1.77, 1> }
intersection {
torus { D1, D2 }
box { <2, -2, 2>, <0, 2, 0> }
rotate x*90
translate -D1*x
}
}
}
#declare HexaCone_radar_A = object
{
union {
#for (foo, 0, 360, 60)
#local RR = 0.12;
#local PX = RR * sin(radians(foo));
#local PZ = RR * cos(radians(foo));
object { Branche_radar
rotate y*(foo-90)
translate <PX, 0, PZ>
}
#end
torus { 0.08, 0.0034 translate -0.08*y }
}
texture { Soft_Silver scale 6.50 }
}
#declare HexaCone_radar_B = object
{
union {
#for (foo, 0, 360, 60)
#local RR = 0.12;
#local PX = RR * sin(radians(foo));
#local PZ = RR * cos(radians(foo));
object { Branche_radar scale 2
rotate y*(foo-90)
translate <PX, 0, PZ>
}
#local R2 = 0.11;
#end
torus { R2, 0.0039 translate -0.08*y }
}
texture { GoldDark scale 6.50 }
}
/* ---------------------------------------------------------
* new Mon Dec 16 12:44:44 PM UTC 2024
*/
#local Une_derive = object
{
difference {
merge {
sphere { 0, 0.0141 scale <1, 1, 4.70>
translate <0, 0.26, -0.17> }
cone { <0, -0.1, 0>, 0.114, <0, 0.26, -0.17>, 0.0096
scale <0.15, 1, 1> }
}
box { <-1, -1, -1>, <1, 0, 1> }
}
texture { Soft_Silver scale 6.0 }
}
#declare HexaCone_derives = object
{
union {
object { Une_derive }
object { Une_derive rotate 120*z }
object { Une_derive rotate -120*z }
}
}
// ---------------------------------------------------------
#declare DTa = 0.278;
#declare DTb = 0.030;
// XXX #declare HexaCone_head = object
// XXX {
#macro HexaCone_head ()
merge {
difference {
torus { DTa, DTb }
#local TB = 0.60;
box { <-TB, -TB, TB>, <TB, TB, 0> }
}
sphere { 0, DTb*1.65 translate -DTa*x }
sphere { 0, DTb*1.65 translate DTa*x }
#local R = rand(Rng1);
#if (R < 0.4)
texture { Orange_Glass }
#elseif (R < 0.8)
texture { Dark_Green_Glass }
#else
texture { Flashy scale 2 }
#end
}
#end // macro
// XXX }
/* ------------------------------------------
* new Sat Dec 21 11:17:36 PM UTC 2024
*/
#declare DXail = 0.0007;
#declare DYail = 0.0039;
#declare DZail = 0.031;
#declare Une_Ailettte = object
{
box { <-DXail, -DYail, -DZail> , <DXail, DYail, 0> }
}
#macro Le_rotor ()
union {
#local Rrot = 0.0034;
#local Lrot = 0.13;
sphere { -x*Lrot, Rrot }
cylinder { <-Lrot, 0, 0>, <Lrot, 0, 0>, Rrot }
sphere { x*Lrot, Rrot }
#for (foo, -9, 9)
object { Une_Ailettte
translate -0.004*z
rotate z*21
rotate (foo*35)*x
translate (foo*0.013)*x }
#end
texture {
#if ( rand(Rng1) < 0.333 )
pigment { color Orange }
#else
pigment { color Magenta }
#end
// finish { emission 0.7 }
finish { ambient 0.7 phong 0.5 brilliance 0.9 }
}
}
#end
/* ------------------------------------------------------
*
*/
#local Rtuy = 0.06;
#local Ltuy = 0.09;
#local Etuy = 0.01; // epaisseur des parois
#declare Tuyere = object
{
#local dX = Ltuy;
merge {
#local R2 = Rtuy - (Etuy/2.0);
intersection {
torus { R2, Etuy/2 scale <1, 18, 1> }
box { <-1, 0, -1>, <1, 1, 1> }
rotate 90*z translate -dX*x
}
torus { R2, Etuy/2 scale <1, 0.75, 1> rotate 90*z translate dX*x }
#if (1)
#difference {
cylinder { <-dX, 0, 0>, <dX, 0, 0>, Rtuy }
cylinder { <-(dX+1), 0, 0>, <dX+2, 0, 0>, Rtuy-Etuy }
}
#end
cylinder { y*Rtuy, y*(Rtuy+0.08), 0.011 scale <2.95, 1, 1> }
sphere { 0, 0.017 scale <4.8, 1, 0.717>
translate z*(Rtuy+Etuy/3) }
}
texture { T_Brass_1C }
}
#declare Reacteur = object
{
union {
object { Tuyere }
object { Le_rotor () rotate x*(clock*5.8) translate -0.06*x }
}
}
#declare Les_Reacteurs = object
{
union {
#local E = 0.59;
object { Reacteur scale <1, 1, -1> translate -E*z }
object { Reacteur translate E*z }
}
rotate -y*90
}
// ###########################################################""
#macro HexaCone ()
// #declare HexaCone = object
// {
union {
object { HexaCone_Body () }
#local T = 0.55;
object { HexaCone_head () translate <0, 0, T+DTa> }
#if ( (rand(Rng1) > 0.47) )
object { HexaCone_radar_A translate <0, T+0.18, 0> }
#else
object { HexaCone_radar_B translate <0, T+0.18, 0> }
#end
object { HexaCone_derives translate <0, 0, -0.67> }
object { Les_Reacteurs translate -0.18*y }
}
// }
#end // macro

31
hexacone.pov Normal file
View File

@@ -0,0 +1,31 @@
/*
* H E X A C O N E - H E X A C O N E
*/
#version 3.7;
#include "globals.inc"
// #declare DEBUG_LEVEL = 1;
#declare NO_DYNAMIC = 0;
#include "all.inc"
object { Le_Decor }
// =======================================================
// object { Repere scale 2 }
#declare Loc_cam = <2, 2.7-NormClock, 1> + (Pos_RedB_1 * 1.308);
camera {
location Loc_cam
#local H = 1.16 + (NormClock*0.39);
look_at Pos_RedB_1 + <0.02, H, 0>
right <image_width/image_height, 0, 0>
// focal_point <0.37, 0.90, 0>
// aperture 0.046
// blur_samples 30
angle 59 - 25 * Cos_01(NormClock)
}

109
hexastar.inc Normal file
View File

@@ -0,0 +1,109 @@
/*
* H E X A S T A R
*
* nouveau du dernier jour de 2025, courage paur 2026 <3
*/
/* ------------------------------------------------------------ */
/* ============================================================ */
/* Un des six éléments de base */
#declare HS_radius = 0.409;
#macro HS_element_pointe ()
union {
#local R_a = HS_radius * 0.369;
#local Small = 0.00001;
cone { <-1.34, 0, 0>, Small, <-0.6, 0, 0>, R_a }
sphere { 0, R_a scale <0.42, 1, 1> translate <-0.6, 0, 0> }
#local R = rand(Rng1);
#if ( R < 0.45 ) texture { GoldDark }
#elseif ( R < 0.60 ) texture { Aluminum }
#else texture { T_Gold_3C }
#end
}
#end // macro
/* ------------------------------------------------------------ */
/*
* element central --- À REFAIRE EN MACRO !
*/
#macro HS_element_central ()
union {
#local HSCR = HS_radius*0.70;
torus { HSCR, 0.0180 }
// le noyau central
#local L = 0.0028;
#local R = 0.0577;
cylinder { -y*L, y*L, R }
sphere { 0, R translate y*L }
sphere { 0, R scale <1, 0.20, 1>translate -y*L }
// les ailettes intérieures
#for (foo, 0, 5)
cylinder { 0, x*HSCR, R*0.15 rotate y*foo*60 }
#end
// traitement final
scale <1, 23.10, 1>
rotate z*90
#local R = rand(Rng1);
#if ( R < 0.17 ) texture { Y_Texture }
#elseif ( R < 0.66 ) texture { T_Gold_1A }
#else texture { Aluminum }
#end
}
#end
/* ------------------------------------------------------------ */
/* nouveau 14 janvier 2026 */
#macro HS_element_queue ()
union {
#local R_a = HS_radius * 0.228;
#local Small = 0.001;
cone { < 0.44, 0, 0>, Small, < 0.88, 0, 0>, R_a }
sphere { 0, R_a scale <0.7, 1, 1> translate <0.88, 0, 0> }
#local R = rand(Rng1);
#if ( R < 0.35 ) texture { Rust scale 3.33
rotate y*(rand(Rng1)*273) }
#elseif ( R < 0.50 ) texture { T_Gold_5A }
#elseif ( R < 0.80 ) texture { Aluminum }
#else texture { T_Gold_3C }
#end
}
#end // macro
/* ------------------------------------------------------------ */
/* nouveau XXX janvier 2026 */
// UNE ANTENNE ?
/* ============================================================ */
/* On regroupe les N*six élements */
#declare HS_les_elements = object
{
union {
#for (Foo, 0, 360, 60)
#local E = HS_radius;
#local Ty = E * cos(radians(Foo));
#local Tz = E * sin(radians(Foo));
union {
object { HS_element_pointe ()
translate <0, Ty*1.16, Tz*1.16> }
object { HS_element_queue ()
translate <0, Ty*0.80, Tz> }
}
#end // end for
object { HS_element_central () }
// object { Repere }
}
}
/* ============================================================ */
/* Et voici l'engin final */
#declare HexaStar = object
{
object { HS_les_elements }
}
// #debug "++++++++++ hexastar loaded !\n"
/* ============================================================ */

33
hexastar.pov Normal file
View File

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

167
hexawood.inc Normal file
View File

@@ -0,0 +1,167 @@
/*
* H E X A W O O D
*/
// =======================================================
#declare Hc_ep = 0.42; // epaisseur chassis
#declare Hc_rad = 0.70; // rayon du chassis
#declare Hc_elo = 1.85; // elongation sur x
// -------------------------------------------------------
#macro HW_Un_Cone ()
merge {
#local RA = R_basecone * 0.92;
cone { 0, RA, y*0.91, 0.000001 }
sphere { 0, RA }
#undef RA
}
#end
/* ------------------------------------------------------------ */
#macro HW_Cones ()
union {
#for (foo, 0, 360, 60)
#local E = Hc_rad * 0.85;
#local Tx = Hc_elo * E * sin(radians(foo));
#local Tz = E * cos(radians(foo));
object {
HW_Un_Cone ()
#if ( rand(Rng1) < 0.5 )
texture { T_Wood32 rotate 37 scale 1.30 }
#else
texture { T_Wood23 rotate x*87 scale 1.33 }
#end
// rotate -z*foo
translate <Tx, Hc_ep - 0.22, Tz>
}
#end // end for
}
#end
/* ------------------------------------------------------------ */
#macro HW_Chassis ()
difference {
#local El = Hc_elo;
merge {
torus { Hc_rad, 0.20 translate y*0.20 }
cylinder { 0, y*0.40, Hc_rad }
scale <El, 0.5, 1>
}
/* trou pour mettre une lampe */
cylinder { -1*y, 0.12*y, 0.08 }
torus { Hc_rad*0.30, 0.18 scale <1, 1.45, 1>
translate y*0.39 }
#for (foo, 0, 360, 60)
#local E = Hc_rad * 0.85;
#local Tx = El * E * sin(radians(foo));
#local Tz = E * cos(radians(foo));
sphere { 0, 0.17 translate <Tx, 0.20, Tz> }
#local E = Hc_rad * 1.14;
#local Tx = El * E * sin(radians(foo+30));
#local Tz = E * cos(radians(foo+30));
cylinder { -y, y, 0.07 translate <Tx, 0, Tz> }
#end
#local R = rand(Rng1);
#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
/* ------------------------------------------------------------ */
#macro HW_une_patte ()
merge {
/* XXX */
#local RP = 0.040;
sphere { 0, RP scale <1, 0.84, 1> translate 0.35*y }
cylinder { 0, 0.35*y, RP }
sphere { 0, 0.09 scale <1, 0.26, 1> }
}
#local R = rand(Rng1);
#if ( R < 0.3 ) texture { Tinny_Brass }
#elseif ( R < 0.8 ) texture { New_Penny }
#else texture { T_Brass_2C }
#end // if
#end // macro
/* ------------------------------------------------------------ */
#declare HW_les_pattes = object
{
union {
#local E = Hc_rad * 1.14;
#local El = Hc_elo;
#for (foo, 0, 360, 60)
#local Tx = El * E * sin(radians(foo+30));
#local Tz = E * cos(radians(foo+30));
object { HW_une_patte () translate <Tx, 0, Tz> }
#end
}
}
/* ------------------------------------------------------------ */
#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
{
union {
object { HW_Chassis () }
object { HW_les_pattes }
#if (mod(clock, 8) < 5)
light_source { 0.20*y rgb <0, 0.20, 0.99> }
#end
object { HW_Cones () translate y*0.15 }
object { HW_Anneau }
}
}
// =======================================================

30
hexawood.pov Normal file
View 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
}

View File

@@ -1,47 +0,0 @@
#!/bin/bash
source fonctions.sh
set -e ; set -u
TYPE="gif89a"
NBFRAMES=180
case $TYPE in
"gif89a") DIMS="-W640 -H400" ;;
"mp4") DIMS="-W1280 -H1024" ;;
esac
POVOPT="+q9 +a -d ${DIMS}"
echo $POVOPT ; echo ; sleep 2
TMPIMG=/dev/shm/tmpimg.png
for frame in $(seq 0 $((NBFRAMES-1)))
do
img=$(printf "frames/%05d.png" $frame)
debut=$(date +%s)
povray ${POVOPT} +K${frame} -iscene.pov -o${TMPIMG}
txt=$(printf "#%03d" $frame)
echo $frame $img $txt
convert ${TMPIMG} \
-pointsize 14 \
-fill white \
-gravity south \
-annotate +0+0 "$txt" \
${img}
fin=$(date +%s)
echo
echo $frame $(( fin - debut )) | tee -a WS/timing
echo ; echo
done
echo
case $TYPE in
"gif89a") convert -delay 8 -dither none \
-colors 102 frames/* foo.gif ;;
esac
ls -lh foo.gif

100
orbite.pov Normal file
View File

@@ -0,0 +1,100 @@
/*
* H E X A C O N E - O R B I T E
*/
#version 3.7;
#include "globals.inc"
#declare NO_DYNAMIC = 1;
#include "all.inc"
// =======================================================
#declare R_planete = 1.85;
#declare Croute = object
{
#local R1 = R_planete * 1.05;
#local R2 = R_planete * 1.03;
#local HC = R_planete * 0.12;
#local BN = R_planete * 3;
difference {
sphere { 0, R1 }
sphere { 0, R2 }
box { <-HC, -BN, -BN>, <HC, BN, BN> }
box { <-BN, -HC, -BN>, <BN, HC, BN> }
box { <-BN, -BN, -HC>, <BN, BN, HC> }
}
texture {
pigment { color rgb <0.20, 0.30, 0.10> }
normal { dents 0.38 scale 0.5}
finish { phong 0.80 reflection 0.05 }
}
}
#declare Boule = object
{
sphere { 0, R_planete }
texture {
pigment { rgb <0.40, 0.50, 0.70> }
finish { metallic 0.50 reflection 0.55 }
}
}
#declare Planete = object
{
union {
object { Croute }
object { Boule }
}
}
// =======================================================
#local RO = 5.39;
#local CK = NormClock * 13.37;
#declare PosX = RO * sin(CK);
#declare PosY = 0;
#declare PosZ = RO * cos(CK);
object { HexaBenz ()
rotate -y*CK*82.3 translate <PosX, PosY, PosZ>
}
#declare PosX = RO * sin(CK+2.12);
#declare PosY = 0;
#declare PosZ = RO * cos(CK+2.23);
object { HexaCone ()
rotate y*CK*99.22 translate <PosX, PosY, PosZ>
}
#declare PosX = RO * 1.5 * sin(CK+3.14);
#declare PosY = 0;
#declare PosZ = RO * cos(CK+3.23);
object { Trident_A ()
rotate <clock*1.3, 0, clock*0.7>
rotate y*CK*99.22 translate <PosX, PosY, PosZ>
}
#declare PosX = RO * sin(CK+5.14);
#declare PosY = 0;
#declare PosZ = RO * cos(CK+5.14);
object { HexaStar
rotate y*CK*99.22 translate <PosX, PosY, PosZ>
}
object { Planete rotate (-clock*0.31)*y }
light_source { <23, 10, 15>, rgb <0.77, 0.79, 0.80> }
// -------------------------------------------------------------
camera {
location <9+NormClock, 1.60+(9.8*NormClock), 11.59>
look_at <0.0, 0.0, 0>
right <image_width/image_height, 0, 0>
#if (0)
focal_point <0.0, 0.0, 0>
aperture 0.046
blur_samples 30
#end
angle 57
}

35
panoramic.pov Normal file
View 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)
}

57
passage.pov Normal file
View File

@@ -0,0 +1,57 @@
/*
* H E X A C O N E
* nouveau projet Thu Dec 5 11:37:05 AM UTC 2024
*/
#version 3.7;
#include "globals.inc"
#declare NO_DYNAMIC = 0;
#include "all.inc"
#declare PosX = 3.95;
#declare PosY = 3.80 + (NormClock*0.299);
#declare PosZ = (NormClock-0.5) * 45.27;
object { HexaCone () translate <PosX, PosY, PosZ> }
/* XXX this two object in dynamic.inc ??? */
object { HexaBenz () translate <PosX+2.96, PosY+3.22, PosZ-19.5> }
object { HexaStar rotate y*90 translate <PosX-1.96, PosY+2.72, PosZ-17.5> }
object { Le_Decor }
#if ( (clock < 181) )
light_source {
<3, 0.30, -8> color Blue
spotlight
radius .044
falloff 2
tightness 3
point_at <PosX, PosY, PosZ>
}
#end
#if ( (clock > 230) & (clock < 340) )
light_source {
<2, 0.30, -2> color Green
spotlight
radius .044
falloff 2
tightness 3
point_at <PosX, PosY-0.10, PosZ>
}
#end
camera {
location <-2.76, 1.53, 8.76>
look_at <PosX+0.09, PosY, PosZ-0.03>
right <image_width/image_height, 0, 0>
// focal_point <0, 1, 0>
// aperture 0.046
// blur_samples 30
angle 32
}

38
patrouille.pov Normal file
View File

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

50
remote.pov Normal file
View File

@@ -0,0 +1,50 @@
/*
* H E X A C O N E - R E M O T E
* 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"
#declare A = <-SzSol, 16, -8>;
#declare B = <SzSol+4, 18, -11>;
#declare P = Interpolate(A, B, NormClock);
object { HexaCone () rotate y*((6*NormClock)+80) translate P }
object { HexaBenz () rotate y*(clock/9) translate <-9, 3, 7> }
// ---------------------------------------------------------
// WTF is that ??? XXX
#if (0)
#declare A = <-15, -1.9, SzSol>;
#declare B = < 23, -0.7, SzSol>;
#declare P = Interpolate(A, B, NormClock);
object { HexaWood scale 10 translate P }
#end
// ---------------------------------------------------------
object { Le_Decor }
// object { Repere scale 3 translate <SzSol, 2, SzSol> }
#local DistCam = 460 + (16 * NormClock);
#local CK = -1.71 - (0.039 * NormClock);
#declare CamX = DistCam * sin(CK);
#declare CamY = 28 + NormClock;
#declare CamZ = DistCam * cos(CK);
camera {
location <CamX, CamY, CamZ>
look_at <0, 0.35, 0>
right <image_width/image_height, 0, 0>
// focal_point <2, 1, 12>
// aperture 0.046
// blur_samples 30
angle 3.5
}

View File

@@ -1,35 +1,35 @@
/* /*
* 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;
global_settings { #include "globals.inc"
assumed_gamma 1.0
}
#include "colors.inc" #declare NO_DYNAMIC = 0;
#include "textures.inc" #include "all.inc"
#include "elements.inc"
#include "contexte.inc"
object { HexaCone translate y*1.15 } // ---------------------------------------------------------
#declare CK = 56 + (clock * 2); object { Le_Decor }
#declare Dcam = 1.95;
#declare CamX = Dcam * sin(radians(CK)); #declare CK = 144 + (clock * 0.25);
#declare CamZ = Dcam * 1.23 * cos(radians(CK));
#declare CamZ = CamZ - 0.9; #declare Dcam = 3.75;
#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.08, 0.22>;
camera { camera {
location <CamX, 1.20, CamZ> location <CamX, 1.97, CamZ>
look_at Lat look_at <0.03, LatY, 0.17>
focal_point Lat right <image_width/image_height, 0, 0>
aperture 0.06 // focal_point Lat
blur_samples 33 // aperture 0.046
// blur_samples 30
angle 70 angle 70
} }
light_source { <CamX*1.3, 1.35, 2+(CamZ*1.3)>,
rgb <0.47, 0.65, 0.49> }

125
splined.pov Normal file
View 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
}

35
survol.pov Normal file
View File

@@ -0,0 +1,35 @@
/*
* H E X A C O N E - S U R V O L
* 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 }
// XXX instrumenter la caméra serait un GROS plus !!!
// =======================================================
#declare Debut = <-33, 89, 289> ;
#declare Fin = < 36, 78, -2> ;
#declare Pos = sqrt(NormClock);
#declare PosCam = Interpolate(Debut, Fin, Pos);
#declare LatX = 0.614 * sin(NormClock*11.27);
#declare LatZ = -(150 + (7*NormClock));
#declare LatCam = PosCam + <LatX, -95, LatZ>;
// object { Repere scale 20 translate LatCam + y*5 }
camera {
location PosCam
look_at LatCam
right <image_width/image_height, 0, 0>
angle 64
}

56
tools/README.md Normal file
View File

@@ -0,0 +1,56 @@
# Tools
The page for « Build system and utilities ».
## Make a sequence
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 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
C'est le directeur de la production, le grand
[script](./linkfarmer.sh)
d'assemblage des séquences avec générique et intertitres.
Hélas, il n'est pas encore configurable. Mais c'est
en projet pour juin 2026 ?
## Encoding
Le [script](./encode.sh) n'est qu'un wrapper autour de
la fonction `ff_encodage()` de la lib des tools :
[fonctions.sh](fonctions.sh). Par défaut, il encode
la séquence *essai*.
Le fichier de sortie s'appelle *wip.mp4* dans tous les cas.
## 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
View 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
View 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

10
tools/config.sh Normal file
View File

@@ -0,0 +1,10 @@
# size of the video
Img_Width=1024
Img_Height=720
# for imagemagick
TEXTCOL="Yellow"
STROKOL="Green"
NBFRAMES=450

15
tools/encode.sh Executable file
View File

@@ -0,0 +1,15 @@
#!/bin/bash
set -e ; set -u
# set default value's)
srcdir="essai"
if [ $# == 1 ]
then
srcdir=$1
fi
source tools/fonctions.sh
ff_encodage $srcdir wip.mp4

70
tools/fonctions.sh Normal file
View File

@@ -0,0 +1,70 @@
set -eu
# --------------------------------------------------------------
visual_sleep ()
{
msg="$1"
nbre="$2"
# echo $msg ; echo $nbre
for foo in $(seq 0 $nbre) ; do
local bar=$(( $nbre - $foo ))
printf "======== %-20s %3d\r" "$msg" $bar
sleep 1
done
echo
}
# --------------------------------------------------------------
# un essai qui semble un echec.
#
ralentisseur ()
{
temps=$1
load=$(awk '{print int($1)}' < /proc/loadavg)
# echo " load is $load" | tee -a WS/log
if [ $load -gt 10 ] ; then
attente=$(( $temps + ($RANDOM % 90) ))
echo "ralentir $0 $SEQNAME $attente" # | tee -a WS/log
sleep $attente
fi
}
# --------------------------------------------------------------
ff_encodage()
{
SRCDIR="$1"
FILMNAME="$2"
# echo "Encoding $SRCDIR to $FILMNAME" | tee -a WS/log
ffmpeg -nostdin \
-y -r 30 -f image2 -i frames/${SRCDIR}/%05d.png \
-metadata artist='--[ tTh des Bourtoulots ]--' \
-metadata title='--[ la famille HexaCone ]--' \
-c:v libx264 \
-pix_fmt yuv420p \
-tune film \
$FILMNAME
}
# --------------------------------------------------------------
#
# celui-ci n'est pas terminé !
#
mp_encodage()
{
#
# NOT WORKING !
#
mencoder 'mf://frames/*.png' \
-mf \
fps=24 \
-ovc lavc \
-lavcopts vcodec=mpeg4 \
-o output.avi
}
# --------------------------------------------------------------
# --------------------------------------------------------------

178
tools/linkfarmer.sh Executable file
View File

@@ -0,0 +1,178 @@
#!/bin/bash
set -e ; set -u
source tools/config.sh
IDX=0
SPOOL="frames/Spool"
SEQNAME="none"
TMP="WS/tmp.png"
FONTE="Helvetica-Bold"
source tools/fonctions.sh
# -------------------------------------------------------
# /!\ this function just copy the
# file to the spool dir, so
# you can use it for tmp pics.
#
copy_a_file ()
{
src="$1"
dstname=$(printf "%s/%05d.png" $SPOOL $IDX)
# echo "$src -> $dstname"
# ln --force --symbolic $src $dstname
cp -f $src $dstname
IDX=$(( IDX + 1 ))
}
# -------------------------------------------------------
linkfarm ()
{
SRC="frames/$1"
# echo "linkfarm $SRC" | tee -a WS/log
local INTER="/dev/shm/tmp-intertitre.png"
tools/plot-timing.sh $1
local NBRE=78
convert "WS/negatif.png" \
-gravity north \
-font $FONTE \
-pointsize 108 \
-kerning 8 \
-fill $TEXTCOL \
-strokewidth 3 -stroke $STROKOL \
-annotate +0+330 "$1" \
${INTER}
for foo in $(seq 0 $NBRE)
do
copy_a_file $INTER
# :
done
for foo in $(seq 0 $NBRE)
do
copy_a_file "$SRC/00000.png"
done
for src in "$SRC"/*
do
copy_a_file $src
done
PIC=$( printf "%s/%05d.png" $SRC $((NBFRAMES-1)) )
# echo "End pic $PIC" >> WS/log
for foo in $(seq 0 $NBRE)
do
copy_a_file "$PIC"
done
}
# -------------------------------------------------------
faire_le_titre ()
{
echo "faire le titre"
local NBRE=300
local SRC="frames/hexacone/00199.png"
local GRAY="/dev/shm/tmp-titre.png"
convert -colorspace gray -colors 90 $SRC $GRAY
for foo in $(seq 0 $NBRE)
do
Ypos=$(( -175 + foo ))
convert ${GRAY} \
-gravity north \
-font $FONTE \
-pointsize 140 \
-kerning 6 \
-fill $TEXTCOL \
-strokewidth 5 -stroke $STROKOL \
-annotate +0+${Ypos} "La famille\nHexaCone" \
${TMP}
# identify ${TMP}
copy_a_file ${TMP}
printf "."
done
echo
}
# -------------------------------------------------------
faire_la_fin ()
{
local NBRE=180
datetime=$(LANG=fr date -u +"%Y/%m/%d %H:%M")
echo " $datetime" | tee -a WS/log
local SRC="frames/patrouille/00165.png"
local GRAY="/dev/shm/tmp-fin.png"
convert -colorspace gray -colors 90 $SRC $GRAY
for foo in $(seq 0 $NBRE)
do
Ypos=$(( foo + 20 ))
convert ${GRAY} \
-gravity north \
-font $FONTE \
-pointsize 92 \
-kerning 5 \
-fill $TEXTCOL \
-strokewidth 2 -stroke $STROKOL \
-annotate +0+${Ypos} \
"un film de\ntTh des Bourtoulots" \
-pointsize 48 \
-strokewidth 1 \
-gravity south \
-annotate +0+110 "${datetime}" \
${TMP}
# identify ${TMP}
copy_a_file ${TMP}
printf "."
done
echo
}
# -------------------------------------------------------
figlet "Link farmer"
rm -f frames/Spool/*.png
faire_le_titre
linkfarm approche
linkfarm hexacone
linkfarm remote
linkfarm hexabenz
linkfarm patrouille # new St Valentine 2026
linkfarm hexawood
linkfarm escadrille
linkfarm survol
linkfarm around # new 26 jan 2026
linkfarm cutoff
linkfarm panoramic
linkfarm topview
linkfarm trident
linkfarm passage
linkfarm scene
linkfarm carto
linkfarm circular
linkfarm bubblecut
linkfarm orbite
linkfarm essai
tools/plot-timing.sh
faire_la_fin
ff_encodage Spool the-hexacone-family.mp4
nb=$(( $IDX - 1 ))
echo "linkfarmed $nb files" | tee -a WS/log

70
tools/mkloop.sh Executable file
View File

@@ -0,0 +1,70 @@
#!/bin/bash
set -e ; set -u
source tools/config.sh
source tools/fonctions.sh
SEQNAME="$1"
START=0
if [ $# == 2 ]
then
START=$2
fi
echo "$0 $SEQNAME from $START" >> WS/log
DIMS="-W$Img_Width -H$Img_Height"
NBFR=" Declare=NbFrames=$NBFRAMES "
POVOPT="+q9 +A0.02 -d ${DIMS} ${NBFR} -WT4"
echo $NBFR "frames."
echo $POVOPT ; echo ; sleep 2
TMPIMG=/dev/shm/${SEQNAME}-tmp.png
# echo "TMPIMG" ${TMPIMG} | tee -a WS/log # DEBUG !
INC=1
for frame in $(seq $START $INC $((NBFRAMES-1)))
do
img=$(printf "frames/%s/%05d.png" $SEQNAME $frame)
debut=$(date +%s)
set +e
povray ${POVOPT} +K${frame} -i${SEQNAME}.pov -o${TMPIMG}
err=$?
if [ $err != 0 ] ; then
echo "$SEQNAME fail $frame" >> WS/log
mogrify -colorspace gray -blur 5x5 -colors 8 $img
visual_sleep "render fail" 12
continue
fi
set -e
sqn=$(echo ${SEQNAME} | tr [a-z] [A-Z])
txt=$(printf "%s %03d" ${sqn} ${frame} | \
tr '01' 'ol')
# echo $frame $img $txt
convert ${TMPIMG} \
-font Courier-Bold \
-pointsize 44 \
-kerning 3 \
-fill ${TEXTCOL} \
-strokewidth 2 -stroke $STROKOL \
-gravity south \
-annotate +0+5 "$txt" \
${img}
fin=$(date +%s)
echo ; sleep 1
printf "%-12s %5d %5d\n" \
${SEQNAME} $frame $(( fin-debut )) | \
tee -a WS/mp4.timing
echo ; sleep 2
done
date --utc > WS/$SEQNAME.done
echo
ff_encodage $SEQNAME wip-${SEQNAME}.mp4
echo "build of '$SEQNAME' done" | tee -a WS/log

24
tools/mkseqs.sh Executable file
View 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
View File

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

78
tools/plot-timing.sh Executable file
View File

@@ -0,0 +1,78 @@
#!/bin/bash
set -ue
source tools/config.sh
TMPFILE="/dev/shm/plot-timing.tmp"
IMAGE="timing.png"
if [ $# == 1 ]
then
sequence=$1
else
sequence="escadrille"
fi
# echo "plot timing $sequence" >> WS/log
count=$( grep $sequence WS/mp4.timing | wc -l )
echo "$count samples for $sequence"
grep $sequence WS/mp4.timing | tail -4000 | awk \
-v nbframes=$NBFRAMES \
' \
BEGIN { \
# print "nb frames = ", nbframes; \
for (foo=0; foo<nbframes; foo++) { \
mini[foo] = 666; \
maxi[foo] = -42; \
count[foo] = 0; \
} \
} \
# for every line \
{ \
accu[$2] += $3; \
count[$2]++; \
if (mini[$2] > $3) mini[$2] = $3; \
if (maxi[$2] < $3) maxi[$2] = $3;
last[$2] = $3 \
} \
\
END { \
for (foo=0; foo<nbframes; foo++) { \
if (count[foo] > 0) { \
mean = accu[foo] / count[foo]; \
printf "%4d %4f %4d %4d %4d\n",
foo, mean,
mini[foo], maxi[foo],
last[foo];
} \
} \
} \
' > $TMPFILE
# head $TMPFILE ; exit
gnuplot << __EOC__
set term png size $Img_Width,$Img_Height
set output "timing.png"
set grid
set xrange [:450]
set yrange [0:]
set title "Séquence '${sequence}'"
set xlabel "numéro de la trame"
set ylabel "temps en secondes"
plot "/dev/shm/plot-timing.tmp" u 1:4 w l \
lc "#ff0000" t "maximum", \
"/dev/shm/plot-timing.tmp" u 1:3 w l \
lc "#0000ff" t "minimum", \
"/dev/shm/plot-timing.tmp" u 1:2 w l \
lc "#00aa00" t "moyenne", \
"/dev/shm/plot-timing.tmp" u 1:5 w l \
lc "#000000" t "last"
__EOC__
convert -negate -level -33% $IMAGE WS/negatif.png

43
topview.pov Normal file
View File

@@ -0,0 +1,43 @@
/*
* H E X A C O N E - T O P V I E W
* 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"
/*
* XXX
* why this two moving hexathings are not in "dynamic.inc" ?
*/
object { HexaCone () rotate z*9.1 translate <7, 3+NormClock, -8> }
object { HexaBenz () translate <-9+NormClock, 2, -6> }
/*
* nouveau 11 fevrier 2025
*/
#declare A = <-29, -0.5, (SzSol/2)+9>;
#declare B = < 36, -0.7, (SzSol/2)+7>;
#declare P = Interpolate(A, B, NormClock);
object { HexaWood translate P }
// object { Repere scale 2 }
object { Le_Decor }
#declare CamY = 47 - (9.50 * Cos_01(NormClock));
#declare LatY = -4 + ( 2.12 * NormClock);
camera {
location <-3.60, CamY, 10.09>
look_at <0.6, LatY, 0>
right <image_width/image_height, 0, 0>
// focal_point <2, 1, 12>
// aperture 0.046
// blur_samples 30
angle 45 + (65*NormClock)
}

103
trident.inc Normal file
View File

@@ -0,0 +1,103 @@
/*
* 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
View 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
View 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
// =======================================================