Demo 3D - Banc de poisson V2

Généralités sur la programmation 3D
Avatar de l’utilisateur
Guillot
Messages : 672
Inscription : jeu. 25/juin/2015 16:18

Demo 3D - Banc de poisson V2

Message par Guillot »

[ Edit 25/11/2023 ]
j'ai fais une v2
avec un shader pour animer les poissons, ça rend pas mal, pour pas un rond
+ quelques autres améliorations
[ F1 ] pour embarquer la camera sur un gros poisson (ou la libérer)


salut les codeurs,

la version 3D de ma modélisation d'un banc de poisson
pas dégueu !

enlever lee déboggeur
si ça suffit pas compiler avec le Backend C avec optimisation
si ça suffit toujours pas diminuer le nombre de poisson (ligne 5)

Code : Tout sélectionner

;  ----------------------------------------------------------------------------------------------------------
;  demo 3D : Banc de poisson  V2 - Pf Shadoko - 2023
; ----------------------------------------------------------------------------------------------------------
EnableExplicit

Macro f3:vector3:EndMacro

Macro def3d(v,vx,vy,vz)
	v\x=vx
	v\y=vy
	v\z=vz
EndMacro

Macro sub3D(p,p1,p2)
	p\x=p1\x-p2\x
	p\y=p1\y-p2\y
	p\z=p1\z-p2\z
EndMacro

Macro add3d(p,p1,p2)
	p\x=p1\x+p2\x
	p\y=p1\y+p2\y
	p\z=p1\z+p2\z
EndMacro

Procedure.f lng3D(*v.f3)
	ProcedureReturn Sqr(*V\x * *V\x + *V\y * *V\y + *V\z * *V\z)
EndProcedure

Procedure Norme3D(*V.f3,l.f=1)
	Protected.f lm
	lm = l / Sqr(*V\x * *V\x + *V\y * *V\y + *V\z * *V\z)
	*V\x * lm
	*V\y * lm
	*V\z * lm  
EndProcedure

Procedure.f POM(v.f)
    ProcedureReturn (Random(v*1000)-v*500)/500
  EndProcedure
; ---------------------------------------------------------------------------------------------------------- 

Structure sespece
  num.b
  cible.f3
  v.f  ;vitesse
  prox.f
  prox2.f
EndStructure
  
Structure spoisson
  p.f3  ;position centre
  pt.f3  ;position tete
  v.f3  ;vitesse
  entity.i
  *e.sespece
EndStructure

Global nbe=-1,nbf=-1
Global Dim espece.sespece(20)
Global Dim p.spoisson(0)

Procedure poisson(ccoprs1,ccoprs2,ctete,cnageoire,robe,   Lo.f,ha.f,la.f,queue.f,  vit.f, nage.f, nb)
  Protected.f a,ai,jj,j1,rx,ry,rz,r
  Protected i,j,c,anbf,mat
  nbe+1  
  ; ---------------------- texture + material
  CreateTexture(nbe,512,256)
  StartDrawing(TextureOutput(nbe))
  DrawingMode(#PB_2DDrawing_AlphaBlend|#PB_2DDrawing_Gradient)
  GradientColor(0.0,$ff000000)
  GradientColor(0.5,ccoprs1)
  GradientColor(1.0,$ffffffff)
  LinearGradient(0,-100,0,300)
  Box(0,0,512,256,ccoprs1)
  ResetGradientColors()
  GradientColor(0,ctete)
  GradientColor(0.9,ctete)
  GradientColor(0.91,$22000000)
  GradientColor(1,ccoprs1)
  ClipOutput(0,70,512,200)
  CircularGradient(511,100,150)
  Circle(511,100, 150)
  UnclipOutput()
  DrawingMode(#PB_2DDrawing_AllChannels)
  Select robe
  Case 0:For i=30 To 400:Box(i,0,1,(Sin(i/7.5)+1.8)*40,ccoprs2):Next
  Case 1:For i=64 To 160 Step 24:Ellipse(200,i,150,4,ccoprs2):Next
  Case 2:For i=0 To 3:Circle(100+i*70,100,10,$ffffffff):Circle(100+i*70,100,8,ccoprs2):Next
  EndSelect
  Circle(420,85,16,$ff00ffff)
  Circle(420,85,8,0)
  Ellipse(512,128,60,10,$666666)
  If cnageoire
    Box(0,0,30,256,cnageoire)
    Ellipse(322,188,37,30,cnageoire)
    Ellipse(174,190,40,16,cnageoire)
    Ellipse(110,255,30,10,cnageoire)
    Box(130,0,92,28,cnageoire)
  EndIf
  StopDrawing()
  For i=0 To 7:mat=nbe*8+i
    CreateShaderMaterial(mat,0)
    MaterialShaderTexture(mat,TextureID(nbe),0,0,0)
    MaterialShaderParameter(mat,0,"phase",1,i/8,0,0,0)
    MaterialShininess(mat,64,$ffffff)
    MaterialFilteringMode(mat,#PB_Material_Anisotropic)
    SetMaterialAttribute(mat,#PB_Material_TAM,#PB_Material_ClampTAM)
  Next
  ; ---------------------- mesh
  Dim v.MeshVertex(16,16)
  For j=0 To 16
    jj=(j-8)/8:j1=j/16
    For i=0 To 16
      r=(1-jj*jj)
      ry=r*ha
      rx=r*la
      rz=j1
      a=i/16*2*#PI
      With v(j,i)
        If i>4 And i<12:ry*1.5:EndIf
        If j=10 And (i=2 Or i=14):rx*3:ry*1.5:rz-0.15:EndIf
        If j=0 :ry=ha:rz=-(1-Abs(Sin(a))*queue)*0.2:EndIf
        If i=8 And (j=5 Or j=6):ry*1.4:rz-0.15:EndIf
        \x=Sin(a)*rx
        \y=-Cos(a)*ry
        \z=(rz-0.5)*2*lo
        \Color=RGB(2*nage*vit/lo*255,(rz+0.2)/2*255,(1/nage+Pow(1-(rz+0.2)/1.2,nage))*lo)
        \u=j/16
        \v=Abs(8-i)/8
      EndWith
    Next
  Next
  CreateDataMesh(nbe,v(),1+8)
    ; ---------------------- info espece
  With espece(nbe)
    \num=nbe
    \v=vit
    \prox=lo*2
    \prox2=\prox*\prox
    def3D(\cible,pom(1000),pom(200)-300,pom(1000))
  EndWith
    ; ---------------------- creation poissons
  anbf=nbf
  nbf+nb
  ReDim p(nbf)
  For i=anbf+1 To nbf
    With p(i)
      def3D(\p,pom(1000),pom(200),pom(1000))
      \pt=\p
      \e=espece(nbe)
      \entity=CreateEntity(-1,MeshID(\e\num),MaterialID(nbe*8+i&7))
      EntityFixedYawAxis(\entity,1)
    EndWith  
  Next 
EndProcedure

InitEngine3D():InitSprite():InitKeyboard():InitMouse()

ExamineDesktops()
OpenWindow(0, 0,0, DesktopWidth(0)*1,DesktopHeight(0)*1, "poisson",#PB_Window_ScreenCentered|#PB_Window_BorderLess)
OpenWindowedScreen(WindowID(0), 0, 0, WindowWidth(0), WindowHeight(0), 0, 0, 0)

CreateCamera(0, 0, 0, 100, 100):MoveCamera(0,0,-400,-1000):CameraLookAt(0,0,-300,0)
CreateLight(0,$111111*8, -10000, 10000, -10000)
AmbientColor($111111*6)
Fog($886600,1,0,3000):CameraBackColor(0,$886600)

Define.s vert_pg,frag_pg
vert_pg="%#version 130%%uniform mat4 P24;//+24%uniform mat4 P0;//+0%uniform vec4 P77;//+77%uniform vec4 P76;//+76%uniform vec4 P44;//+44 0%uniform vec4 P31;//+31%uniform float P86;//+86 4%uniform float phase;//1%%varying vec3 oviewdir;%varying vec3 olightdir;%varying vec3 onormal;%varying vec2 ouv;%varying float ofogf;%varying float olum;%%void main()%{%vec4 v=gl_Vertex;%v.x+=sin((gl_Color.r*P86+gl_Color.g+phase)*6)*gl_Color.b*80;%oviewdir=normalize(P77.xyz-v.xyz);%olightdir=normalize(P44.xyz-v.xyz);%gl_Position=P24*v;%onormal=gl_Normal;%ouv=(gl_TextureMatrix[0]*gl_MultiTexCoord0).xy;%ofogf=P31.z>0?min(abs(gl_Position.z)*P31.w,1):0;%vec3 posv=(P0*v).xyz;%float d=min(abs(gl_Position.z),P31.z);%vec3 posl=P76.xyz+normalize(posv.xyz-P76.xyz)*d;%olum=1-clamp(-posl.y/3000,0,1);%}"
frag_pg="%#version 130%%uniform vec4 P69;//+69 0%uniform vec4 P70;//+70 0%uniform vec4 P67;//+67 0%uniform float P36;//+36%uniform vec4 P30;//+30%%uniform sampler2D diffuseMap;//0%%varying vec3 oviewdir;%varying vec3 olightdir;%varying vec3 onormal;%varying vec2 ouv;%varying float ofogf;%varying float olum;%%void main()%{%vec3 normal=normalize(onormal);%vec3 viewdir=normalize(oviewdir);%vec3 lightdir=normalize(olightdir);%%vec4 tcolor=vec4(texture(diffuseMap,ouv));%%float dif=max(dot(lightdir,normal),0);%float spe=pow(max(dot(normalize(lightdir+viewdir),normal),0),P36);%vec4 color=vec4(tcolor.rgb,1)*(P67+P69*dif)+P70*tcolor.a*spe;%gl_FragColor=mix(color,P30,ofogf)*olum;%}"
CreateShader(0,vert_pg,frag_pg)

CreateShaderMaterial(100,0)
MaterialCullingMode(100,#PB_Material_NoCulling)
SetMaterialColor(100,#PB_Material_AmbientColor+#PB_Material_DiffuseColor,0)
MaterialShininess(100,64,$ffffff)
CreateSphere(100,30000,64,64)
CreateEntity(0,MeshID(100),MaterialID(100))

poisson($ff8888ff,$88444488,$ffaaaaaa,$000000,0,  130,40,35,0.6,7,4,1)
poisson($ff888888,$88884444,$ffaaaaaa,$000000,0,  70,20,15,0.6,4,4,10)
poisson($ffaaaaaa,$88666666,$ffaaaaaa,$44aaff,0,  40,8,6,0.5,3,2,100)
poisson($ffaaaaaa,$ff444444,$ffccccdd,$66cccc,1,  30,12,7,0.5,2.5,2,150)
poisson($880088ff,$88000000,$8800aaff,$4488cc,2,  30,12,7,0.5,2.5,2,150)
poisson($8877bbdd,$880000ff,$8888bbcc,$7799ff,2,  20,12,5,0.2,2,2,200)
poisson($880000ff,$ff0088ff,$880066cc,$0099ff,1,  20,7,4,0.2,1.5,4,200)

Define.f f,   al,lg,lg2,    align.f=0.2
Define ff.f3,f0.f3,cc.f3,d.f3,pt.f3,  *p.spoisson,*pi.spoisson,   t0,i,j,np,tok,Iespece,camp
Define.f MouseX,Mousey,depx,depz,dist

Repeat
  While WindowEvent():Wend
  ExamineKeyboard():ExamineMouse()
  depx=(-Bool(KeyboardPushed(#PB_Key_Left))+Bool(KeyboardPushed(#PB_Key_Right)))*10
  depz=(-Bool(KeyboardPushed(#PB_Key_Down))+Bool(KeyboardPushed(#PB_Key_Up   )))*10+MouseWheel()*100
  MouseX = -MouseDeltaX() *  0.05
  MouseY = -MouseDeltaY() *  0.05
  RotateCamera(0, MouseY, MouseX, 0, #PB_Relative)
  dist+(depz-dist)*0.05:MoveCamera  (0, depX, 0, -dist)
  MoveEntity(0,CameraX(0),CameraY(0),CameraZ(0),0)
  If KeyboardReleased(#PB_Key_F1):camp=1-camp:If camp:AttachEntityObject(p(1)\entity,"",CameraID(0)):RotateCamera(0,0,180,0):MoveCamera  (0, 0, 40, -170, 0):Else:DetachEntityObject(p(1)\entity,CameraID(0)):EndIf:EndIf
  If ElapsedMilliseconds()-t0>10000/(nbe+1):t0=ElapsedMilliseconds():Iespece=(Iespece+1)% (nbe+1):def3D(espece(Iespece)\cible,pom(1000),pom(200)-300,pom(1000)):EndIf
  
  For j=0 To nbf
    *p=p(j):np=0:ff=f0
    For i=0 To nbf:If i=j:Continue:EndIf
      *pi=p(i):With *pi
        sub3d(d,\pt,*p\pt)
        lg2=d\x*d\x+d\y*d\y+d\z*d\z:If lg2>\e\prox2:Continue:EndIf:lg=Sqr(lg2)
        tok=Bool(*p\e\num=\e\num)
        f=(tok - \e\prox/lg)*0.1:If IsNAN(f):Continue:EndIf
        al=align*tok
        ff\x+d\x*f+\v\x*al
        ff\y+d\y*f+\v\y*al
        ff\z+d\z*f+\v\z*al
        np+1
      EndWith
    Next
    sub3d(cc,*p\p,*p\e\cible):norme3d(cc,-0.1):add3d(*p\v,*p\v,cc)
    If np:norme3d(ff,0.2):add3d(*p\v,*p\v,ff):EndIf
    norme3d(*p\v,*p\e\v):*p\v\y*0.95
    pt=*p\v:norme3d(pt,*p\e\prox):add3d(*p\pt,*p\p,pt)
  Next
  For i=0 To nbf
    With p(i)
      add3d(\p,\p,\v)
      MoveEntity(\entity,\p\x,\p\y,\p\z,0)
      EntityDirection(\entity,\v\x,\v\y,\v\z,#PB_World,#PB_Vector_Z)	
    EndWith
  Next
  RenderWorld()
  FlipBuffers()    
Until KeyboardReleased(#PB_Key_Escape) Or MouseButton(3)
Dernière modification par Guillot le ven. 22/mars/2024 21:00, modifié 4 fois.
Avatar de l’utilisateur
threedslider
Messages : 452
Inscription : dim. 01/juil./2018 22:38

Re: Demo 3D - Banc de poisson (à voir !)

Message par threedslider »

Super ! Marche nickel chez moi !

Merci pour le partage ^^
Avatar de l’utilisateur
SPH
Messages : 4937
Inscription : mer. 09/nov./2005 9:53

Re: Demo 3D - Banc de poisson (à voir !)

Message par SPH »

C'est beau.

Bravo ! 8O

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Avatar de l’utilisateur
falsam
Messages : 7317
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Demo 3D - Banc de poisson (à voir !)

Message par falsam »

Bravo. C'est fluide.

Image
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
nemerod
Messages : 40
Inscription : mer. 24/août/2022 0:58

Re: Demo 3D - Banc de poisson (à voir !)

Message par nemerod »

Guillot a écrit : mar. 21/nov./2023 12:31 salut les codeurs,

la version 3D de ma modélisation d'un banc de poisson
pas dégueu !

enlever lee déboggeur
si ça suffit pas compiler avec le Backend C avec optimisation
si ça suffit toujours pas diminuer le nombre de poisson (ligne 5)

Code : Tout sélectionner

;  ----------------------------------------------------------------------------------------------------------
;  demo 3D : Banc de poisson - Pf Shadoko - 2023
; ----------------------------------------------------------------------------------------------------------

#nbFish=1000
#nbespece=3

Macro f3:vector3:EndMacro

Procedure f3(*v.f3,vx.f,vy.f,vz.f)
	*v\x=vx
	*v\y=vy
	*v\z=vz
EndProcedure

Procedure sub3D(*p.f3,*p1.f3,*p2.f3)
	*p\x=*p1\x-*p2\x
	*p\y=*p1\y-*p2\y
	*p\z=*p1\z-*p2\z
EndProcedure

Procedure add3d(*p.f3,*p1.f3,*p2.f3)
	*p\x=*p1\x+*p2\x
	*p\y=*p1\y+*p2\y
	*p\z=*p1\z+*p2\z
EndProcedure

Procedure.f lng3D(*v.f3)
	ProcedureReturn Sqr(*V\x * *V\x + *V\y * *V\y + *V\z * *V\z)
EndProcedure

Procedure Norme3D(*V.f3,l.f=1)
	Protected.f lm
	lm = l / Sqr(*V\x * *V\x + *V\y * *V\y + *V\z * *V\z)
	*V\x * lm
	*V\y * lm
	*V\z * lm  
EndProcedure

Procedure.f POM(v.f)
    ProcedureReturn (Random(v*1000)-v*500)/500
  EndProcedure
  
  ;... too many line
[/quote]

Coucou, j'ai meme pas besoin de le testé que le premier truc que je vois c'est la mention 
[quote]
[color=#FF0000]enlever lee déboggeur[/color]
si ça suffit pas compiler avec le Backend C avec optimisation
si ça suffit toujours pas diminuer le nombre de poisson (ligne 5)
[/quote]

cela montre 2 chose, que le code n'a pas étais soigné et quant je regarde pourquoi, je comprendre direct, beaucoup d'element de type float dans un element qui est dans un element global, donc des poupé russe en terme d'execution interne, meme en optimisé c'est une purge pour purebasic
pour profité de la puissance, il faudrais passé par des valeur en float mais sur 4 valeur, se qui pourrai accordé si l'optimisation n'est pas trop con, utilisé les fonction special pour les procedure suivant 
f3
sub3D
add3d
lng3D
Norme3D

donc un gain qui n'est pas des moindre

ENSUIT, j'ai pas fini et c'est bien dommage, une procedure demande plus de temps en execution, donc dans une boucle aussi longue, il va pas tenir, surtout la nature des operation faite, meme une optimisation faite par le compilateur ne donne que un faible gain pour l'usage actuel, donc soit peu se faire ressentir mais que sur des PC qui peuvent tenir le coup, je parle meme pas du faite qu'il y a un cumule des poupé russe et de la taille de la boucle et des procedure en rafale

se qui a pour effect que une optimisation ne peu etre fais par purebasic backend C, la c'est obligatoire de passé a la main pour aidé, sinon c'est mort

deja on vite les poupé russe pour les valeur
on va prendre un exemple  tous les *p\x=*p1\x+*p2\x
doivent etre plus courte surtout dans une procedure, car si je traduit se qu'il fais cela donne
*p\x=*p1\x+*p2\x

traduit en humain cela donne en execution la chose suivant
[code]
lecture depuis index de reference des variable
lecture du sous index pour avoir la reference de la valeur
lecture de la premier valeur
placement de la valeur dans une variable local qui est dans un reference dynamique
appel de la procedure pour arrivé dans la procedure
lecture de la reference a CHAQUE OPERATION
lecture de la valeur
lecture de la 2eme valeur
operation de math
lecture de la reference local dynamique
ecriture du resulta
lecture de la reference a CHAQUE OPERATION
lecture de la valeur
lecture de la 2eme valeur
operation de math
lecture de la reference local dynamique
ecriture du resulta
lecture de la reference a CHAQUE OPERATION
lecture de la valeur
lecture de la 2eme valeur
operation de math
lecture de la reference local dynamique
ecriture du resulta
chargement de la valeur de retour null
desallocation des valeur local suite a l'appel de la procedure
retour a la ligne d'avant l'appel
execution de la prochaine ligne
donc si on fais monté le total a 1001 fois si c'etais que cela, on serai bien, mais le probleme c'est que par valeur on a la chose suivant

1001 fois l'appel a "f3"
500500 fois appel a sub3D dans une sous boucle a cause des 1001
7507500 poupé russe demandé
1001 fois appel a sub3d
1001 fois appel a norme3D
1001 fois appel a add3D
1001 fois appel a norme3D
1001 fois appel a add3D
1001 fois appel a norme3D
1001 fois appel a add3D

je compte pas les IF c'est cadeau
se qui nous donne a peu de chose, un total de 200 000 000 operation PAR FRAME !!!!
donc pour avoir une seul image par seconde, le proc doit etre a 4x plus en vitesse, sois environ 800MHz minimum de moyen pour 1 seul image
je compte pas la parti du rendu c'est aussi cadeau, car la c'est autre chose

donc en meme pas une lecture et des premier procedure et la nature des operation réalisé, j'arrive a un total que meme mon processeur c'est posé la question de pourquoi j'ai un coeur qui tourne au max alors qu'il est a 5 500 Mhz et une quadro RTX 8000 qui tourne meme pas a 2% pour un rendu aussi jolie au passage (a noté que j'aime bien, mais en écran de veille sans tiré a mort sur un coeur aurai étais top)

tres jolie mais dommage, en sois c'est pas ta faute pour l'optimisation

de 1, car tu ne le savais pas pour l'otpimisation
de 2, l'auto optimisation va de pair avec un code propre pour lui justement
de 3, car les procedure sont couteuse en perf
de 4, une boucle de grosse taille dans une boucle de grosse taille
de 5, car le moteur 3D de purebasic est un blaspheme et surtout une farce, surtout quant il y a beaucoup mais beaucoup d'element qui tourne, mesh et texture et materiel, car il profite pas de la puissance des GPU qui est possible, se qui est dommage
Avatar de l’utilisateur
Guillot
Messages : 672
Inscription : jeu. 25/juin/2015 16:18

Re: Demo 3D - Banc de poisson (à voir !)

Message par Guillot »

@ nemerod:
c'est sur que c'est gourmand coté processeur : 1000 poscailles, c'est un peu bcp ! (j'ai réduit le nombre de poisson à 800)
j'ai mis mes operateurs 3D en macro, on gagne un peu en vitesse effectivement
c'est qoui tes "poupées russes" ?
Marc56
Messages : 2196
Inscription : sam. 08/févr./2014 15:19

Re: Demo 3D - Banc de poisson (à voir !)

Message par Marc56 »

Magnifique, et tout ça en 200 lignes ! :D
PS. Chez moi ça fonctionne aussi bien en ASM qu'en C. Par contre ça ne démarrait pas jusqu'à ce que je supprime Directx11 dans les options du compilateur (Bibliothèque sous système: laisser vide)
Reste à en faire un écran de veille.
:wink:
Avatar de l’utilisateur
Guillot
Messages : 672
Inscription : jeu. 25/juin/2015 16:18

Re: Demo 3D - Banc de poisson V2

Message par Guillot »

j'ai fais une v2
avec un shader pour animer les poissons, ça rend pas mal, pour pas un rond
+ quelques autres améliorations
[ F1 ] pour embarquer la camera sur un gros poisson (ou la libérer)

cf 1er poste
vurvur
Messages : 60
Inscription : ven. 29/août/2014 19:52

Re: Demo 3D - Banc de poisson V2

Message par vurvur »

Guillot a écrit : sam. 25/nov./2023 23:02 j'ai fais une v2
avec un shader pour animer les poissons, ça rend pas mal, pour pas un rond
+ quelques autres améliorations
[ F1 ] pour embarquer la camera sur un gros poisson (ou la libérer)

cf 1er poste
Absolument magnifique, merci !

Mais on ne peut plus modifier le nombre de poissons?
Avatar de l’utilisateur
SPH
Messages : 4937
Inscription : mer. 09/nov./2005 9:53

Re: Demo 3D - Banc de poisson V2

Message par SPH »

La nouvelle version est belle aussi. Je suis admiratif.
Ce qui est bien, c'est qu'aucun poisson se "coupe" avec les autres (enfin, apparement).

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
kelebrindae
Messages : 579
Inscription : ven. 11/mai/2007 15:21

Re: Demo 3D - Banc de poisson V2

Message par kelebrindae »

Bonjour,
Magnifique démo, bravo! 8O

@Guillot: je suis tombé récemment sur cette vidéo qui pourrait peut-être t'intéresser et de donner des pistes pour l'améliorer encore:
https://www.youtube.com/watch?v=Ch7VxxTBe1c

Et notamment, dans le chapitre "Niveau 3" de la vidéo, il est dit que chaque poisson d'un banc ne prend en compte pour ses déplacements que ses 6 plus proches voisins => c'est peut-être une piste d'optimisation pour réduire le nombre de calculs?
Les idées sont le souvenir de choses qui ne se sont pas encore produites.
Avatar de l’utilisateur
Guillot
Messages : 672
Inscription : jeu. 25/juin/2015 16:18

Re: Demo 3D - Banc de poisson V2

Message par Guillot »

c'est justement cette video qui m'a donné l'idée !
je ne prend en compte que les interaction entres poissons suffisamment proche (limiter à 6 compliquerait les choses sans forcement optimiser)

note: pour modifier le nombre de poissons : changer le dernier parametre de la procedure "poisson"
Avatar de l’utilisateur
Ar-S
Messages : 9539
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Demo 3D - Banc de poisson V2

Message par Ar-S »

J'étais passé à coté. Superbe.
Tu n'as plus qu'à mixer ça à tes grottes sous marines, tu binds des touches et tu nous sors un je "Fish Race" :mrgreen:
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Répondre