Compare commits

...

44 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
36 changed files with 714 additions and 361 deletions

View File

@@ -21,9 +21,13 @@ PNG: essai.png scene.png topview.png passage.png \
hexacone.png remote.png survol.png cutoff.png \
carto.png hexawood.png bubblecut.png \
circular.png panoramic.png splined.png \
trident.png approche.png hexastar.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$@

View File

@@ -19,6 +19,7 @@
- Songer à un cadriciel pour la piste son.
- Trouver un compositeur et les musiciens.
- Étudier à fond la documentation de `sox`
## ... en bref ...

View File

@@ -15,11 +15,11 @@ object { Le_Decor }
// =======================================================
#declare LocX = 0;
#declare LocY = 3.6 - NormClock;
#declare LocZ = -220 + (120 * NormClock);
#declare LocX = -0.5 + Cos_010(NormClock);
#declare LocY = 2.6 - NormClock;
#declare LocZ = -200 + (118 * NormClock);
#declare LocCam = <LocX, LocY, LocZ>;
#declare LatCam = <0, 1.2, 0>;
#declare LatCam = <0, 0.92+NormClock, 0>;
// object { Repere scale 5 translate Interpolate(LocCam, LatCam, 0.50) }

View File

@@ -71,7 +71,7 @@ merge {
#if (R < 0.63)
texture { T_Grnt6 scale 4 }
#else
texture { T_Stone34 scale 3 }
texture { T_Stone34 scale 3+rand(Rng1) }
#end
}
#end // macro
@@ -82,7 +82,10 @@ merge {
#local K = 0.36;
box { <-L, 0, -K>, <L, Epp, K> }
cylinder { <0, Epp, -K*0.9>, <0, Epp, K*0.9>, K }
texture { T_WIP_rasta }
#local R = rand(Rng1);
#if (R < 0.63) texture { T_Crack3 } // XXX
#else texture { T_Grnt19a }
#end
}
#end // macro

View File

@@ -16,16 +16,16 @@ object { Le_Decor }
// =======================================================
#declare R_around = 128;
#declare R_around = 120;
#declare CK = 2.9 + (3.141592654 * NormClock);
#declare CamX = R_around * cos(CK);
#declare CamY = 15.777 + (4*Cos_010(NormClock));
#declare CamZ = R_around * sin(CK);
#declare CamY = 15 + (6*Cos_010(NormClock));
#declare CamZ = R_around * 1.8 * sin(CK);
camera {
location <CamX, CamY, CamZ>
look_at <0, 2, 0>
look_at <0, 0.5 + NormClock, 0>
right <image_width/image_height, 0, 0>
angle 45
angle 36
}

View File

@@ -7,7 +7,7 @@
#include "globals.inc"
#declare NO_DYNAMIC = 1;
#declare NO_DYNAMIC = 0;
#include "all.inc"
// =======================================================

View File

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

View File

@@ -26,12 +26,12 @@ object { Le_Decor }
#declare AV = 0.070;
#declare LatX = R_circ * 0.96 * cos(CK + AV);
#declare LatY = 2.65;
#declare LatZ = R_circ * 0.97 * sin(CK + AV);
#declare LatZ = R_circ * 0.95 * sin(CK + AV);
camera {
location <CamX, CamY, CamZ>
look_at <LatX, LatY, LatZ>
right <image_width/image_height, 0, 0>
angle 60
angle 64
}

View File

@@ -11,8 +11,8 @@
#macro Trois_Portiques (Dist)
union {
object { Portique_A () }
object { Portique_A () scale <1, 1.15, 1> translate z*5 }
object { Portique_A () translate z*10 }
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
@@ -22,17 +22,14 @@ union {
* essai du 12 mars 2025
*/
#declare RedB_0_X = 19;
#declare RedB_0_Z = 29;
#declare RedB_0_X = 19; #declare RedB_0_Z = 29;
#declare RedB_1_X = -24;
#declare RedB_1_Z = 8;
#declare RedB_1_X = -34; #declare RedB_1_Z = 11;
#declare RedB_2_X = 36;
#declare RedB_2_Z = -21;
// 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 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>;
@@ -69,7 +66,7 @@ union {
#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 }
#else texture { T_Stone6 scale 1+rand(Rng1) }
#end
#undef R
}
@@ -112,7 +109,7 @@ union {
#macro Les_GyroPhares ()
union {
#local E = SzSol * 0.455;
#local E = SzSol * 0.496;
#for (Idx, 0, 359, 60)
#local Ang = radians(Idx+9.33);
#local Dx = E * sin(Ang);
@@ -125,11 +122,10 @@ union {
/* ======================================================= */
/* 11 avril 2025, je pose un grand cercle d'hexapoles
* 9 octobre 2025, je rajoute un rail circulaire
* les navettes qui circulent sont dans 'dynamic.inc'
*/
#declare Les_HexaPoles = object
{
union {
#for (Ang, 0, 359, 6)
#local De = 3.6 + (0.5*rand(Rng1));
@@ -198,26 +194,6 @@ union {
}
}
}
/* ------------------------------------------------------------ */
#declare RHBlo = 0.24;
#declare RHBlo2 = RHBlo * 0.666;
#declare HexaBlob = object
{
blob {
// threshold 0.01 + NormClock
threshold 0.01
sphere { <0, 0, 0>, RHBlo, 1 }
#local E = RHBlo * 1.210;
#local W = 0.15;
sphere { <-E, 0, 0>, RHBlo2, W }
sphere { < E, 0, 0>, RHBlo2, W }
sphere { < 0, -E, 0>, RHBlo2, W }
sphere { < 0, E, 0>, RHBlo2, W }
sphere { < 0, 0, -E>, RHBlo2, W }
sphere { < 0, 0, E>, RHBlo2, W }
}
}
/* ======================================================= */
@@ -233,11 +209,12 @@ blob {
#for (Idx, 0, 5)
#local Angle = (Idx + 0.19) * 1.09; // magic numbers ?
#local Px = sin(Angle) * (SzSol * 0.98);
#local Pz = cos(Angle) * (SzSol * 1.02);
#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")
#write (Trid, "Def_", Idx, " ", NormClock, " ", Px, " ", Pz, "\n")
#end
// put the coords in the array.
#declare UnderHoles[Idx] = <Px, 0, Pz>;
@@ -262,12 +239,20 @@ difference {
}
/* 10 fev 2026, on place des bordures autour des trous */
/* -> xperiment.inc */
/* voir aussi -> xperiment.inc */
#declare Les_Bordures = object
{
union {
#for (foo, 0, 5)
#local YHB = (0.08 + (0.5*rand(Rng1)) * y);
object { HoleBorder (1.14) translate YHB + UnderHoles[foo] }
#end
// #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
@@ -302,12 +287,12 @@ rotate -19 * y
union {
/* a l'interieur du 'circular' */
object { Chose () translate <-25, 0, -31> }
object { Chose () translate < 20, 0, -32> }
object { Chose () translate < 20, 0, -36> }
/* a l'exterieur du 'circular' */
#for (foo, 0, 359, 18)
#local CK = radians(foo + (9*rand(Rng1)));
#local DX = 66 * sin(CK);
#local DZ = 64 * cos(CK);
#local CK = radians(foo + (8*rand(Rng1)));
#local DX = 71 * sin(CK);
#local DZ = 67 * cos(CK);
object { Chose () translate < DX, 0, DZ> } // XXX
#end
}
@@ -331,7 +316,7 @@ union {
#if (1)
light_source {
<-5, 5.60, 18>
<-8, 5.60, 18>
#if ( (clock > 290) & (clock<344) )
#local Couleur = rgb <0.20, 0.20, 0.90>;
#else
@@ -360,7 +345,7 @@ sky_sphere {
[ 0.9 color rgb <.5, .5, .47> ]
[ 1.0 color Gray20 ]
}
turbulence 3.14159 + 0.84 * Cos_010(NormClock)
turbulence 2.222 + 0.84 * Cos_010(NormClock)
scale 1.600
// translate -1
}
@@ -376,6 +361,7 @@ sky_sphere {
{
union {
object { Underground }
object { Les_Bordures }
#include "groundbase.inc"
object { La_GroundBase }
@@ -393,11 +379,13 @@ union {
object { QuadriLight }
object { Les_GyroPhares () }
object { Les_HexaPoles }
object { Horloge rotate y*27 translate < 3, 0, -30> }
object { HorlogeDouble rotate y*(114*NormClock)
translate < 8, 0, -30> }
object { Les_Choses }
object { Les_Arches (1.9) rotate y*132 translate <-34, 0, -26> }
object { Les_Arches (1.9) rotate y*112 translate <-34, 0, -26> }
object { Les_Cahutes () rotate y*17 translate <2, 0, -40> }
// 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> }
@@ -412,8 +400,8 @@ union {
#end // for
/* --------- les trucs dans le Y positif */
object { OpenBox(1.6, 0.11) translate <-3, 3.58, 112> }
object { OpenBox(1.6, 0.11) rotate y*45 translate <3, 6.7, 166> }
object { Blob_Boxed scale 4 translate <-3, 3.58, 112> }
object { Blob_Boxed scale 4 rotate y*45 translate <3, 6.7, 161> }
}
}

View File

@@ -18,7 +18,7 @@
#declare Kbox = (2.03*NormClock);
difference {
object { HexaCone () rotate <3-(6*NormClock), 5, -3> }
object { HexaCone () rotate <9-(11*NormClock), 6, -7> }
box { -1, 1 translate z*Kbox }
translate y*TY + POS_Cutoff
}
@@ -29,7 +29,7 @@ difference {
// =======================================================
light_source {
<-24, 0.4, -1>
<-14, 0.4, -1>
colour Orange
parallel
point_at y*TY + POS_Cutoff
@@ -40,7 +40,7 @@ object { Le_Decor }
// =======================================================
#local CamX = POS_Cutoff.x + 3.5 + (3.14*Cos_01(NormClock));
#local CamY = 2.1 + (1.11*sqrt(NormClock));
#local CamY = 2.01 + (1.14*sqrt(NormClock));
#local CamZ = POS_Cutoff.z + 4.30 - (1.02*NormClock);
camera {

View File

@@ -5,25 +5,25 @@
// rajout d'une patrouille en vol
// 2 janvier 2026
#local CK = clock / 150; // en radians
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 {
object { Patrouille }
rotate y*degrees(CK)
translate <Xp, 79+(11*NormClock), Zp>
translate <-30, 0, 0>
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.02; // radians
#local CK = (NormClock+(foo*0.0200)) * 4.05; // radians
#declare Xpos = R_circular * sin(CK);
#declare Zpos = R_circular * cos(CK);
#declare AR = degrees(CK);
@@ -36,10 +36,12 @@ object {
/// =======================================================
/* des trucs autour des trous du sol. */
// object { Les_HexaBalls rotate y*clock translate UnderHoles[2] }
// 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
@@ -48,11 +50,11 @@ object { Les_Machins rotate y*clock translate UnderHoles[5] }
{
#local K = 1.39;
union {
object { HexaBenz () rotate y*90 translate <-K, 1.83, 0> }
object { HexaBenz () translate < K, 1.66, 0> }
object { HexaBenz () rotate y*94 translate <-K, 1.86, 0> }
object { HexaBenz () rotate -x*7 translate < K, 1.96, 0> }
}
}
object { BiBenz rotate -y*(clock*0.26) translate Pos_RedB_0 }
object { BiBenz rotate -y*(clock*0.28) translate Pos_RedB_0 }
/*
* deux hexacones se tournent autour
@@ -62,7 +64,7 @@ object { BiBenz rotate -y*(clock*0.26) translate Pos_RedB_0 }
#local K = 1.27;
union {
object { HexaCone () rotate y*90 translate <-K, 1.7, 0> }
object { HexaCone () rotate <4, 1, 7> translate < K, 1.9, 0> }
object { HexaCone () rotate <9, 1, 7> translate < K, 1.9, 0> }
}
}
object { BiCone rotate -y*(Cos_010(NormClock)*65.38) translate Pos_RedB_1 }

View File

@@ -20,7 +20,7 @@
#for (idZ, -3, 3)
#local posX = (idX * 4.76) + (rand(Rng1)-0.5);
#local posY = 3.2 + (NormClock * 12 * (rand(Rng1)+0.95));
#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);
@@ -56,12 +56,14 @@ object { Le_Decor }
#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, CamZ>
look_at <0.0, LatY, 0>
look_at <LatX, LatY, LatZ>
right <image_width/image_height, 0, 0>
angle 56 - (28 * NormClock)
angle 54 - (35 * NormClock)
}

384
essai.pov
View File

@@ -5,7 +5,7 @@
#version 3.7;
#declare DEBUG_LEVEL = 1; // un nouveau test ?
// #declare DEBUG_LEVEL = 1; // un nouveau test ?
#include "globals.inc"
#declare NO_DYNAMIC = 1;
@@ -16,23 +16,59 @@
-* __________________________
*/
// =======================================================
// nouveau du 3 janvier 2026
#local Horloge2 = object
{
object { Horloge scale <1, 0.24, 1> rotate -x*90
translate x*0.45 }
// nouveau du 25 février 2026
#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 }
}
#declare HorlogeDouble = object
#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 {
box { <-3.20, -0.08, -0.07>, <3.20, 1.61, 0.07>
texture { LeGris } }
#local EC = 0.22;
object { Horloge2 rotate y*180 translate z*EC }
object { Horloge2 translate -z*EC }
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> }
}
scale 0.8
translate y*2.35
}
// =======================================================
/*
@@ -46,7 +82,6 @@ translate y*2.35
#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;
@@ -55,11 +90,9 @@ union {
#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 }
@@ -75,30 +108,54 @@ union {
}
#end // for Foo
}
#ifdef (DEBUG_LEVEL)
#fclose Log
#end // debug level
#end // macro
// =======================================================
/* nouveau du 20 octobre 2025
* Un semblant de wagonnet qui va tourner sur le
* rail circulaire
#macro HexoFlash_body (Ra, He)
merge {
cylinder { 0, y*He, Ra }
sphere { y*He, Ra }
/* XXX
* faire la place pour la lampe
*/
#declare Les_Wagonnets = object
{
#local L = 2.4;
texture { LeGris }
}
#end // macro
#macro HexoFlash_light (Ra, Val)
difference {
sphere { 0, Ra*1.46 }
#local WB = 0.08;
#local H1 = -0.10;
#local H2 = 0.10;
union {
object { Wagonnet_0(L) translate <0, 1, 1.9> }
object { Wagonnet_0(L+1) translate <0, 3+NormClock, 0> }
object { Wagonnet_0(L) translate <0, 1, -1.8> }
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
#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
// =======================================================
/*
@@ -119,81 +176,44 @@ merge {
}
}
}
// -------------------------------------------------------
#declare BasicTextures = object
// ------------------------------------
#declare Texture_du_Vase = texture
{
#local TR = 2.20;
union {
object { Obj_BasicTexture texture { R_Texture }
translate <TR*1.4, 0, 0> }
object { Obj_BasicTexture texture { G_Texture }
translate <0, 0, -1> }
object { Obj_BasicTexture texture { B_Texture }
translate <0, 0, TR/2> }
object { Obj_BasicTexture texture { Y_Texture }
translate < TR, 0, TR> }
object { Obj_BasicTexture texture { M_Texture }
translate <-TR, 0, TR> }
object { Obj_BasicTexture texture { C_Texture }
translate <-TR, 0, -TR> }
object { Repere scale 1.5 translate y*2.5 }
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>
}
// -------------------------------------------------------
/*
* Après lecture de la doc (et une bonne 8.6), j'ai
* décidé de me lancer dans la création de textures
*/
#declare T_WIP_R = texture
{
pigment { color Red }
finish { phong 0.42 ambient 0.50 }
}
#declare T_WIP_G = texture
{
pigment { color Green }
finish { phong 0.23 ambient 0.30 }
}
#declare T_WIP_B = texture
{
pigment { color Blue }
finish { phong 0.23 ambient 0.50 }
}
// deuxieme lot ----------------------
#declare T_WIP_1 = texture
{
pigment { color <0.36, 0.6, 0.79> }
normal { dents 2.94 scale 0.5 }
finish { specular 0.40 ambient 0.69 }
finish { phong 0.25 }
}
// -------------------------------------------------------
// the place to try new textures
#declare ProtoTextures = object
{
#local TX = 2.35;
#local TX = 2.45;
#local TZ = 2.95;
#local Kro = 32 + (NormClock * 17);
#local Kro = 32 + (NormClock * 666);
union {
object { Obj_BasicTexture texture { T_WIP_R }
object { Obj_BasicTexture texture { R_Texture }
rotate y * (rand(Rng1)*Kro)
translate <TX, 0, -TZ> }
object { Obj_BasicTexture texture { T_WIP_G }
object { Obj_BasicTexture texture { Texture_du_Vase }
rotate y * (rand(Rng1)*Kro)
translate <TX, 0, 0> }
object { Obj_BasicTexture texture { T_WIP_B }
object { Obj_BasicTexture texture { B_Texture }
rotate y * (rand(Rng1)*Kro)
translate <TX, 0, TZ> }
object { Obj_BasicTexture texture { T_WIP_1 }
object { Obj_BasicTexture texture { T_WIP_dents }
rotate y * (rand(Rng1)*Kro)
translate <-TX, 0, TZ> }
object { Obj_BasicTexture texture { T_WIP_rasta }
@@ -209,36 +229,145 @@ union {
// =======================================================
/* Les choses, c'est l'espèce de vase avec des tiges
qui bougent, je devrais trouver un nom plus parlant */
qui bougent, je devrais trouver un nom plus parlant.
- - - - -
Mieux, on garde la chose mais on en dérive le vase
*/
// ------------------------------------
#macro Vase_le_corps_a ()
intersection {
box { <-5, -5, -5>, <5, 0, 5> }
difference {
sphere { 0, 0.34 }
sphere { 0, 0.30 }
scale <1, 1.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 { Chose () translate < 2.2, 0, 2.32> }
object { Chose () translate <-2.9, 0, 3.91> }
object { Chose () translate < 2.9, 0, -4.07> }
object { Chose () translate <-4.5, 0, -4> }
object { Repere translate 0.05*y }
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, 30)
#declare E = 12 + (3*rand(Rng1));
#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.52)
#if (R > 0.76)
object { GyroPhare () translate <Dx, 0, Dz> }
#elseif (R > 0.36)
object { Colonne_A (3.8)
rotate y*(90*rand(Rng1))
#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 { Colonne_A (2.8)
rotate y*(90*rand(Rng1))
object { HexoFlash (0.14, 1.85 + (0.444*rand(Rng1)) )
translate <Dx, 0, Dz> }
#end
#end // for
@@ -252,11 +381,11 @@ object { GyroTrucs }
#declare Architecture = object
{
union {
object { Portique_A () translate z*4 }
object { Portique_A () scale 2 translate z*2 }
object { Portique_A () scale 1.5 }
object { Portique_A () scale 2 translate -z*2 }
object { Portique_A () translate -z*4 }
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 }
}
}
@@ -264,50 +393,43 @@ union {
#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 {
<-18, 54, -7>
colour Gray50
<-32, 40, -7>
colour <Rv, Gv, Bv>
parallel
point_at 0
}
// ------------------------------------------------------ ##
#declare Selector = mod(int(clock/80), 8);
#declare Selector = int(clock/90);
#debug concat("Selector = ", str(Selector, 6, 0), "\n")
#declare AngleCam = 17 - 3*Cos_01(NormClock);
#declare AngleCam = 27 - 3*Cos_01(NormClock);
#switch (Selector)
#case (0)
object { Des_Choses }
#local AngleCam = 17;
#break
#case (1)
object { Architecture rotate -y*(clock*0.666) }
#local AngleCam = 31.0;
object { Des_Anemones }
object { Repere translate y*0.08 }
#break
#case (2)
object { Le_ConeStack () translate y*0.20 }
object { HoleBorder_B (2.222) }
object { ProtoTextures }
#break
#case (3)
object { HorlogeDouble rotate -y*(5*clock) }
object { Blob_Boxed scale 3 translate y*2 }
// object { Repere translate y*1 }
#break
#case (4)
object { Trident_A ()
scale 1.8
rotate <35, 0, 12> translate 2.2*y
rotate -y*(clock*2) }
#break
#case (5)
object { Les_Boules translate y*0.8 }
#break
#case (6)
object { HexaStar scale 3 translate y*3 }
#break
#case (7)
#local Pos = <0.5-NormClock, 0, 0>;
object { ProtoTextures rotate -y*clock translate 0 }
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
@@ -320,17 +442,19 @@ plane {
// =======================================================
#local CamX = -2.7 + (1.8*Cos_010(NormClock));
#local CamY = 0.61 + (1.1*exp(NormClock));
#local CamY = 0.61 + (0.9*exp(NormClock));
#local CamZ = -5.777 + (1.2*Cos_01(NormClock));
#local K = 8.6;
#local CamX = CamX * K;
#local CamY = CamY * K * 0.61;
#local CamY = CamY * K * 0.41;
#local CamZ = CamZ * K;
camera {
orthographic
location <CamX, CamY, CamZ>
look_at <0, 1.6, 0>
look_at <0, 1.5, 0>
right <image_width/image_height, 0, 0>
angle AngleCam
}

View File

@@ -111,6 +111,36 @@ union {
#end // macro
/* ======================================================= */
/* ------------------------------------------------------------ */
#declare HexaBlob = object
{
#declare RHBlo = 0.24;
#declare RHBlo2 = RHBlo * 0.777;
blob {
// threshold 0.01 + NormClock
threshold 0.07
sphere { <0, 0, 0>, RHBlo, 1 }
#local E = RHBlo * 1.210; // XXX
#local W = 0.15;
sphere { <-E, 0, 0>, RHBlo2, W }
sphere { < E, 0, 0>, RHBlo2, W }
sphere { < 0, -E, 0>, RHBlo2, W }
sphere { < 0, E, 0>, RHBlo2, W }
sphere { < 0, 0, -E>, RHBlo2, W }
sphere { < 0, 0, E>, RHBlo2, W }
}
texture { T_WIP_bluewave scale 0.21 rotate <clock, clock/2, clock/3> }
}
/* ======================================================= */
/*
* 18 février 2026, cette horloge mérite vraiment
* d'être refaite de fond en comble, parce que ce
* code est vraiment gruik.
*/
#declare Horloge = object
{
#local Texte = str(NormClock, 6, 3);
@@ -119,13 +149,31 @@ union {
text {
// ttf "datas/DSEG7Classic-Regular.ttf" Texte 0.1, 0
ttf "datas/ComicMono-Bold.ttf" Texte 0.1, 0
texture { tPlasticPrune }
texture { tPlasticBlue }
}
scale 2.10
scale 1.96
rotate 90*x
translate <-4.5, 0.043, 0>
translate <-4.5, 0.046, 0>
}
// ----------------------------------------------------------
// nouveau du 3 janvier 2026
#local Horloge2 = object
{
object { Horloge scale <1, 0.28, 1> rotate -x*90
translate <0.802, 0.18, 0> }
}
#declare HorlogeDouble = object
{
union {
box { <-3.10, 0.0, -0.06>, <3.10, 1.68, 0.06>
texture { LeGris } }
#local EC = 0.18;
object { Horloge2 rotate y*180 translate z*EC }
object { Horloge2 translate -z*EC }
}
scale 0.42
translate y*0.50
}
// =======================================================
/*
* need more work !
@@ -155,7 +203,7 @@ prism {
#macro HexaPole_tubes ()
#local R = 0.033;
#local E = 0.49;
#local H = H_cone*0.705;
#local H = H_cone*0.666;
union {
#for (A, 0, 359, 60)
#local Xp = E * cos(radians(A));
@@ -202,6 +250,7 @@ union {
cylinder { < D, -D, -D>, < D, D, -D>, R }
cylinder { <-D, -D, D>, <-D, D, D>, R }
cylinder { < D, -D, D>, < D, D, D>, R }
/* en bas */
cylinder { < D, -D, D>, <-D, -D, D>, R }
cylinder { < D, -D, -D>, <-D, -D, -D>, R }
@@ -214,9 +263,29 @@ union {
cylinder { <-D, D, D>, <-D, D, -D>, R }
cylinder { < D, D, D>, < D, D, -D>, R }
/* les 8 coins */
#local R2 = R * 1.38;
sphere { <-D, -D, -D>, R2 }
sphere { < D, -D, -D>, R2 }
sphere { <-D, -D, D>, R2 }
sphere { < D, -D, D>, R2 }
sphere { <-D, D, -D>, R2 }
sphere { < D, D, -D>, R2 }
sphere { <-D, D, D>, R2 }
sphere { < D, D, D>, R2 }
texture { Soft_Silver scale 6.50 }
}
#end
// ----------------------------------------------------------- ##
/* XXX +++ make this a #macro +++ */
#declare Blob_Boxed = object
{
union {
object { OpenBox(0.5, 0.01) }
object { HexaBlob rotate <clock*2.2, clock*2.7, clock*1.8> }
}
}
// =======================================================
/*
* first written macro for testing the generation of
@@ -224,7 +293,7 @@ union {
*/
#macro Bubble ()
sphere {
0, 0.070
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 }
@@ -249,7 +318,7 @@ union {
#declare Les_Machins = object
{
union {
#local Rk = 3.90 + NormClock;
#local Rk = 3.60 + NormClock;
#for (foo, 0, 359, 45)
#local Xpos = Rk * sin(radians(foo));
#local Zpos = Rk * cos(radians(foo));

3
gif89a/README.md Normal file
View File

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

View File

@@ -11,7 +11,7 @@ global_settings {
#include "stones.inc"
#include "woods.inc"
#declare Rng1 = seed(1121);
#declare Rng1 = seed(314);
#declare foo = rand(Rng1);
#declare Rng2 = seed(now*24*60*60);
#declare bar = rand(Rng2);
@@ -36,12 +36,12 @@ global_settings {
#declare H_gyro = 1.80;
#declare H_gylampe = 0.25;
#declare H_QuadriLight = 37;
#declare H_QuadriLight = 42;
#declare E_QuadriLight = SzSol * 1.35;
#declare R_circular = (SzSol * 1.60);
#declare R_hole = 3.1;
#declare R_hole = 3.1; // holes in the background
/* ------------------------------------------------------------ */
/*
@@ -57,8 +57,8 @@ finish { phong 0.33 ambient 0.33 }
#declare T_WIP_color = texture
{
#local V = (sin(clock*0.122) / 2) + 0.5;
pigment { color Cyan * V }
#local V = (sin(clock*0.142) / 2) + 0.5;
pigment { color Orange * V }
finish { phong 0.23 ambient 0.30 }
}
@@ -77,7 +77,7 @@ finish { phong 0.70 reflection 0.05 }
#declare T_Planete_B = texture
{
pigment { rgb <0.42, 0.50, 0.70> }
normal { dents 0.14 scale 0.5}
normal { dents 0.18 scale 0.5}
finish { metallic 0.50 reflection 0.33 }
}
/* ------------------------------------------------------------ */
@@ -123,7 +123,7 @@ finish { roughness 1.00 }
#declare tPlasticBlue = texture
{
pigment{rgb <0.50, 0, 2.0>}
pigment{rgb <0.20, 0, 2.0>}
finish {
ambient 0.1
diffuse 0.6
@@ -203,7 +203,7 @@ pigment {
[1.00 color Black ]
}
}
finish { phong 0.23 ambient 0.40 }
finish { phong 0.23 ambient 0.30 }
scale <3, 4, 3>
}
/* ------------------------------------------------------------ */
@@ -214,12 +214,12 @@ scale <3, 4, 3>
pigment {
wood
color_map {
[0.0 color Gray70 ]
[0.0 color Gray60 ]
[0.5 color Gray80 ]
[0.5 color Blue ]
[1.0 color Blue ]
}
// XXX rotate y*49
turbulence 0.04
translate <NormClock*0.1, sqrt(NormClock*0.4),
NormClock*0.333>
scale <0.2, 0.3, 1>
@@ -227,6 +227,33 @@ scale <3, 4, 3>
finish { phong 1 }
}
#declare T_WIP_redwave = texture
{
pigment {
wood
color_map {
[0.0 color Gray60 ]
[0.49 color Gray80 ]
[0.51 color Red ]
[1.0 color Red ]
}
turbulence 0.14
translate <NormClock*0.5, sqrt(NormClock*0.49),
NormClock*0.6>
scale <0.7, 0.23, 1>
}
finish { ambient 0.7 }
}
// le 10 fevrier 2026 -----------------
#declare T_WIP_dents = texture
{
pigment { color <0.36, 0.6, 0.79> }
normal { dents 2.94 scale 0.15 }
rotate <12, 34, 56>
finish { specular 0.40 ambient 0.59 }
}
/* ------------------------------------------------------------ */
#declare GoldDark = texture

View File

@@ -48,7 +48,7 @@ text {
ttf "datas/ComicMono-Bold.ttf" Texte 0.1, 0
// texture { T_WIP_alert }
texture { T_WIP_bluewave rotate <clock, clock, clock>
scale 0.79 }
scale 0.59 }
}
}
#declare Cabane_Compteur = object

View File

@@ -15,13 +15,15 @@ object { Le_Decor }
#declare Loc_cam = <0.63, 2, 2*NormClock> + (Pos_RedB_0 * 1.32);
#declare Lat_Y = 1.21 + 0.16*NormClock;
camera {
location Loc_cam
look_at Pos_RedB_0 + <0, 1.20, 0>
look_at Pos_RedB_0 + <0, Lat_Y, 0>
right <image_width/image_height, 0, 0>
// focal_point <0.37, 0.0, 0>
// aperture 0.046
// blur_samples 30
angle 40 - 14 * Cos_01(NormClock)
angle 40 - 15 * Cos_01(NormClock)
}

View File

@@ -16,11 +16,11 @@ object { Le_Decor }
// object { Repere scale 2 }
#declare Loc_cam = <2, 2.7-NormClock, 1> + (Pos_RedB_1 * 1.303);
#declare Loc_cam = <2, 2.7-NormClock, 1> + (Pos_RedB_1 * 1.308);
camera {
location Loc_cam
#local H = 1.16 + (NormClock*0.36);
#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>

View File

@@ -12,10 +12,10 @@
#macro HS_element_pointe ()
union {
#local R_a = HS_radius * 0.33333;
#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.3, 1, 1> translate <-0.6, 0, 0> }
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 }
@@ -36,8 +36,8 @@ union {
#local L = 0.0028;
#local R = 0.0577;
cylinder { -y*L, y*L, R }
sphere { 0, R translate -y*L }
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)
@@ -59,12 +59,13 @@ union {
/* nouveau 14 janvier 2026 */
#macro HS_element_queue ()
union {
#local R_a = HS_radius * 0.2222;
#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 rotate y*(rand(Rng1)*133)}
#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 }
@@ -89,7 +90,7 @@ union {
object { HS_element_pointe ()
translate <0, Ty*1.16, Tz*1.16> }
object { HS_element_queue ()
translate <0, Ty, Tz> }
translate <0, Ty*0.80, Tz> }
}
#end // end for
object { HS_element_central () }

View File

@@ -17,14 +17,14 @@ object { Le_Decor }
// object { Repere translate <10, 1, 10> }
#declare LOC = <19-NormClock, 1.60, 15.5-NormClock>;
#declare LOC = <-3.4 - NormClock, 4.57, 31.9-NormClock>;
#declare LAT = <P_hexawood.x, 0.95+(NormClock*0.1), P_hexawood.z>;
#declare LAT = <P_hexawood.x, 0.95+(NormClock*0.11), P_hexawood.z>;
camera {
location LOC
look_at LAT
right <image_width/image_height, 0, 0>
angle 18 + 2.72*NormClock
angle 20 + 2.87*NormClock
}

View File

@@ -51,7 +51,7 @@ union {
}
// =======================================================
#local RO = 5.29;
#local RO = 5.39;
#local CK = NormClock * 13.37;
#declare PosX = RO * sin(CK);
@@ -71,7 +71,7 @@ object { HexaCone ()
#declare PosY = 0;
#declare PosZ = RO * cos(CK+3.23);
object { Trident_A ()
rotate x*clock
rotate <clock*1.3, 0, clock*0.7>
rotate y*CK*99.22 translate <PosX, PosY, PosZ>
}
@@ -83,11 +83,11 @@ object { HexaStar
}
object { Planete rotate (-clock*0.31)*y }
light_source { <23, 8, 15>, rgb <0.77, 0.79, 0.80> }
light_source { <23, 10, 15>, rgb <0.77, 0.79, 0.80> }
// -------------------------------------------------------------
camera {
location <9+NormClock, 1.60+(8.6*NormClock), 11.59>
location <9+NormClock, 1.60+(11*NormClock), 11.59>
look_at <0.0, 0.0, 0>
right <image_width/image_height, 0, 0>
#if (0)
@@ -95,6 +95,6 @@ camera {
aperture 0.046
blur_samples 30
#end
angle 57
angle 61 - (5*NormClock)
}

View File

@@ -20,6 +20,7 @@ object { Le_Decor }
#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);
@@ -28,7 +29,7 @@ object { Le_Decor }
camera {
// orthographic
location <CamX, CamY, 0>
location <CamX, CamY, CamZ>
look_at <LatX, LatY, LatZ>
right <image_width/image_height, 0, 0>
angle 65 + (NormClock * 15)

38
patrouille.pov Normal file
View File

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

View File

@@ -33,10 +33,10 @@ object { Le_Decor }
// object { Repere scale 3 translate <SzSol, 2, SzSol> }
#local DistCam = 440 + (12 * NormClock);
#local CK = -1.101 - (0.042 * NormClock);
#local DistCam = 460 + (16 * NormClock);
#local CK = -1.71 - (0.039 * NormClock);
#declare CamX = DistCam * sin(CK);
#declare CamY = 28;
#declare CamY = 28 + NormClock;
#declare CamZ = DistCam * cos(CK);
camera {
@@ -46,5 +46,5 @@ camera {
// focal_point <2, 1, 12>
// aperture 0.046
// blur_samples 30
angle 3.6
angle 5.1
}

View File

@@ -1,6 +1,7 @@
/*
* 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;
@@ -14,17 +15,17 @@
object { Le_Decor }
#declare CK = 144 + (clock * 0.27);
#declare CK = 144 + (clock * 0.25);
#declare Dcam = 3.75;
#declare CamX = Dcam * cos(radians(CK));
#declare CamX = Dcam * cos(radians(CK+0.9));
#declare CamZ = Dcam * 1.20 * sin(radians(CK));
#declare LatZ = 2.45 + (0.9 * Cos_010(NormClock));
#declare LatY = 2.45 + (1.47 * Cos_010(NormClock));
camera {
location <CamX, 1.97, CamZ>
look_at <0.03, LatZ, 0.17>
look_at <0.03, LatY, 0.17>
right <image_width/image_height, 0, 0>
// focal_point Lat
// aperture 0.046

View File

@@ -15,12 +15,12 @@ object { Le_Decor }
// XXX instrumenter la caméra serait un GROS plus !!!
// =======================================================
#declare Debut = <-33, 89, 289> ;
#declare Fin = < 36, 81, -2> ;
#declare Debut = <-33, 92, 289> ;
#declare Fin = < 36, 83, -2> ;
#declare Pos = sqrt(NormClock);
#declare PosCam = Interpolate(Debut, Fin, Pos);
#declare LatX = 0.414 * sin(NormClock*6.1);
#declare LatX = 0.614 * sin(NormClock*13.37);
#declare LatZ = -(150 + (7*NormClock));
#declare LatCam = PosCam + <LatX, -95, LatZ>;
@@ -30,6 +30,6 @@ camera {
location PosCam
look_at LatCam
right <image_width/image_height, 0, 0>
angle 66
angle 62
}

View File

@@ -27,7 +27,7 @@ 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 janvier 2026 ?
en projet pour juin 2026 ?
## Encoding

View File

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

View File

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

View File

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

View File

@@ -40,17 +40,18 @@ do
fi
set -e
sqn=$(echo ${SEQNAME} | tr [a-z] [A-Z])
txt=$(printf "%s %03d" ${sqn} ${frame} | \
tr '01' 'ol')
txt=$(printf "%03d" ${frame} | tr '01' 'ol')
# echo $frame $img $txt
convert ${TMPIMG} \
-font Courier-Bold \
-pointsize 44 \
-kerning 3 \
-fill ${TEXTCOL} \
-strokewidth 2 -stroke $STROKOL \
-gravity north \
-annotate +0+5 "$txt" \
-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

43
tools/motionblur.sh Executable file
View File

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

View File

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

View File

@@ -16,13 +16,25 @@ object { Le_Decor }
// object { Repere scale 2 }
#declare CK = 0.8 - (NormClock * 0.71);
#declare DX_cam = 6.9 * cos(CK);
#declare DZ_cam = 5.4 * sin(CK);
#declare Loc_cam = <DX_cam, 1.0, DZ_cam> + Pos_RedB_2;
#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, 1.95+NormClock, 0>
look_at Pos_RedB_2 + <0, DY_lat, 0>
right <image_width/image_height, 0, 0>
// focal_point <0.37, 0.0, 0>

View File

@@ -9,20 +9,53 @@
/*
* nouveau : Tue Feb 10 12:42:43 AM UTC 2026
*/
#macro HoleBorder (V)
#macro HoleBorder_A (V)
difference {
#local RA = V * R_hole * 1.005;
#local RB = V * R_hole * 0.995;
cylinder { 0, y*0.22, RA }
#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.50)
texture { LeGris }
#else
texture { T_Beton_1 }
#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
@@ -30,8 +63,8 @@ difference {
#declare Patrouille = object
{
union {
#local EX = 2.4;
#local EZ = 2.1 + (0.5*sin(NormClock*2));
#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> }
@@ -231,7 +264,7 @@ difference {
#local R = rand(Rng1);
// #debug concat("Random = ", str(R, 6, 4), "\n")
#if ( R < 0.23 ) texture { T_Planete_A }
#if ( R < 0.23 ) texture { T_Planete_B }
#elseif ( R < 0.56 ) texture { T_Beton_1 }
#else texture { T_Beton_2 }
#end // if