Compare commits

362 Commits
Author SHA1 Message Date
Tonton Th c9dba8d6aa ready for iohd2026 release 2026-03-26 10:27:42 +01:00
Tonton Th c77b6684dd not ready for release 2026-03-26 08:34:24 +01:00
Tonton Th cde4dac7df last minute camera tuning 2026-03-26 08:13:02 +01:00
Tonton Th baa76d2cf9 font change 2026-03-25 16:26:01 +01:00
Tonton Th 2c2accd83a camera adjusts 2026-03-24 05:10:35 +01:00
Tonton Th 9c63031460 speed up the cam 2026-03-24 04:47:35 +01:00
Tonton Th e20ef98199 rotate the blob faster 2026-03-23 10:36:00 +01:00
Tonton Th c13e3a181c camera up 2026-03-18 23:56:30 +01:00
Tonton Th 564ccab632 lights tuning 2026-03-18 23:56:04 +01:00
Tonton Th 32300d389a better colors 2026-03-17 12:56:55 +01:00
Tonton Th f3eabfb68b ready for the next run ? 2026-03-14 14:38:41 +01:00
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
56 changed files with 4262 additions and 533 deletions
+7
View File
@@ -5,10 +5,17 @@ frames/*
datas/*.xcf
datas/*.ttf
datas/*.jpg
datas/*.webp
!datas/README.md
!datas/ega-16colors.png
WS/*timing
WS/log*
WS/*.done
WS/*.log
*.png
*.gif
*.mp4
*.pov-state
+67 -6
View File
@@ -1,25 +1,71 @@
DIMS = -W1600 -H1200
POVOPT = +q9 +a0.02 -d
POVDEP = contexte.inc elements.inc hexabenz.inc \
globals.inc datas/hf.png
CK=150
POVOPT = +q9 +A0.05 -WT2 Declare=NbFrames=450 -d
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
# ! Define a default value for the POV clock
# ! You can overide with this command line :
# $ make CK=449 essai.png
CK=225
PNG: essai.png scene.png topview.png passage.png \
orbite.png hexabenz.png escadrille.png
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$@
essai.png: essai.pov Makefile $(POVDEP)
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$@
@@ -32,4 +78,19 @@ scene.png: scene.pov Makefile $(POVDEP)
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$@
+49 -14
View File
@@ -3,40 +3,75 @@
Un projet POVray né pendant l'hiver 2024/2025, au fin fond du Gers :
un objet **hexaconal**
prenant en compte les divergences d'opinion et les fluctuations
de la temprérature du salon.
de la température du salon.
Le concept initial, assez inprécis, sera amélioré au fil du temps,
et vous pouvez
suivre son évolution par l'intermédiaire de
[Mastodon](https://mastodon.tetaneutral.net/@tth)
avec le croisimot `#hexacone`.
avec le *croisimot* `#hexacone`.
Quelques images sont disponibles sur mon serveur de
[cuisine](http://maison.tth.netlib.re/pov/hexacone.html),
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 tracer :
Il y a deux choses que l'on peut raytracer :
les images fixes, qui sont traitées
par un classique [`Makefile`](./Makefile) et les séquences animées
produites par un [script shell](./mkloop.sh).
Avant toute chose, vous devrez vérifier la présence de plusieurs
répertoires : d'un coté `./frames/<name>` pour stocker les images calculées :
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
├── scene
├── Spool
── topview
frames/
├── essai
├── orbite
├── passage
├── escadrille
├── scene
── Spool
└── topview
```
et de l'autre coté `./WS/` pour ranger les fichiers de travail.
et de l'autre coté `./WS/` pour ranger les
[fichiers de travail](./WS/README.md).
Ensuite, il faut assembler toutes ces images calculées en une vidéo
de qualité (ce que fait je très empiriquement). Tout d'abord, on encode
(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/) ;
* IRC canal `#tetalab` sur le
réseau de [Libera](https://libera.chat/).
* Par IRC, canal `#tetalab` ou `#povray` sur le réseau de [Libera](https://libera.chat/).
* Dans [Mastodon](https://mastodon.tetaneutral.net/@tth) et [Peertube](https://tube.interhacker.space/c/tth_channel/videos)
## La suite
Il reste bien des choses à faire : [TODO](TODO.md) list.
**Le gras c'est la vie** (proverbe local)
+30
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.
+2 -2
View File
@@ -1,3 +1,3 @@
# Workspace
workspace
For intermediates files, and timing log.
+31
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
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
}
// =======================================================
+109
View File
@@ -0,0 +1,109 @@
/*
* 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 }
#local R = rand(Rng1);
#if (R < 0.63) texture { T_Crack3 } // XXX
#else texture { T_Grnt19a }
#end
}
#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
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
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 = 0;
#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
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
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
}
+327 -78
View File
@@ -4,13 +4,167 @@
/* voir aussi le fichier 'globals.inc' */
/* ------------------------------------------------------------ */
/* ======================================================= */
// #debug "+++++++++++++++++++++ debut contexte\n"
/* ======================================================= */
#declare Rhxba = 0.30;
#declare R2hxba = Rhxba * 0.48;
#macro Trois_Portiques (Dist)
union {
object { Portique_A () }
object { Portique_A () scale <1, 1.2, 1> translate z*11 }
object { Portique_A () rotate y*11 translate z*22 }
// XXX scale 1.85
}
#end // macro trois portiques
/* ======================================================= */
/*
* essai du 12 mars 2025
*/
#declare RedB_0_X = 19; #declare RedB_0_Z = 29;
#declare RedB_1_X = -34; #declare RedB_1_Z = 11;
// 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.496;
#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
}
}
/* ======================================================= */
#declare HexaBalls = object
{
#declare Rhxba = 0.30;
#declare R2hxba = Rhxba * 0.48;
merge {
sphere { 0, Rhxba }
#local E = Rhxba * 1.260;
@@ -20,95 +174,149 @@ merge {
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_Bibelots = object
#declare Les_HexaBalls = object
{
union {
object { HexaBalls
texture { Lightning1 scale 0.33 }
rotate <clock/3, clock/6, clock/9>
translate <3, -1.6+1.01*Cos_010(NormClock), 5>
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>
translate <5, -1+0.42*Cos_010(NormClock), -4>
}
}
}
/* ------------------------------------------------------------ */
#declare RHBlo = 0.24;
#declare RHBlo2 = RHBlo * 0.666;
#declare HexaBlob = object
{
blob {
// threshold 0.01 + NormClock
threshold 0.01
sphere { <0, 0, 0>, RHBlo, 1 }
#local E = RHBlo * 1.210;
#local W = 0.1;
sphere { <-E, 0, 0>, RHBlo2, W }
sphere { < E, 0, 0>, RHBlo2, W }
sphere { < 0, -E, 0>, RHBlo2, W }
sphere { < 0, E, 0>, RHBlo2, W }
sphere { < 0, 0, -E>, RHBlo2, W }
sphere { < 0, 0, E>, RHBlo2, W }
}
}
// =======================================================
#declare Le_Sol = object
{
height_field {
png "datas/hf.png"
smooth
translate <-.5, 0, -.5>
scale <21, 0.88, 21>
texture {
pigment { color DarkGreen }
normal { bumps 0.035 scale 0.186 }
finish { phong 0.125 }
rotate <-clock, clock*0.33333, clock*3>
translate <4, 0.61+Cos_010(NormClock), -3>
}
}
}
#declare Repere = object
/* ======================================================= */
/*
* on déclare et rempli le tableau avec la place des trous
*/
#declare UnderHoles = array[6]
#ifdef (DEBUG_LEVEL)
#debug "Underholes : DEBUG_LEVEL activated\n"
#fopen Trid "WS/underholes.log" write
#end // if debulevel
#for (Idx, 0, 5)
#local Angle = (Idx + 0.19) * 1.09; // magic numbers ?
#local Kr = 5 - (rand(Rng1)*2.5);
#local Px = Kr + sin(Angle) * (SzSol * 0.98);
#local Kr = 5 - (rand(Rng1)*2.5);
#local Pz = Kr + cos(Angle) * (SzSol * 1.02);
#ifdef (DEBUG_LEVEL)
#write (Trid, "Def_", Idx, " ", NormClock, " ", Px, " ", Pz, "\n")
#end
// put the coords in the array.
#declare UnderHoles[Idx] = <Px, 0, Pz>;
#end // for loop
#ifdef (DEBUG_LEVEL)
#fclose Trid
#end
#declare Underground = object
{
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 {
cylinder { 0, <1, 0, 0>, 0.007 pigment { color Red } }
cylinder { 0, <0, 0, 1>, 0.007 pigment { color Blue } }
#for (foo, 0, 5)
// #local YHB = (0.08 + (0.5*rand(Rng1)) * y);
#if (rand(Rng1) < 0.5)
object { HoleBorder_A (1.04) translate UnderHoles[foo] }
#else
object { HoleBorder_B (1.06) translate UnderHoles[foo] }
#end // if
#end // for
}
}
/* ======================================================= */
/*
* nouvel éclairage du 10 février 2025
*/
#declare Quad_lampe = object
{
light_source {
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 + (8*rand(Rng1)));
#local DX = 71 * sin(CK);
#local DZ = 67 * cos(CK);
object { Chose () translate < DX, 0, DZ> } // XXX
#end
}
}
/* ======================================================= */
/*
* cette partie demande des explications
*/
#declare Les_Lumieres = object
{
union {
#if (1)
light_source {
<0.3, 2.50, 2.8> color Gray90
<2.3, 5.50, 2.86> color Gray70
spotlight
radius 14 falloff 10 tightness 10
radius 19 falloff 10 tightness 8
point_at <0, 0.95, 0.22222222>
}
#end
#if ( (clock>166) & (clock<213) )
light_source {
<2, 0.30, -2> color Yellow
spotlight
radius 12 falloff 20 tightness 10
point_at <-0.08, 0.80, 0.17>
}
#end
#if (1)
light_source {
<-5, 5.60, 8>
<-8, 5.60, 18>
#if ( (clock > 290) & (clock<344) )
#local Couleur = rgb <0.20, 0.20, 0.90>;
#else
@@ -116,44 +324,85 @@ union {
#end
color Couleur
spotlight
radius 9 falloff 10 tightness 5
point_at <0, 0.95, -0.22>
radius 12 falloff 10 tightness 5
point_at <0, 0.95, -0.22>
}
#end
}
}
// #declare Le_Ciel = object
// {
/* ======================================================= */
/*
* why a skysphere can't be an object ?
*/
sky_sphere {
pigment {
gradient y
color_map {
[ 0.2 color Gray10 ]
[ 0.4 color Gray60 ]
[ 0.7 color Black ]
[ 0.8 color White ]
[ 1.0 color Gray10 ]
[ 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.91 * Cos_010(NormClock)
scale 1.804
turbulence 2.222 + 0.84 * Cos_010(NormClock)
scale 1.600
// translate -1
}
#local Kem = 0.15;
#local Kem = 0.09;
emission rgb <Kem, Kem, Kem>
}
// }
/* ------------------------------------------------------------ */
/* ======================================================= */
/*
* Et on rassemble tous les éléments...
*/
#declare Le_Decor = object
{
union {
object { Le_Sol }
object { Les_Bibelots }
object { Les_Lumieres }
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*(114*NormClock)
translate < 8, 0, -30> }
object { Les_Choses }
object { Les_Arches (1.9) rotate y*112 translate <-34, 0, -26> }
// XXX object { Les_Cahutes () rotate y*17 translate <2, 0, -40> }
object { Les_Cahutes () rotate y*17 translate <39, 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 { Blob_Boxed scale 4 translate <-3, 3.58, 112> }
object { Blob_Boxed scale 4 rotate y*45 translate <3, 6.7, 161> }
}
}
/* ------------------------------------------------------------ */
+51
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)
}
+11 -1
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).
Binary file not shown.

After

Width:  |  Height:  |  Size: 220 B

+178
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"
/* ----------------------------------- */
+48 -31
View File
@@ -8,45 +8,62 @@
#include "globals.inc"
#include "colors.inc"
#include "metals.inc"
#include "textures.inc"
#include "stones.inc"
#declare NormClock = clock / 360.0;
#include "contexte.inc"
#include "elements.inc"
#include "hexabenz.inc"
#declare NO_DYNAMIC = 0;
#include "all.inc"
// =======================================================
#for (idX, 0, 3)
#for (idZ, 0, 3)
#local Y_mean = 0;
#local Y_count = 0;
#local posX = (idX * 4.56) - 4.7;
#local posY = 1.8 * (rand(Rng1)-0.5);
#local posZ = (idZ * 4.64) - 9.1;
#local Ry = (rand(Rng1) - 0.5) * 16;
#if (rand(Rng1) < 0.25)
object { HexaCone rotate y*Ry translate <posX, posY, posZ> }
#else
object { HexaBenz rotate y*Ry translate <posX, posY, posZ> }
#end
#end
#end
#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
// =======================================================
light_source { <-8, 7, -9>, rgb <0.81, 0.65, NormClock> }
light_source { < 11, 7, 4>, rgb <1-NormClock, 0.28, 0.80> }
object { Repere scale 5 }
object { Le_Decor }
#local CamX = -17.7+(2.6*NormClock);
#local CamY = 11.81+(3.3*Cos_01(NormClock));
#local CamZ = 16.06+Cos_010(NormClock);
#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 LatX = 3 * NormClock;
#local LatY = (Y_mean / Y_count) - (0.5*NormClock);
#local LatZ = 2.22;
// #debug concat("escadrille: Lat Y ", str(LatY, 7, 3),"\n")
camera {
location <CamX, CamY, 16.09>
look_at <0.0, 0.0, 0>
angle 48
location <CamX, CamY, CamZ>
look_at <LatX, LatY, LatZ>
right <image_width/image_height, 0, 0>
angle 54 - (35 * NormClock)
}
+437 -30
View File
@@ -1,53 +1,460 @@
/*
* H E X A C O N E - E S S A I
* nouveau projet Thu Dec 5 11:37:05 AM UTC 2024
* nouveau projet du Thu Dec 5 11:37:05 AM UTC 2024
*/
#version 3.7;
// #declare DEBUG_LEVEL = 1; // un nouveau test ?
#include "globals.inc"
#declare NO_DYNAMIC = 1;
#include "all.inc"
#include "colors.inc"
#include "metals.inc"
#include "textures.inc"
#include "stones.inc"
/*
* il faut faire le tri ici !
-* __________________________
*/
// =======================================================
// nouveau du 25 février 2026
#declare NormClock = clock / 360.0;
#include "contexte.inc"
#include "elements.inc"
#macro Un_Autre_Cube (Ratio)
difference {
#local D = 1.000000;
box { <-D, -D, -D>, <D, D, D> }
#local V = Ratio * D;
#local M = D * 1.1;
box { <-M, -V, -V>, <M, V, V> }
box { <-V, -M, -V>, <V, M, V> }
box { <-V, -V, -M>, <V, V, M> }
texture { Flashy scale 4 }
}
#end
// =======================================================
// nouveau du 10 février 2026
//
#macro Anemone_A (E, H)
union {
#for (foo, 0, 5)
#local A = (NormClock*7) + (0.5*radians(foo*60));
#local DX = (E+rand(Rng1)) * sin(A);
#local DZ = (E+rand(Rng1)) * cos(A);
cone {
#local RC = 0.15 + (rand(Rng1) * 0.50);
#local H2 = H + rand(Rng1);
y*(H*(0.01)), 0.15, <DX, H2, DZ>, 0.001
#local Rv = 0.7 + (0.2*rand(Rng1));
#local Gv = 0.4 + (0.5*rand(Rng1));
#local Bv = 0.6 + (0.4*rand(Rng1));
texture {
pigment { rgb <Rv, Gv, Bv> }
normal { dents 6.66 scale 0.03+(0.17*rand(Rng1)) }
finish { phong 0.51 reflection 0.08 }
}
}
sphere { 0, 0.45 scale <1, 0.717, 1> texture { T_WIP_color } }
#end // for
}
#end // macro
#declare Des_Anemones = object
{
union {
object { Anemone_A (3.00-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> }
}
}
// =======================================================
/*
* new Thu Dec 18 01:14:19 AM UTC 2025
* 14 janvier 2026, j'ajoute un truc pour {enfin} gérer
* un DEBUG_LEVEL correct.
*/
#macro Le_ConeStack ()
#ifdef (DEBUG_LEVEL)
#debug "Cone Stack : DEBUG_LEVEL activated\n"
#fopen Log "WS/log.essai" write
#end // debug level
union {
#local Hcs = 0.550;
#local Rco = R_basecone * 3.333;
#for (Foo, 0, 5)
#local Dx = 0.385 * sin(Foo+NormClock);
#local Dy = Foo * (Hcs + 0.0333);
#local Dz = 0.385 * cos(Foo+NormClock);
#local DV = <Dx, Dy, Dz>;
#ifdef (DEBUG_LEVEL)
#write (Log, Foo, " ", DV, "\n")
#end
union {
cone { 0, Rco, <0, Hcs, 0>, 0.001
#if (rand(Rng1) < 0.50) texture { Y_Texture }
#else texture { M_Texture }
#end // if rand
}
cylinder { 0, -0.08*y, Rco
#if (rand(Rng1) < 0.50) texture { R_Texture }
#else texture { G_Texture }
#end // if rand
}
translate DV
}
#end // for Foo
}
#ifdef (DEBUG_LEVEL)
#fclose Log
#end // debug level
#end // macro
// =======================================================
#macro HexoFlash_body (Ra, He)
merge {
cylinder { 0, y*He, Ra }
sphere { y*He, Ra }
/* XXX
* faire la place pour la lampe
*/
object {
HexaBlob
#local SC = 1.71 + 0.5 * abs(sin(NormClock * 3 * 3.14159));
texture { T_Stone26
scale SC
translate 3*y*NormClock
}
translate < 0, 1, 0>
texture { LeGris }
}
#end // macro
// object { Le_Decor }
// object { Repere }
#macro HexoFlash_light (Ra, Val)
difference {
sphere { 0, Ra*1.46 }
#local WB = 0.08;
#local H1 = -0.10;
#local H2 = 0.10;
union {
box { <-1, H1, -WB>, <1, H2, WB> }
box { <-WB, H1, -1>, <WB, H2, 1> }
}
texture {
#if (rand(Rng1) < 0.70) pigment { color Orange }
#else pigment { color Orange }
#end
finish { emission 0.8 }
}
scale <1, 1.2, 1>
}
#end // macro
#if (0)
object { HexaBalls
#local SC = 0.18 + abs(sin(NormClock * 4 * 3.14159));
texture { Lightning2 scale SC }
translate <-0.80, 1, 0> }
#macro HexoFlash (Ra, He)
union {
#local Ha = 2+rand(Rng1);
#local Hb = Ha * 0.8;
object { HexoFlash_body (Ra, Ha) }
object { HexoFlash_light (Ra, Ha)
translate y*Hb }
}
#end // macro
// =======================================================
/*
* 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 }
}
}
}
// ------------------------------------
#declare Texture_du_Vase = texture
{
pigment {
gradient y
color_map {
[ 0.000 color Green ]
[ 0.333 color Gray ]
[ 0.500 color Orange ]
[ 0.666 color Gray50 ]
[ 1.000 color Green ]
}
turbulence 1.24 // piturb :)
scale <1, 0.25, 1>
rotate <10, 0, 4>
}
finish { phong 0.25 }
}
// -------------------------------------------------------
// the place to try new textures
#declare ProtoTextures = object
{
#local TX = 2.45;
#local TZ = 2.95;
#local Kro = 32 + (NormClock * 666);
union {
object { Obj_BasicTexture texture { R_Texture }
rotate y * (rand(Rng1)*Kro)
translate <TX, 0, -TZ> }
object { Obj_BasicTexture texture { Texture_du_Vase }
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.60, 1>
}
#local R = rand(Rng1);
#if (R < 0.75)
texture { Texture_du_Vase rotate y*(clock*3) }
#else
texture { T_WIP_redwave scale 0.15 + 0.333*rand(Rng1)
rotate <75*rand(Rng1), 75*rand(Rng1), 75*rand(Rng1)>
}
#end
}
#end
// ------------------------------------
// des poignées sur le haut du vase
// XXX pas vraiment au point !
#macro Vase_le_corps_b ()
union {
#for (foo, 0, 359.999, 60)
#local Dx = 0.33 * sin(radians(foo));
#local Dz = 0.32 * cos(radians(foo));
torus { 0.025, 0.015 scale <1, 1.2, 4>
rotate z*42 rotate y*(foo-90)
translate <Dx, 0, Dz>
} // torus
#end // end for (foo
texture { G_Texture }
}
#end // end macro
// ------------------------------------
// ASSEMBLER LE CORPS
#macro Vase_le_corps ()
union {
object { Vase_le_corps_a () }
object { Vase_le_corps_b () }
// this 'translate' must be computed ?
translate y*0.95
}
#end
// ------------------------------------
// LE PIED
#macro Vase_le_pied ()
union {
cylinder { 0, y*0.80, 0.08 }
cylinder { 0, y*0.08, 0.20 }
sphere { 0, 0.20 scale <1, 0.15, 1> translate y*0.08 }
texture { T_WIP_dents scale 0.15 }
}
#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.65*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.65) texture { tPlasticPrune }
#else texture { tPlasticGreen }
#end // if
}
#end // for
translate y*0.87
}
// #debug "== Fin Vase 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.52> }
object { Vase () scale 1.4 translate <-2.9, 0, 3.91> }
object { Chose () 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, 20)
#declare E = 12 + (3.5*rand(Rng1));
#declare Dx = E * sin(radians(I));
#declare Dz = E * cos(radians(I));
#local R = rand(Rng1);
#if (R > 0.76)
object { GyroPhare () translate <Dx, 0, Dz> }
#elseif (R > 0.65)
object { Obj_BasicTexture
texture { T_WIP_redwave }
scale 0.75
rotate y * (5*(.5-rand(Rng1))*clock)
translate <Dx, 0, Dz> }
#else
object { HexoFlash (0.14, 1.85 + (0.444*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 1.6 translate z*2 }
object { Portique_A () scale 1.2 }
object { Portique_A () scale 1.4 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.21;
#local Bv = 0.25 * abs(sin(clock*0.014));
light_source {
<-32, 40, -7>
colour <Rv, Gv, Bv>
parallel
point_at 0
}
// ------------------------------------------------------ ##
#declare Selector = int(clock/90);
#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 { Des_Anemones }
object { Repere translate y*0.08 }
#break
#case (2)
object { HoleBorder_B (2.222) }
object { ProtoTextures }
#break
#case (3)
object { Blob_Boxed scale 3 translate y*2 }
// object { Repere translate y*1 }
#break
#case (4)
object { Un_Autre_Cube (0.666) rotate y*42 translate <3, 1.8, 0> }
object { Un_Autre_Cube (0.888) translate <0, 1.8, 2> }
#break
#end // switch selector
plane {
y, 0
texture { Ground_Texture }
}
// =======================================================
light_source { <-8, 7, -9>, rgb <0.81, 0.65, NormClock> }
// light_source { <-11, 7, 9>, rgb <0.31, NormClock, 0.80> }
light_source { < 11, 7, 4>, rgb <1-NormClock, 0.28, 0.80> }
#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 {
location <-0.7+NormClock, 1.81, 2.09>
look_at <0.0, 1.0, 0>
angle 54
orthographic
location <CamX, CamY, CamZ>
look_at <0, 1.5, 0>
right <image_width/image_height, 0, 0>
angle AngleCam
}
+15 -8
View File
@@ -1,12 +1,19 @@
# Le silo des frames
Avant tout, il faut créer ces répertoires :
```
frames/
├── essai
├── orbite
├── passage
├── scene
├── Spool
└── topview
```
frames/
+--- essai
+--- orbite
+--- passage
+--- scene
+--- scene
+--- orbite
+--- survol
+--- escadrille
+--- topview
+--- Spool
```
+331
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.50
}
// =======================================================
/*
* 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.666;
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*2.2, clock*2.7, clock*1.8> }
}
}
// =======================================================
/*
* 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
View File
@@ -0,0 +1,3 @@
Space for the flashy Compuserve pictures.
+270 -7
View File
@@ -1,19 +1,273 @@
global_settings {
assumed_gamma 1.0
ambient_light rgb <0.17, 0.14, 0.17>
ambient_light rgb <0.48, 0.49, 0.48>
max_trace_level 15
}
#declare Rng1 = seed(1337);
#declare foo = rand(Rng1);
#declare Rng2 = seed(now*24*60*60);
#declare foo = rand(Rng2);
#include "colors.inc"
#include "metals.inc"
#include "textures.inc"
#include "stones.inc"
#include "woods.inc"
#declare NormClock = clock / 360.0;
#declare Rng1 = seed(314);
#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 = 42;
#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.18 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
@@ -21,4 +275,13 @@ global_settings {
(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
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.59 }
}
}
#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 ?
}
/* ======================================================= */
+185 -73
View File
@@ -1,99 +1,211 @@
/*
* H E X A C O N E
* H E X A B E N Z
*/
// =======================================================
#declare Benz_Cone_Base = object
{
#local RA = 0.120;
#local RB = 0.001;
#macro Benz_Cone_Base () // = object
// {
union {
cone { 0, RA, y, RB }
sphere { 0, RA*1.098 scale <1, 0.62, 3.2> translate -0.02*y }
#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.40;
#local Tx = E * sin(radians(foo));
#local Ty = E * cos(radians(foo));
object { Benz_Cone_Base
#if ( rand(Rng1) < 0.5 )
texture { Soft_Silver scale 16.50 }
#else
#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
// ------------------------------------------------------
#local RT = 0.24;
#local LT = 0.61;
#declare Benz_Tubules = object
{
#macro HexaBenz ()
// #declare HexaBenz = object
// {
union {
#local E = 0.17;
#local R = 0.010;
#for (foo, 0, 360, 20)
#local Tx = E * sin(radians(foo));
#local Ty = E * cos(radians(foo));
#local Dz = z * 1.09;
cylinder { -Dz, Dz, R translate <Tx, Ty, 0> }
sphere { -Dz, R translate <Tx, Ty, 0> }
sphere { Dz, R translate <Tx, Ty, 0> }
#end
}
#if ( rand(Rng1) < 0.333)
texture { Orange_Glass }
#else
texture { Yellow_Glass }
#end
}
#declare Benz_Fuseau = object
{
sphere { 0, RT*0.39 scale <1, 1, 9> }
texture { Gold_Nugget scale 0.56 }
}
#declare Benz_Cylindre = object
{
difference {
union {
cylinder { z*LT*1.6, -z*LT, RT }
sphere { z*LT*1.5, RT*0.72 translate y*RT*0.87}
}
cylinder { z*4, -z*4, RT*0.95 }
}
texture { Soft_Silver scale 6.0 }
}
#declare Benz_Tube = object
{
union {
object { Benz_Tubules }
object { Benz_Fuseau }
object { Benz_Cylindre }
}
}
// ------------------------------------------------------
#declare HexaBenz = object
{
union {
#local Rk = rand(Rng1) * 666.666;
#local Rk = (rand(Rng1)-0.54) * 1312;
object { Benz_Cones () rotate z*NormClock*Rk}
object { Benz_Tube }
object { Benz_Tube () }
}
}
// }
#end
+13 -22
View File
@@ -6,33 +6,24 @@
#include "globals.inc"
#include "colors.inc"
#include "metals.inc"
#include "textures.inc"
#include "stones.inc"
#include "contexte.inc"
#include "elements.inc"
#include "hexabenz.inc"
#local K = 1.48;
object { HexaBenz rotate y*90 translate -x*K }
object { HexaBenz translate x*K }
#declare NO_DYNAMIC = 0;
#include "all.inc"
// =======================================================
light_source { <19, 7, 14>, rgb <0.77, 0.79, 0.80> }
light_source { <19, 7, -14>, rgb <0.77, 0.79, 0.80> }
object { Le_Decor }
// object { Repere scale 2 }
#declare Loc_cam = <0.63, 2, 2*NormClock> + (Pos_RedB_0 * 1.32);
#declare Lat_Y = 1.21 + 0.16*NormClock;
camera {
location <-1.9+(8*NormClock), 0.70, 7.59-NormClock>
look_at <0.37, 0.0, 0>
focal_point <0.37, 0.0, 0>
aperture 0.046
blur_samples 30
angle 60 - 22 * Cos_01(NormClock)
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)
}
+106 -51
View File
@@ -2,22 +2,24 @@
* nouveau projet Thu Dec 5 11:37:05 AM UTC 2024
*/
#declare RA = R_basecone;
// #declare RB = 0.001;
#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 }
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 }
}
}
#declare HexaCone_body = object
{
#macro HexaCone_Body ()
// #declare HexaCone_body = object
// {
union {
difference {
object { HexaCone_shape }
@@ -27,18 +29,28 @@ union {
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 }
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.073;
#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);
#local Value = sin( (NormClock * 26.536) +
(3.14*rand(Rng1)) );
#if (Value < 0)
#local Couleur = rgb <abs(Value), 0, 0>;
#else
@@ -51,9 +63,15 @@ union {
fade_power 1.58
}
}
texture { New_Penny }
}
#if (rand(Rng1) < 0.30)
texture { New_Penny }
#else
texture { GoldDark }
#end
// }
#end // macro
// ---------------------------------------------------------
/*
*
*/
@@ -72,7 +90,8 @@ merge {
}
}
}
#declare HexaCone_radar = object
#declare HexaCone_radar_A = object
{
union {
#for (foo, 0, 360, 60)
@@ -83,13 +102,30 @@ union {
rotate y*(foo-90)
translate <PX, 0, PZ>
}
#local R2 = 0.08;
#end
torus { R2, 0.0034 translate -0.08*y }
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
*/
@@ -97,7 +133,7 @@ texture { Soft_Silver scale 6.50 }
{
difference {
merge {
sphere { 0, 0.0137 scale <1, 1, 4.70>
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> }
@@ -115,22 +151,33 @@ union {
}
}
#declare HexaCone_head = object
{
#local DTa = 0.278;
#local DTb = 0.030;
// ---------------------------------------------------------
#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.50;
#local TB = 0.60;
box { <-TB, -TB, TB>, <TB, TB, 0> }
}
sphere { 0, DTb*1.55 translate -DTa*x }
sphere { 0, DTb*1.55 translate DTa*x }
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
}
texture { Orange_Glass }
}
#end // macro
// XXX }
/* ------------------------------------------
* new Sat Dec 21 11:17:36 PM UTC 2024
@@ -144,29 +191,31 @@ texture { Orange_Glass }
box { <-DXail, -DYail, -DZail> , <DXail, DYail, 0> }
}
#declare Le_rotor = object
{
#local Rrot = 0.0034;
#local Lrot = 0.13;
#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*19
rotate z*21
rotate (foo*35)*x
translate (foo*0.013)*x }
#end
}
// texture { T_Chrome_1C }
texture {
pigment { color Orange }
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 metallic 0.7 }
finish { ambient 0.7 phong 0.5 brilliance 0.9 }
}
}
}
#end
/* ------------------------------------------------------
*
@@ -194,7 +243,7 @@ merge {
#end
cylinder { y*Rtuy, y*(Rtuy+0.08), 0.011 scale <2.95, 1, 1> }
sphere { 0, 0.017 scale <4.5, 1, 0.717>
sphere { 0, 0.017 scale <4.8, 1, 0.717>
translate z*(Rtuy+Etuy/3) }
}
texture { T_Brass_1C }
@@ -204,7 +253,7 @@ texture { T_Brass_1C }
{
union {
object { Tuyere }
object { Le_rotor rotate x*(clock*5.8) translate -0.06*x }
object { Le_rotor () rotate x*(clock*5.8) translate -0.06*x }
}
}
@@ -221,14 +270,20 @@ rotate -y*90
// ###########################################################""
#declare HexaCone = object
{
#macro HexaCone ()
// #declare HexaCone = object
// {
union {
object { HexaCone_body }
object { HexaCone_Body () }
#local T = 0.55;
object { HexaCone_head translate <0, 0, T+DTa> }
object { HexaCone_radar translate <0, T+0.18, 0> }
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
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
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
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
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
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, 4.57, 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
}
-66
View File
@@ -1,66 +0,0 @@
#!/bin/bash
source fonctions.sh
set -e ; set -u
TYPE="mp4"
SEQNAME="$1"
NBFRAMES=360
case $TYPE in
"gif89a") DIMS="-W640 -H480" ;;
"mp4") DIMS="-W1024 -H768" ;;
esac
echo "Running $0 $TYPE $SEQNAME" >> WS/log
POVOPT="+q9 +a0.01 -d ${DIMS} -WT6"
echo $POVOPT ; echo ; sleep 2
TMPIMG=/dev/shm/${SEQNAME}-tmp.png
for frame in $(seq 0 $((NBFRAMES-1)))
do
# figlet -k $frame ; sleep 1
ralentisseur 25
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 $img
sleep 6
continue
fi
set -e
txt=$(printf "%s %03d" ${SEQNAME} $frame)
# echo $frame $img $txt
convert ${TMPIMG} \
-font Courier-Bold \
-pointsize 16 \
-fill turquoise \
-gravity south \
-annotate +0+5 "$txt" \
${img}
fin=$(date +%s)
echo ; sleep 1
echo ${SEQNAME} $frame $(( fin - debut )) | \
tee -a WS/mp4.timing
echo ; sleep 1
done
echo
case $TYPE in
"gif89a") convert -delay 8 -dither none \
-colors 102 frames/* foo.gif ;;
"mp4") ff_encodage $SEQNAME wip-${SEQNAME}.mp4 ;;
esac
echo "+------- build of $SEQNAME done"
+45 -21
View File
@@ -6,22 +6,17 @@
#include "globals.inc"
#include "colors.inc"
#include "metals.inc"
#include "textures.inc"
#include "stones.inc"
#include "contexte.inc"
#include "elements.inc"
#declare NO_DYNAMIC = 1;
#include "all.inc"
// =======================================================
#declare R_planete = 2.1;
#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.11;
#local HC = R_planete * 0.12;
#local BN = R_planete * 3;
difference {
@@ -32,7 +27,9 @@ difference {
box { <-BN, -BN, -HC>, <BN, BN, HC> }
}
texture {
pigment { color Gray10 }
pigment { color rgb <0.20, 0.30, 0.10> }
normal { dents 0.38 scale 0.5}
finish { phong 0.80 reflection 0.05 }
}
}
@@ -40,8 +37,8 @@ texture {
{
sphere { 0, R_planete }
texture {
pigment { color Gray80 }
finish { reflection 0.500 }
pigment { rgb <0.40, 0.50, 0.70> }
finish { metallic 0.50 reflection 0.55 }
}
}
@@ -54,23 +51,50 @@ union {
}
// =======================================================
#local RO = 4.10;
#local CK = NormClock * 7.87;
#local RO = 5.39;
#local CK = NormClock * 13.37;
#declare PosX = RO * sin(CK);
#declare PosY = 0;
#declare PosZ = RO * cos(CK);
object { HexaCone
rotate -y*CK translate <PosX, PosY, PosZ>
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>
}
object { Planete rotate (-clock*0.21)*y }
light_source { <19, 7, 14>, rgb <0.77, 0.79, 0.80> }
#declare PosX = RO * 1.5 * sin(CK+3.14);
#declare PosY = 0;
#declare PosZ = RO * cos(CK+3.23);
object { Trident_A ()
rotate <clock*1.3, 0, clock*0.7>
rotate y*CK*99.22 translate <PosX, PosY, PosZ>
}
#declare PosX = RO * sin(CK+5.14);
#declare PosY = 0;
#declare PosZ = RO * cos(CK+5.14);
object { HexaStar
rotate y*CK*99.22 translate <PosX, PosY, PosZ>
}
object { Planete rotate (-clock*0.31)*y }
light_source { <23, 10, 15>, rgb <0.77, 0.79, 0.80> }
// -------------------------------------------------------------
camera {
location <3, 2.01, 7.59>
location <9+NormClock, 1.60+(11*NormClock), 11.59>
look_at <0.0, 0.0, 0>
angle 58
right <image_width/image_height, 0, 0>
#if (0)
focal_point <0.0, 0.0, 0>
aperture 0.046
blur_samples 30
#end
angle 61 - (5*NormClock)
}
+36
View File
@@ -0,0 +1,36 @@
/*
* 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 CamZ = -2.5;
#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, CamZ>
look_at <LatX, LatY, LatZ>
right <image_width/image_height, 0, 0>
angle 65 + (NormClock * 15)
}
+18 -18
View File
@@ -7,24 +7,23 @@
#include "globals.inc"
#include "colors.inc"
#include "metals.inc"
#include "textures.inc"
#declare NO_DYNAMIC = 0;
#include "all.inc"
#include "contexte.inc"
#include "elements.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 }
#declare PosX = 0.333;
#declare PosY = 1.20 + (NormClock*0.22);
#declare PosZ = (NormClock-0.5) * 34.22;
object { HexaCone translate <PosX, PosY, PosZ> }
#if ( (clock < 111) )
#if ( (clock < 181) )
light_source {
<3, 0.30, -8> color Blue
spotlight
@@ -35,23 +34,24 @@ light_source {
}
#end
#if ( (clock > 230) )
#if ( (clock > 230) & (clock < 340) )
light_source {
<2, 0.30, -2> color White
<2, 0.30, -2> color Green
spotlight
radius .044
falloff 2
tightness 3
point_at <PosX, PosY, PosZ>
point_at <PosX, PosY-0.10, PosZ>
}
#end
camera {
location <-1.56, 1.03, 9.76>
look_at <PosX, PosY, PosZ>
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 36
angle 32
}
+38
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
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 5.1
}
+18 -25
View File
@@ -1,42 +1,35 @@
/*
* H E X A C O N E
* H E X A C O N E - S C E N E
* nouveau projet Thu Dec 5 11:37:05 AM UTC 2024
* The first one...
*/
#version 3.7;
#include "globals.inc"
#include "colors.inc"
#include "metals.inc"
#include "textures.inc"
#declare NO_DYNAMIC = 0;
#include "all.inc"
#declare NormClock = clock / 360.0;
#include "contexte.inc"
#include "elements.inc"
// ---------------------------------------------------------
object { Le_Decor }
object { HexaCone
rotate < 3, 0, -4>
rotate y*17 translate y*1.11 }
#declare CK = 56 + (clock * 1);
#declare Dcam = 2.14;
#declare CamX = Dcam * sin(radians(CK));
#declare CamZ = Dcam * 1.20 * cos(radians(CK));
#declare CamZ = CamZ - 0.11;
#declare CK = 144 + (clock * 0.25);
#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.17>;
camera {
location <CamX, 1.23, CamZ>
look_at Lat
focal_point Lat
aperture 0.046
blur_samples 30
location <CamX, 1.97, CamZ>
look_at <0.03, LatY, 0.17>
right <image_width/image_height, 0, 0>
// focal_point Lat
// aperture 0.046
// blur_samples 30
angle 70
}
/**
light_source { <CamX*1.3, 1.35, 1.2+(CamZ*1.3)>,
rgb <0.47, 0.65, 0.49> }
**/
+125
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
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, 92, 289> ;
#declare Fin = < 36, 83, -2> ;
#declare Pos = sqrt(NormClock);
#declare PosCam = Interpolate(Debut, Fin, Pos);
#declare LatX = 0.614 * sin(NormClock*13.37);
#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 62
}
+53 -1
View File
@@ -1,4 +1,56 @@
# Tools
Build system and utilities.
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
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
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
View File
@@ -0,0 +1,10 @@
# size of the video
Img_Width=1024
Img_Height=720
# for imagemagick
TEXTCOL="Yellow"
STROKOL="Green"
NBFRAMES=450
+3 -2
View File
@@ -2,11 +2,12 @@
set -e ; set -u
# set default value's)
srcdir="essai"
if [ $# == 1 ]
then
srcdir=$1
else
srcdir="essai"
fi
source tools/fonctions.sh
+23 -6
View File
@@ -2,6 +2,23 @@
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
@@ -14,7 +31,6 @@ if [ $load -gt 10 ] ; then
sleep $attente
fi
}
# --------------------------------------------------------------
ff_encodage()
@@ -22,20 +38,21 @@ ff_encodage()
SRCDIR="$1"
FILMNAME="$2"
echo "Encoding $SRCDIR to $FILMNAME" | tee -a WS/log
# echo "Encoding $SRCDIR to $FILMNAME" | tee -a WS/log
ffmpeg -nostdin \
-y -r 30 -f image2 -i frames/${SRCDIR}/%05d.png \
-metadata artist='--[ tTh ]--' \
-metadata title='-- HexaCone --' \
-metadata artist='--[ tTh des Bourtoulots ]--' \
-metadata title='--[ la famille HexaCone ]--' \
-c:v libx264 \
-pix_fmt yuv420p \
-tune film \
$FILMNAME
# wc -c $FILMNAME | tee -a WS/log
}
# --------------------------------------------------------------
#
# celui-ci n'est pas terminé !
#
mp_encodage()
{
#
+96 -29
View File
@@ -2,10 +2,13 @@
set -e ; set -u
source tools/config.sh
IDX=0
SPOOL="frames/Spool"
SEQNAME="none"
TMP="WS/tmp.png"
FONTE="FreeSerif-Bold"
source tools/fonctions.sh
@@ -14,7 +17,7 @@ source tools/fonctions.sh
# file to the spool dir, so
# you can use it for tmp pics.
#
addfile ()
copy_a_file ()
{
src="$1"
dstname=$(printf "%s/%05d.png" $SPOOL $IDX)
@@ -24,86 +27,150 @@ cp -f $src $dstname
IDX=$(( IDX + 1 ))
}
# -------------------------------------------------------
linkfarm ()
{
SRC="frames/$1"
echo "linkfarm $SRC" | tee -a WS/log
# 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 center \
-font $FONTE \
-pointsize 139 \
-kerning 8 \
-fill $TEXTCOL \
-strokewidth 3 -stroke $STROKOL \
-annotate +0+0 "$1" \
${INTER}
local NBRE=30
for foo in $(seq 0 $NBRE)
do
addfile "$SRC/00000.png"
copy_a_file $INTER
# :
done
for foo in $(seq 0 $NBRE)
do
copy_a_file "$SRC/00000.png"
done
for src in "$SRC"/*
do
addfile $src
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
addfile "$SRC/00359.png"
copy_a_file "$PIC"
done
sync
}
# -------------------------------------------------------
faire_le_titre ()
{
echo "faire le titre"
local NBRE=190
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=$(( 500 - ( foo / 2 ) ))
convert "WS/negatif.png" \
-gravity north \
-font Courier-Bold \
-pointsize 96 \
-fill white \
-annotate +0+${Ypos} "HexaCone(s)" \
Ypos=$(( -175 + foo ))
convert ${GRAY} \
-gravity north \
-font $FONTE \
-pointsize 140 \
-kerning 6 \
-fill $TEXTCOL \
-strokewidth 3 -stroke $STROKOL \
-annotate +0+${Ypos} "La famille\nHexaCone" \
${TMP}
# identify ${TMP}
addfile ${TMP}
copy_a_file ${TMP}
printf "."
done
echo
}
# -------------------------------------------------------
faire_la_fin ()
{
local NBRE=120
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 + 100 ))
convert "WS/negatif.png" \
Ypos=$(( foo + 20 ))
convert ${GRAY} \
-gravity north \
-font Courier-Bold \
-font $FONTE \
-pointsize 92 \
-kerning 5 \
-fill $TEXTCOL \
-strokewidth 2 -stroke $STROKOL \
-annotate +0+${Ypos} \
"un film de\ntTh des Bourtoulots" \
-pointsize 48 \
-fill white \
-strokewidth 2 -stroke gray30 \
-annotate +0+${Ypos} \
"tTh des Bourtoulots\n2025" \
-strokewidth 1 \
-gravity south \
-annotate +0+110 "${datetime}" \
${TMP}
# identify ${TMP}
addfile ${TMP}
copy_a_file ${TMP}
printf "."
done
echo
}
# -------------------------------------------------------
rm frames/Spool/*.png
figlet "Link farmer"
rm -f frames/Spool/*.png
tools/plot-timing.sh
faire_le_titre
linkfarm approche
linkfarm hexacone
linkfarm remote
linkfarm hexabenz
linkfarm orbite
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 full.mp4
ff_encodage Spool the-hexacone-family.mp4
nb=$(( $IDX - 1 ))
echo "linkfarmed $nb files" | tee -a WS/log
+71
View File
@@ -0,0 +1,71 @@
#!/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 "%03d" ${frame} | tr '01' 'ol')
# echo $frame $img $txt
convert ${TMPIMG} \
-font Courier-Bold \
-pointsize 48 \
-kerning 4 \
-strokewidth 1 \
-fill ${STROKOL} -stroke ${TEXTCOL} \
-gravity south-west \
-annotate +25+5 "$txt" \
-gravity south-east \
-annotate +25+5 "$sqn" \
${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
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
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 25% \
$imgC
done
ff_encodage TMP motion-blurred.mp4
# -------------------------------------------------------
+40 -18
View File
@@ -2,55 +2,77 @@
set -ue
source tools/config.sh
TMPFILE="/dev/shm/plot-timing.tmp"
IMAGE="timing.png"
echo ; figlet "plot timing" ; echo
wc WS/mp4.timing | tee -a WS/log
if [ $# == 1 ]
then
sequence=$1
else
sequence="escadrille"
fi
grep "passage" WS/mp4.timing | awk ' \
# 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 { \
nbrames=360; \
for (foo=0; foo<nbrames; foo++) { \
# 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; \
if (maxi[$2] < $3) maxi[$2] = $3;
last[$2] = $3 \
} \
\
END { \
for (foo=0; foo<nbrames; foo++) { \
for (foo=0; foo<nbframes; foo++) { \
if (count[foo] > 0) { \
mean = accu[foo] / count[foo]; \
printf "%4d %4f %4d %4d\n", foo, mean, \
mini[foo], maxi[foo]; \
printf "%4d %4f %4d %4d %4d\n",
foo, mean,
mini[foo], maxi[foo],
last[foo];
} \
} \
} \
' > $TMPFILE
# cat -n $TMPFILE | tail # ; exit
# head $TMPFILE ; exit
gnuplot << __EOC__
set term png size 1024,768
set term png size $Img_Width,$Img_Height
set output "timing.png"
set grid
set xrange [:360]
set xrange [:450]
set yrange [0:]
set title "HexaCone : temps de rendu"
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 t "maximum", \
"/dev/shm/plot-timing.tmp" u 1:3 w l t "minimum", \
"/dev/shm/plot-timing.tmp" u 1:2 w l t "moyenne",
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 $IMAGE WS/negatif.png
convert -negate -level -33% $IMAGE WS/negatif.png
+27 -24
View File
@@ -7,34 +7,37 @@
#include "globals.inc"
#include "colors.inc"
#include "metals.inc"
#include "textures.inc"
#declare NO_DYNAMIC = 0;
#include "all.inc"
#include "contexte.inc"
#include "elements.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 }
light_source { <-16, 17, -24>, rgb <0.51, 0.65, 0.40> }
#declare TrX = 1.34 * sqrt(NormClock);
#declare TrY = 0.90 + (3.5 * Cos_01(NormClock));
#declare TrZ = 9.999 * sqrt(NormClock);
#declare TrH = <TrX, TrY, TrZ>;
#declare RrY = 57 * sqrt(NormClock);
object { HexaCone rotate y*RrY translate TrH }
// object { Repere scale 2 }
#declare CamY = 19 - (4.5*NormClock);
#declare LatY = -3 + NormClock;
#declare CamY = 47 - (9.50 * Cos_01(NormClock));
#declare LatY = -4 + ( 2.12 * NormClock);
camera {
location <-3.60, CamY, 21.09>
look_at <0, LatY, 0>
focal_point <2, 1, 12>
aperture 0.046
blur_samples 30
angle 45 + (5*NormClock)
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
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
// ------------------------------------------------------
// ------------------------------------------------------
+45
View File
@@ -0,0 +1,45 @@
/*
* 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 DY_cam = 1.0;
#declare DZ_cam = -5.4 * sin(CK);
#declare DY_lat = 2.10 + NormClock;
#else
#declare DX_cam = -4.9 * sin(CK);
#declare DY_cam = 9.9 + (5*NormClock);
#declare DZ_cam = -2.6 * cos(CK);
#declare DY_lat = 0;
#end
#declare Loc_cam = <DX_cam, DY_cam, DZ_cam> + Pos_RedB_2;
camera {
location Loc_cam
look_at Pos_RedB_2 + <0, DY_lat, 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
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_B }
#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
// =======================================================