Compare commits
No commits in common. "cfc8ea6b63c0bfcef96a4f48fae3af95c5de1968" and "355d61df23ff45b0f7046bf026af15c82eefea4f" have entirely different histories.
cfc8ea6b63
...
355d61df23
3
BloubWorld/.gitignore
vendored
3
BloubWorld/.gitignore
vendored
@ -5,7 +5,6 @@ nbimg.inc
|
|||||||
*.gif
|
*.gif
|
||||||
*.blbs
|
*.blbs
|
||||||
*.mp4
|
*.mp4
|
||||||
*.lst
|
|
||||||
frames/*
|
frames/*
|
||||||
log.*
|
log.*
|
||||||
|
|
||||||
@ -13,6 +12,4 @@ exportbloubs
|
|||||||
genbloubs
|
genbloubs
|
||||||
movebloubs
|
movebloubs
|
||||||
mergebloubs
|
mergebloubs
|
||||||
essai
|
|
||||||
|
|
||||||
core
|
|
||||||
|
@ -2,34 +2,25 @@
|
|||||||
|
|
||||||
all: genbloubs movebloubs exportbloubs mergebloubs
|
all: genbloubs movebloubs exportbloubs mergebloubs
|
||||||
|
|
||||||
# ------------------------------------------------------------
|
|
||||||
|
|
||||||
GFOPT = -Wall -Wextra -g -time
|
GFOPT = -Wall -Wextra -g -time
|
||||||
OBJS = bloubspace.o povstuff.o mathstuff.o
|
OBJS = bloubspace.o povstuff.o mathstuff.o
|
||||||
|
|
||||||
# ------------------------------------------------------------
|
# ------------------------------------------------------------
|
||||||
|
|
||||||
essai: essai.f90 Makefile mathstuff.o
|
|
||||||
gfortran $(GFOPT) $< mathstuff.o -o $@
|
|
||||||
|
|
||||||
# ------------------------------------------------------------
|
|
||||||
|
|
||||||
initial.blbs: genbloubs Makefile
|
initial.blbs: genbloubs Makefile
|
||||||
./genbloubs $@ 1000
|
./genbloubs $@ 1000
|
||||||
|
|
||||||
in.blbs: genbloubs Makefile
|
in.blbs: genbloubs Makefile
|
||||||
./genbloubs $@ 30000
|
./genbloubs $@ 300
|
||||||
|
|
||||||
out.blbs: in.blbs mergebloubs Makefile
|
out.blbs: in.blbs mergebloubs Makefile
|
||||||
./mergebloubs $< $@
|
./mergebloubs $< $@
|
||||||
|
|
||||||
out.lst: out.blbs exportbloubs Makefile
|
|
||||||
./exportbloubs $< > $@
|
|
||||||
|
|
||||||
# ------------------------------------------------------------
|
# ------------------------------------------------------------
|
||||||
|
|
||||||
bloubspace.o: bloubspace.f90 Makefile
|
bloubspace.o: bloubspace.f90 Makefile
|
||||||
gfortran $(GFOPT) -pg -c $<
|
gfortran $(GFOPT) -c $<
|
||||||
|
|
||||||
povstuff.o: povstuff.f90 Makefile
|
povstuff.o: povstuff.f90 Makefile
|
||||||
gfortran $(GFOPT) -c $<
|
gfortran $(GFOPT) -c $<
|
||||||
|
@ -5,7 +5,7 @@ C'est quoi ?
|
|||||||
Le BloubWorld (que l'on appelle aussi BloubSpace) est un espace borné
|
Le BloubWorld (que l'on appelle aussi BloubSpace) est un espace borné
|
||||||
dans lequel se déplacent des **bloubs**, lesquels sont
|
dans lequel se déplacent des **bloubs**, lesquels sont
|
||||||
des sortes de particule
|
des sortes de particule
|
||||||
munie de certaines propriétés (age, grosseur, vitesses, etc...).
|
munie de certaines propriétés.
|
||||||
Lesquelles évoluent en fonction du temps.
|
Lesquelles évoluent en fonction du temps.
|
||||||
|
|
||||||
## Description d'un bloub
|
## Description d'un bloub
|
||||||
@ -18,60 +18,17 @@ Lesquelles évoluent en fonction du temps.
|
|||||||
real :: px, py, pz
|
real :: px, py, pz
|
||||||
real :: vx, vy, vz
|
real :: vx, vy, vz
|
||||||
real :: radius
|
real :: radius
|
||||||
integer :: age
|
integer :: seq
|
||||||
end type t_bloubs
|
end type t_bloubs
|
||||||
```
|
```
|
||||||
|
|
||||||
C'est simple, en fait. Le plus compliqué, c'est de savoir quoi en faire.
|
C'est simple, en fait. Le plus compliqué, c'est de savoir quoi en faire.
|
||||||
|
|
||||||
On peut en fabriquer des gazillions, et ensuite
|
|
||||||
les lacher dans un espace clôt, avec des parois
|
|
||||||
rebondissantes. Chaque choc va un peu les user, et au bout d'un moment,
|
|
||||||
ils vont mourir. C'est comme ça.
|
|
||||||
|
|
||||||
## Comment ça fonctionne ?
|
## Comment ça fonctionne ?
|
||||||
|
|
||||||
Pas trop mal pour un premier jet. Il suffit de lire
|
Pas trop mal pour un premier jet. Il suffit de lire
|
||||||
le script `runme.sh` pour avoir une idée de l'enchainement
|
le script `runme.sh` pour avoir une idée de l'enchainement
|
||||||
des opérations. Lequel enchainement est décrit plus bas.
|
des opérations.
|
||||||
|
|
||||||
## Les logiciels
|
|
||||||
|
|
||||||
Pour le moment, l'ensemble des opérations est gérée par un script shell
|
|
||||||
qui enchaine des opérations plus élémentaires. Oui, je sais, ce n'est
|
|
||||||
pas optimal, mais c'est un cadre idéal pour les bricolages hasardeux.
|
|
||||||
|
|
||||||
Ces opérations agissent sur des fichiers de type `.blsb` qui sont,
|
|
||||||
vu du fortran, des dumps séquentiels du type t_bloubs. Un format
|
|
||||||
de fichier qui va être modifié assez souvent, ne gardez pas d'archives.
|
|
||||||
|
|
||||||
### genbloubs
|
|
||||||
|
|
||||||
Fabrication d'une population de bloubs plus ou moins aléatoires.
|
|
||||||
Deux paramètres : le nom du fichier et le nombre de bloubs.
|
|
||||||
Les règles de génération devraient être paramétrables.
|
|
||||||
|
|
||||||
### movebloubs
|
|
||||||
|
|
||||||
Le cœur actif du système : c'est lui qui, à chaque tick, va déplacer
|
|
||||||
les bloubs, gérer les rebonds avec la boudary-box, éliminer les
|
|
||||||
bloubs usés par les chocs, et faire naitre de nouveaux bloubs
|
|
||||||
si le besoin s'en fait sentir.
|
|
||||||
|
|
||||||
Seul problème, il n'a pas de notion directe du temps, parce qu'il est
|
|
||||||
juste de passage dans un pipeline.
|
|
||||||
|
|
||||||
### exportbloubs
|
|
||||||
|
|
||||||
Sortie sur `stdout` de certaines propriétes des bloubs, qui seront
|
|
||||||
reprise par un (ou des) scripts écrits en `awk`, afin de générer
|
|
||||||
ce qu'il faut pour les différents moteurs de rendu.
|
|
||||||
|
|
||||||
Bon, pour le moment, il n'y a que POVray :)
|
|
||||||
|
|
||||||
### mergebloubs
|
|
||||||
|
|
||||||
Alors, celui-ci, il n'est pas vraiment au point.
|
|
||||||
|
|
||||||
## TODO
|
## TODO
|
||||||
|
|
||||||
|
@ -88,10 +88,10 @@ module bloubspace
|
|||||||
blb%py = 0.0
|
blb%py = 0.0
|
||||||
blb%age = blb%age + 1
|
blb%age = blb%age + 1
|
||||||
endif
|
endif
|
||||||
if (4.99 .lt. blb%py) then !!
|
if (5.0 .lt. blb%py) then
|
||||||
blb%vy = -1.0 * blb%vy
|
blb%vy = -1.0 * blb%vy
|
||||||
blb%age = blb%age + 1
|
blb%age = blb%age + 1
|
||||||
blb%py = 4.99 !!
|
blb%py = 5.0
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if (5.0 .lt. blb%pz) then
|
if (5.0 .lt. blb%pz) then
|
||||||
|
@ -1,19 +0,0 @@
|
|||||||
program essai
|
|
||||||
|
|
||||||
use mathstuff
|
|
||||||
implicit none
|
|
||||||
|
|
||||||
integer :: foo
|
|
||||||
real :: quux
|
|
||||||
double precision :: somme
|
|
||||||
|
|
||||||
call init_random_seed()
|
|
||||||
somme = 0.0
|
|
||||||
|
|
||||||
do foo=1, 200000
|
|
||||||
quux = rand()
|
|
||||||
somme = somme + quux
|
|
||||||
print *, foo, quux, somme/foo
|
|
||||||
enddo
|
|
||||||
|
|
||||||
end program
|
|
@ -32,7 +32,7 @@ program genbloubs
|
|||||||
if (0 .ne. errcode) then
|
if (0 .ne. errcode) then
|
||||||
exit
|
exit
|
||||||
endif
|
endif
|
||||||
print *, bloub%px, bloub%py, bloub%pz, bloub%radius, bloub%age
|
print *, bloub%px, bloub%py, bloub%pz, bloub%radius
|
||||||
compte = compte + 1
|
compte = compte + 1
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
module mathstuff
|
module mathstuff
|
||||||
|
|
||||||
implicit none
|
implicit none
|
||||||
|
|
||||||
contains
|
contains
|
||||||
|
|
||||||
! ----------------------------------------------------------------
|
! ----------------------------------------------------------------
|
||||||
@ -12,8 +13,8 @@ module mathstuff
|
|||||||
integer t3
|
integer t3
|
||||||
|
|
||||||
call itime(tarray)
|
call itime(tarray)
|
||||||
t3 = 3600*tarray(1) + 60*tarray(2) + tarray(3)
|
t3 = 200*tarray(1) + 20*tarray(2) + tarray(3)
|
||||||
write(0, '(A,3I3,A,I6)') "sranding: ", tarray, " --> ", t3
|
print *, tarray, ' --> ', t3
|
||||||
call srand(t3)
|
call srand(t3)
|
||||||
|
|
||||||
end subroutine
|
end subroutine
|
||||||
|
@ -70,11 +70,6 @@ program mergebloubs
|
|||||||
do ! infinite loop
|
do ! infinite loop
|
||||||
|
|
||||||
print *, "============ PASS ", idx
|
print *, "============ PASS ", idx
|
||||||
if (idx .EQ. NB_MAX_BLOUBS) then
|
|
||||||
write(0, '(I8, A)') idx, " max number of bloubs reached"
|
|
||||||
exit
|
|
||||||
endif
|
|
||||||
|
|
||||||
! read the next bloub from input file
|
! read the next bloub from input file
|
||||||
read (unit=inu, iostat=errcode) bloub
|
read (unit=inu, iostat=errcode) bloub
|
||||||
if (0 .ne. errcode) then
|
if (0 .ne. errcode) then
|
||||||
@ -94,7 +89,9 @@ program mergebloubs
|
|||||||
! call display_bloub(les_bloubs(i), "DEAD ? WTF ?")
|
! call display_bloub(les_bloubs(i), "DEAD ? WTF ?")
|
||||||
cycle
|
cycle
|
||||||
endif
|
endif
|
||||||
|
|
||||||
rval = distance_of_bloubs(les_bloubs(i), bloub)
|
rval = distance_of_bloubs(les_bloubs(i), bloub)
|
||||||
|
|
||||||
if (rval .LT. (les_bloubs(i)%radius + bloub%radius)) then
|
if (rval .LT. (les_bloubs(i)%radius + bloub%radius)) then
|
||||||
print *, "contact : ", i, idx, rval
|
print *, "contact : ", i, idx, rval
|
||||||
call merge_two_bloubs(les_bloubs(i), bloub, newbloub)
|
call merge_two_bloubs(les_bloubs(i), bloub, newbloub)
|
||||||
@ -102,21 +99,16 @@ program mergebloubs
|
|||||||
nbr_merge = nbr_merge + 1
|
nbr_merge = nbr_merge + 1
|
||||||
merged = .TRUE.
|
merged = .TRUE.
|
||||||
endif
|
endif
|
||||||
enddo
|
|
||||||
|
|
||||||
|
enddo
|
||||||
if (merged) then
|
if (merged) then
|
||||||
|
! put new bloub in the list
|
||||||
les_bloubs(idx) = newbloub
|
les_bloubs(idx) = newbloub
|
||||||
bloub = newbloub
|
|
||||||
else
|
else
|
||||||
! put old bloub in the list
|
! put old bloub in the list
|
||||||
les_bloubs(idx) = bloub
|
les_bloubs(idx) = bloub
|
||||||
endif
|
endif
|
||||||
|
|
||||||
write(outu, iostat=errcode) bloub ! no error control ?
|
|
||||||
if (0 .ne. errcode) then
|
|
||||||
STOP " : WRITE ERROR TO " // trim(outfile)
|
|
||||||
endif
|
|
||||||
|
|
||||||
idx = idx + 1
|
idx = idx + 1
|
||||||
|
|
||||||
! print *, "idx = ", idx
|
! print *, "idx = ", idx
|
||||||
|
@ -54,7 +54,7 @@ program movebloubs
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
! moving and boundingboxing
|
! moving and boundingboxing
|
||||||
call move_bloub (bloub, 0.14)
|
call move_bloub (bloub, 0.15)
|
||||||
call bound_a_blob (bloub)
|
call bound_a_blob (bloub)
|
||||||
call green_soylent (bloub)
|
call green_soylent (bloub)
|
||||||
if (.NOT. bloub%alive) then
|
if (.NOT. bloub%alive) then
|
||||||
@ -78,10 +78,10 @@ program movebloubs
|
|||||||
! ok, we have read all the bloubs in the input file
|
! ok, we have read all the bloubs in the input file
|
||||||
|
|
||||||
! insert some fancy conditional here
|
! insert some fancy conditional here
|
||||||
if (compteur .LT. 1600) then
|
if (compteur .LT. 1500) then
|
||||||
if (rand() .LT. 0.05) then
|
|
||||||
call add_more_bloubs(outu, 8, 0.052)
|
call add_more_bloubs(outu, 8, 0.075)
|
||||||
endif
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
close(inu) ; close(outu)
|
close(inu) ; close(outu)
|
||||||
@ -104,15 +104,13 @@ contains
|
|||||||
type(t_bloubs) :: bloub
|
type(t_bloubs) :: bloub
|
||||||
integer :: foo
|
integer :: foo
|
||||||
|
|
||||||
write(0, '(A,I4,1X,A)') "adding", nbre, "bloubs"
|
|
||||||
|
|
||||||
do foo=1, nbre
|
do foo=1, nbre
|
||||||
|
|
||||||
bloub%nick = 'newbie '
|
bloub%nick = 'newbie '
|
||||||
|
bloub%alive = .TRUE.
|
||||||
call random_pv(bloub)
|
call random_pv(bloub)
|
||||||
bloub%radius = wtf
|
bloub%radius = wtf
|
||||||
bloub%age = 1
|
bloub%age = foo
|
||||||
bloub%alive = .TRUE.
|
|
||||||
! call display_bloub (bloub, "new bloub")
|
! call display_bloub (bloub, "new bloub")
|
||||||
write(un) bloub ! no error control ?
|
write(un) bloub ! no error control ?
|
||||||
|
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
|
|
||||||
INCFILE="bloubs.inc"
|
INCFILE="bloubs.inc"
|
||||||
TMPPNG="/dev/shm/bloubs7.png"
|
TMPPNG="/dev/shm/bloubs7.png"
|
||||||
POVOPT="+Q9 +a -v -d -W960 -H640 -WT2"
|
POVOPT="+Q5 -a -v -d -W920 -H600 -WT2"
|
||||||
DDIR="frames"
|
DDIR="frames"
|
||||||
LOGERR="log.error"
|
LOGERR="log.error"
|
||||||
|
|
||||||
@ -15,7 +15,7 @@ LOGERR="log.error"
|
|||||||
BLBS_IN="/dev/shm/in.blbs"
|
BLBS_IN="/dev/shm/in.blbs"
|
||||||
BLBS_OUT="/dev/shm/out.blbs"
|
BLBS_OUT="/dev/shm/out.blbs"
|
||||||
|
|
||||||
NBIMG=1200
|
NBIMG=600
|
||||||
|
|
||||||
make all
|
make all
|
||||||
err=$?
|
err=$?
|
||||||
@ -67,7 +67,7 @@ do
|
|||||||
mv ${BLBS_OUT} ${BLBS_IN}
|
mv ${BLBS_OUT} ${BLBS_IN}
|
||||||
echo
|
echo
|
||||||
|
|
||||||
sleep 9
|
sleep 33
|
||||||
|
|
||||||
done
|
done
|
||||||
|
|
||||||
|
@ -21,7 +21,10 @@ global_settings {
|
|||||||
|
|
||||||
object {
|
object {
|
||||||
Bloubs
|
Bloubs
|
||||||
finish { phong 0.33 specular 0.95 }
|
texture {
|
||||||
|
pigment { color Gray60 }
|
||||||
|
finish { phong 0.58 specular 0.45 }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
plane {
|
plane {
|
||||||
@ -36,7 +39,7 @@ plane {
|
|||||||
|
|
||||||
#declare BH = 5; // H = taille en horizontal
|
#declare BH = 5; // H = taille en horizontal
|
||||||
#declare BV = 5; // V = taille en vertical
|
#declare BV = 5; // V = taille en vertical
|
||||||
#declare BR = 0.035;
|
#declare BR = 0.028;
|
||||||
|
|
||||||
#declare Une_Borne = object
|
#declare Une_Borne = object
|
||||||
{
|
{
|
||||||
@ -46,24 +49,21 @@ merge {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#declare Un_Cadre = object
|
#declare Cadre_Haut = object
|
||||||
{
|
{
|
||||||
merge {
|
merge {
|
||||||
#local Ruc = BR * 0.78;
|
cylinder { <-BH, 0, -BH>, <-BH, 0, BH>, BR }
|
||||||
cylinder { <-BH, 0, -BH>, <-BH, 0, BH>, Ruc }
|
|
||||||
cylinder { < BH, 0, -BH>, < BH, 0, BH>, BR }
|
cylinder { < BH, 0, -BH>, < BH, 0, BH>, BR }
|
||||||
cylinder { < BH, 0, -BH>, <-BH, 0, -BH>, BR }
|
cylinder { < BH, 0, -BH>, <-BH, 0, -BH>, BR }
|
||||||
cylinder { < BH, 0, BH>, <-BH, 0, BH>, Ruc }
|
cylinder { < BH, 0, BH>, <-BH, 0, BH>, BR }
|
||||||
}
|
}
|
||||||
pigment { color Gray40 }
|
pigment { color Gray50 }
|
||||||
}
|
}
|
||||||
|
|
||||||
#declare Les_Bornes = object
|
#declare Les_Bornes = object
|
||||||
{
|
{
|
||||||
union {
|
union {
|
||||||
#local E = 0.02;
|
object { Cadre_Haut translate y*(BV-0.05) }
|
||||||
object { Un_Cadre translate y*(BV-E) }
|
|
||||||
object { Un_Cadre translate y*E }
|
|
||||||
|
|
||||||
object { Une_Borne translate <-BH, 0, -BH> pigment { color Blue } }
|
object { Une_Borne translate <-BH, 0, -BH> pigment { color Blue } }
|
||||||
object { Une_Borne translate < BH, 0, -BH> pigment { color Green } }
|
object { Une_Borne translate < BH, 0, -BH> pigment { color Green } }
|
||||||
@ -75,41 +75,19 @@ union {
|
|||||||
object { Les_Bornes }
|
object { Les_Bornes }
|
||||||
|
|
||||||
// ----------------------------------------------------------
|
// ----------------------------------------------------------
|
||||||
#local D = 0.016;
|
|
||||||
|
|
||||||
#declare Fleche = object
|
|
||||||
{
|
|
||||||
merge {
|
|
||||||
sphere { <-0.05, 0, 0>, D }
|
|
||||||
cylinder { <1, 0, 0>, <-0.05, 0, 0>, D }
|
|
||||||
cone { <1, 0, 0>, D*3.1, <1.10, 0, 0>, 0.0001 }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#declare Repere = object
|
|
||||||
{
|
|
||||||
union {
|
|
||||||
object { Fleche pigment { color Red }}
|
|
||||||
object { Fleche rotate z*90 pigment { color Green }}
|
|
||||||
object { Fleche rotate y*270 pigment { color Blue }}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// ----------------------------------------------------------
|
|
||||||
|
|
||||||
// object { Repere scale 2+(1.9*NormClock) translate y*2.5 }
|
|
||||||
|
|
||||||
light_source { <9, 22, -17> color Gray80 }
|
light_source { <9, 22, -17> color Gray80 }
|
||||||
light_source { <11, 19, 9> color Gray60 }
|
light_source { <11, 19, 9> color Gray60 }
|
||||||
|
|
||||||
#declare XCAM = 8 -( NormClock*3 );
|
#declare HCAM = 5 + (11 * NormClock);
|
||||||
#declare YCAM = 5 + (11 * NormClock);
|
|
||||||
|
|
||||||
#fopen LC "log.camera" append
|
#fopen LC "log.camera" append
|
||||||
#write (LC, clock, " ", NormClock, " ", YCAM, "\n")
|
#write (LC, clock, " ", NormClock, " ", HCAM, "\n")
|
||||||
#fclose LC
|
#fclose LC
|
||||||
|
|
||||||
camera {
|
camera {
|
||||||
location <XCAM, YCAM, -16>
|
location <7, HCAM, -16>
|
||||||
look_at <0, 1, 0>
|
look_at <0, 1, 0>
|
||||||
right x*image_width/image_height
|
right x*image_width/image_height
|
||||||
angle 48
|
angle 50
|
||||||
}
|
}
|
||||||
|
@ -11,12 +11,8 @@ BEGIN {
|
|||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
if ($5 > 4) color = "Magenta"
|
printf "\t\tsphere { <%f, %f, %f>, %f }\n", \
|
||||||
else color = "Cyan"
|
$1, $2, $3, $4
|
||||||
|
|
||||||
pigment = "pigment { color " color " }"
|
|
||||||
printf "\t\tsphere { <%f, %f, %f>, %f %s }\n", \
|
|
||||||
$1, $2, $3, $4, pigment
|
|
||||||
count++
|
count++
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user