Demo 3D - Répulsion

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

Demo 3D - Répulsion

Message par Guillot »

Salut les codeurs

une petite démo qui mange pas de pain
attendez quelque secondes, vous verrez des filaments se former
ça rappelle la toile cosmique (https://www.cnrs.fr/fr/presse/les-premi ... ies-naines)
peut etre que c'est une force de répulsion qui est à la base des ces motifs (gravité négative...)

utilisez la souris pour vous déplacer
[Espace] ou RMB pour faire Pause

enlever le débuggeur
si ça suffit pas compilez avec le Backend C avec optimisation

Code : Tout sélectionner

;  ----------------------------------------------------------------------------------------------------------
;   Demo 3D - Répulsion - Pf Shadoko - 2023
; ----------------------------------------------------------------------------------------------------------
;{ ============================= biblio
Macro f3:vector3:EndMacro

Structure MeshVertexV
  p.f3
  n.f3
  t.f3
  u.f
  v.f
  color.l
EndStructure

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

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

Macro mul3d(p,r)
  p\x*r
  p\y*r
  p\z*r
EndMacro

Macro lng3D(V)
  Sqr(V\x*V\x + V\y*V\y + V\z*V\z)
EndMacro

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

Macro Mod3d(p,m)
  p\x=Mod(p\x+m*10,m)
  p\y=Mod(p\y+m*10,m)
  p\z=Mod(p\z+m*10,m)
EndMacro
;}

#nf=20000
#nr=5
#rv=0.9

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

ExamineDesktops()
OpenWindow(0, 0,0, DesktopWidth(0),DesktopHeight(0), "demo 3d - [Esc] quit",#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,100,100,0):CameraLookAt(0,100,100,100)
CreateLight(0,$ffffff, -10000, 10000, 0)
Fog(0,1,0,400)

Define.s vert_pg,frag_pg
vert_pg="%#version 130%%uniform mat4 P20;//+20%uniform mat4 P12;//+12%uniform vec4 P108;//+108%uniform vec4 P31;//+31%uniform float size;//-1%%varying vec4 ocolor;%varying float ofogf;%%void main(void)%{%gl_Position=ftransform();%float vsize;if(size<0)vsize=gl_MultiTexCoord0.x;else vsize=size;%vec4 wv_pos=P20*gl_Vertex;%vec4 projVoxel=P12*vec4(vsize,vsize,wv_pos.z,wv_pos.w);%vec2 projSize=P108.xy*projVoxel.xy/projVoxel.w;%gl_PointSize=0.5*projSize.x;%%ocolor=gl_Color;%ofogf=P31.z>0?min(abs(gl_Position.z)*P31.w,1):0;%}"
frag_pg="%#version 130%%varying vec4 ocolor;%varying float ofogf;%%void main(void)%{%vec2 pc=gl_PointCoord*2-1;%float r=dot(pc,pc);%if(r>1)discard;%float v=1-r;v*=v;%gl_FragColor=vec4(v,v,v,0)*ocolor*(1-ofogf);%}"

CreateShader(0,vert_pg,frag_pg)
CreateShaderMaterial(0,0)
SetMaterialAttribute(0,#PB_Material_PointSprite,1)
MaterialBlendingMode(0,#PB_Material_Add)

CreateMesh(0,#PB_Mesh_PointList):For i=0 To #nf:MeshVertex(Random(200),Random(200),Random(200),1, 0,$226688):Next:FinishMesh(1)
CreateMesh(1,#PB_Mesh_PointList):For i=0 To #nr:MeshVertex(Random(200),Random(200),Random(200),20,0,$ff0000):Next:FinishMesh(1)
For i=-2 To 2
  For j=-2 To 2
    For k=-2 To 2
      CreateEntity(-1,MeshID(0),MaterialID(0),i*200,j*200,k*200)
      CreateEntity(-1,MeshID(1),MaterialID(0),i*200,j*200,k*200)
    Next
  Next
Next

Global Dim f.MeshVertexV(#nf)
Global Dim r.MeshVertexV(#nr)
For i=0 To #nf
  f3(f(i)\p,Random(200),Random(200),Random(200))
Next
For i=0 To #nr
  f3(r(i)\p,Random(200),Random(200),Random(200))
  f3(r(i)\n,pom(#rv),pom(#rv),pom(#rv))
Next

Define.f MouseX,Mousey,depx,depz,dist,d,rv
Define.f3 *p,*r,*v,v,sv,r,po:f3(po,100,100,100)

Repeat
  ExamineKeyboard()
  ExamineMouse()
  depx=(-Bool(KeyboardPushed(#PB_Key_Left))+Bool(KeyboardPushed(#PB_Key_Right)))*2
  depz=(-Bool(KeyboardPushed(#PB_Key_Down))+Bool(KeyboardPushed(#PB_Key_Up   ))+MouseButton(1))*2+MouseWheel()*20
  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)
  MoveCamera(0,Mod(CameraX(0)+200,200),Mod(CameraY(0)+200,200),Mod(CameraZ(0)+200,200),0)
  amouseb2=mouseb2:mouseb2=MouseButton(2)
  If KeyboardReleased(#PB_Key_Space) Or (mouseb2 And amouseb2=0):pause=1-pause:EndIf
  
  If pause=0
    For i=0 To #nr
      add3d(r(i)\p,r(i)\p,r(i)\n)
      Mod3d(r(i)\p,200)
    Next
    
    For i=0 To #nf
      *p=f(i)\p
      *v=f(i)\n
      For j=0 To #nr
        sub3D(v,r(j)\p,*p)
        add3d(v,v,po):Mod3d(v,200):sub3D(v,v,po)
        d=lng3D(v)
        rv=-2/(d*d*d)
        mul3d(v,rv)
        add3d(*v,*v,v)
      Next
      add3d(*p,*p,*v)
      mul3D(*v,0.98)
      Mod3d(*p,200)
    Next
    SetMeshData(0,0,f(),#PB_Mesh_Vertex,0,#nf)
    SetMeshData(1,0,r(),#PB_Mesh_Vertex,0,#nr)
  EndIf
  RenderWorld()
  FlipBuffers()    
  While WindowEvent():Wend
Until KeyboardReleased(#PB_Key_Escape) Or MouseButton(3)
Avatar de l’utilisateur
SPH
Messages : 4944
Inscription : mer. 09/nov./2005 9:53

Re: Demo 3D - Répulsion

Message par SPH »

C'est DINGUE ce que l'on peux faire en un code aussi court !!

Félicitation !

ps : tu devrais faire un jeu :idea:

!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
case
Messages : 1546
Inscription : lun. 10/sept./2007 11:13

Re: Demo 3D - Répulsion

Message par case »

SPH a écrit : mer. 13/déc./2023 7:13 C'est DINGUE ce que l'on peux faire en un code aussi court !!

Félicitation !

ps : tu devrais faire un jeu :idea:
faites ce que je dit mais pas ce que je fait ^^
SPH a écrit : dim. 03/déc./2023 10:04
threedslider a écrit : dim. 03/déc./2023 9:23 Je suis sûr faire un jeu retro à la another world ça peut te rapporter des sous car ya beaucoup de fans qui aiment ça 8O
Il serait copié et piraté.
A moins de faire un jeu Steam...
threedslider a écrit : dim. 03/déc./2023 9:23 Sinon tu peux faire un tuto sur la datasection sur comment tu dessines le perso ?
C'est prévu mais j'ai encore plusieurs heures pour l'ameliorer. :wink:
:mrgreen: :mrgreen: :mrgreen:

ceci dit pourquoi pas :D
ImageImage
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Demo 3D - Répulsion

Message par Ar-S »

Sympa et fluide.
Tu pourrais nous faire un remake de l'aventure intérieur avec ce genre de code. 8)
~~~~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