demo 3D - Asteroïde

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

demo 3D - Asteroïde

Message par Guillot »

Image

salut les codeurs,

j'ai bossé pendant une semaine sur le cube mapping (texture et relief) dans le but de faire des rochers
les resultats n'ont pas été tres concluant
mon but étant de faire une texture procédurale bouclé en cube, de ce coté le resultat est potable (quoi que)
en revanche au niveau de la création du mesh, faire coincider les normales est un peu trop merdique
en fait, j'ai laisser tombé quand j'ai compris que la bonne façon de faire impliquait un mode texturage que notre implementation d'ogre ne permet pas (je vais voir ce que je peux faire de ce coté)
vous verrez, c'est pas top (on voit les coutures sur les textures de l’astéroïde, la planète et la voute celeste c'est ok)

EDIT:
j'ai fais quelques modifs : 4 different asteroides + coloration

Code : Tout sélectionner

; demo Asteroïde - pf Shadoko - 2018

EnableExplicit

Structure vector2
  x.f
  y.f
EndStructure

Structure Vector3
  x.f
  y.f
  z.f
EndStructure

Structure Svertex2
  p.vector3
  n.vector3
  diag.b
  ai.b
  aj.b
  uv.vector2
  color.l
EndStructure

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

Macro vec2d(v,vx,vy)
  v\x=vx
  v\y=vy
EndMacro

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

Procedure Norme3D(*V.Vector3,l.f=1)
  Protected.f lm
  lm = l / lng3d(*v)
  *V\x * lm
  *V\y * lm
  *V\z * lm  
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

Procedure addvertex(px.f,py.f,pz.f, nx.f,ny.f,nz.f, u.f,v.f,c=0)
    MeshVertexPosition(px,py,pz)
    MeshVertexNormal(nx,ny,nz)
    MeshVertexTextureCoordinate(u,v)  
    MeshVertexColor(c)
EndProcedure

Procedure Createsurface(mesh,Array t.Svertex2(2))
  Protected p,i,j,m,diag,nx=ArraySize(t(),2),nz=ArraySize(t(),1)
  Protected.vector3 d1,d2,n
  m=CreateMesh(mesh):If mesh=-1:mesh=m:EndIf
  For j=0 To nz
    For i=0 To nx
      With t(j,i)
        addvertex(\P\x,\p\y,\p\z,\n\x,\n\y,\n\z,\uv\x,\uv\y,\color)
      EndWith
    Next
  Next  
  For j=0 To nz-1
    For i=0 To nx-1
      p=j*(nx+1)+i
      diag=t(j,i)\diag
      If diag=0
        sub3d(d1,t(j,i)\p,t(j+1,i+1)\p)
        sub3d(d2,t(j+1,i)\p,t(j,i+1)\p)
        If lng3d(d1)>lng3d(d2):diag=1:Else:diag=-1:EndIf
      EndIf
      If diag=1
        MeshFace(p,p+nx+1,p+1): MeshFace(p+nx+2,p+1,p+nx+1)
      Else
        MeshFace(p+nx+1,p+nx+2,p): MeshFace(p+1,p,p+nx+2)
      EndIf
    Next
  Next
  FinishMesh(1)
  NormalizeMesh(mesh)
  UpdateMeshBoundingBox(mesh)
  ProcedureReturn mesh
EndProcedure

Procedure AddMesh(mesho,Mesh,mat, NewX.f=0 , NewY.f=0, NewZ.f=0, ScaleX.f=1, ScaleY.f=1, ScaleZ.f=1, RotateX.f=0, RotateY.f=0, RotateZ.f=0)
  Protected Dim MeshDataV.PB_MeshVertex(0)
  Protected Dim MeshDataF.PB_MeshFace(0)
  Protected i,meshc
  meshc=CopyMesh(mesh,-1)
  TransformMesh(Meshc, NewX,NewY,NewZ, ScaleX,ScaleY,ScaleZ, RotateX,RotateY,RotateZ)
  GetMeshData(Meshc,0, MeshDataV(), #PB_Mesh_Vertex | #PB_Mesh_UVCoordinate| #PB_Mesh_Normal|#PB_Mesh_Color, 0, MeshVertexCount(Meshc, 0)-1)
  GetMeshData(Meshc,0, MeshDataF(), #PB_Mesh_Face, 0, MeshIndexCount(Meshc, 0)-1)
  FreeMesh(meshc) 
  
  AddSubMesh()
  For i=0 To ArraySize(MeshDataV())
    With MeshDatav(i)
      addvertex(\x,\y,\z,\NormalX,\NormalY,\NormalZ,\u,\v,\Color)
    EndWith
  Next     
  For i=0 To ArraySize(MeshDataF()) Step 3
    MeshFace(MeshDataF(i)\Index, MeshDataF(i+1)\Index,MeshDataF(i+2)\Index)
  Next
  If mat>=0:SetMeshMaterial(mesho, MaterialID(mat), SubMeshCount(mesho)-1):EndIf
EndProcedure

Procedure Split(Array t.s(1),l.s,sep.s=",",nmax=100)
    Protected ap.l,p.l,n,ls
    Dim t(nmax)
    ls=Len(sep)
    l+sep
    p=1-ls
    Repeat
        ap=p+ls:p=FindString(l,sep,ap)
        If p=0:Break:EndIf
        n+1
        t(n)= Mid(l,ap,p-ap)
    ForEver
    ReDim t(n)
  EndProcedure
  
Procedure string2vector2(Array s.vector2(1),txt.s)
  Dim tt.s(0)
  Dim t.s(0)
  Protected i,n
  
  split(tt(),txt,"/",100)
  n=ArraySize(tt())
  Dim s(n-1)
  For i=1 To n
    split(t(),tt(i)+",0",",")
    With s(i-1)
      \x=ValF(t(1))
      \y=ValF(t(2))
    EndWith
  Next
EndProcedure

Procedure.f Mini(v1.f,v2.f)
  If v1<v2:ProcedureReturn v1:Else:ProcedureReturn v2:EndIf
EndProcedure

Procedure limite(V, i, s)
  If V < i :v=i:EndIf
  If V > s :v=s:EndIf
  ProcedureReturn V
EndProcedure

Procedure CoRBinv(c.l)
  ProcedureReturn  RGBA(Blue(c),Green(c),Red(c),Alpha(c))
EndProcedure

Procedure ColorBlend(color1.l, color2.l, blend.f)
    Protected r.w,g.w,b.w,a.w
    r=  Red(color1) + (Red(color2)     - Red(color1)) * blend
    g=Green(color1) + (Green(color2) - Green(color1)) * blend
    b= Blue(color1) + (Blue(color2) -   Blue(color1)) * blend
    a=Alpha(color1) + (Alpha(color2) - Alpha(color1)) * blend
    ProcedureReturn  RGBA(r,g,b,a)
EndProcedure

Procedure GradientToArray(Array pal.l(1),n,gradient.s,inv.b=0,alpha.b=0)
  Protected Dim lt.s(0)
  Protected i,j, apos,pos, acol.l,col.l
  n-1
  Dim pal(n)
  split(lt(),gradient,"/")
  
  Macro lparam(i)
    pos=ValF(lt(i))*n
    col=Val(Mid(lt(i),FindString(lt(i),",")+1))
    If inv  :col=CoRBinv(col):EndIf
    If alpha:col | $ff000000:EndIf
  EndMacro
  
  lparam(1)
  For i=2 To ArraySize(lt())
    apos=pos
    acol=col
    lparam(i)
    For j=apos To pos:pal(j)=ColorBlend(acol,col,(j-apos)/(pos-apos)):Next
  Next
EndProcedure

Procedure Finterpol(Array F.f(1),t.s,rx.f=1,ry.f=1,oy.f=0)
  Protected.l i,j,n,c,ac
  Protected.f y,dx,dy,p
  Protected Dim s.vector2(0)
  string2vector2(s(),t)
  n=ArraySize(s())
  For i=0 To n
    s(i)\x*rx
    s(i)\y*ry+oy
  Next  
  Dim f(Int(s(n)\x))
  For j=0 To n-1
    y=s(j)\y
    dx=s(j+1)\x-s(j)\x
    dy=s(j+1)\y-s(j)\y
    p=dy/dx
    ac=c
    While c<=s(j+1)\x
      f(c)=y+p*(c-ac):c+1
    Wend
  Next
EndProcedure

Procedure t2norme(Array t.w(2),dmin.w,dmax.w,profil.s="")
  Protected smin.w,smax.w,dx1,dy1,i,j,sr,dr
  If profil="":profil="0,0/1,1":EndIf
  dy1 = ArraySize(t(), 1)
  dx1 = ArraySize(t(), 2)
  smax = -32768
  smin =  32767
  For j=0 To dy1
    For i=0 To dx1
      If t(j,i)>smax : smax=t(j,i): EndIf
      If t(j,i)<smin : smin=t(j,i): EndIf
    Next
  Next
  sr=smax-smin
  dr=dmax-dmin
  
  Protected Dim conv.f(sr)
  Finterpol(conv(),profil,sr,dr,dmin)
  
  For j=0 To dy1
    For i=0 To dx1
      t(j,i)=conv(t(j,i)-smin)
    Next
  Next
EndProcedure

Procedure Embos(Array s.w(2), px.w=0, py.w=0)
  Protected i,j,dx,dy
  px=1<<Int(Abs(px))*Sign(px)
  py=1<<Int(Abs(py))*Sign(py)
  
  Macro gra(j0,i0,j1,i1)
    t(j0,i0)=Abs(s(j0,i0)-s(j0,i1)+px)+Abs(s(j0,i0)-s(j1,i0)+py)
    EndMacro
  dy = ArraySize(s(), 1)
  dx = ArraySize(s(), 2)
  Dim T.w(dy,dx)
  For j=0 To dy-1
    For i=0 To dx-1
      gra(j,i,j+1,i+1)
    Next
    gra(j,dx,j+1,0)
  Next
  For i = 0 To dx-1
    gra(dy,i,0,i+1)
  Next
  gra(dy,dx,0,0)
  CopyArray(t(),s())
EndProcedure


;######################################################################################################
Declare asteroide(n)
Procedure heightline(Array t.w(1),dx,re,symetric.b)
  Protected i,ii,n,d,dd,l,R, rr
  n = 1<<re
  dd=dx / n: If dd<1:dd=1:EndIf
  Dim t.w(dx)
    rr = $1fff:r=rr/2
For ii = 1 To d/dd - 1:i=ii*dd: t(i) = Random(rr) - R: Next
  While dd > 1
    d = dd / 2
      For ii = 0 To dx/dd - 1:i=ii*dd+d
        t(i) = (t(i - d) + t(i + d)) /2 + Random(rr) - R
      Next
    l/2
    dd/2
    r/2:rr/2
  Wend 
  If symetric:For i=0 To dx/2:t(dx-i)=t(i):Next:EndIf
EndProcedure
  
Procedure heightmapSym(Array t.w(2),rnd, dx.w, dy.w, Re.w)
  Protected i,j,ii,jj,n,d,dd,l,R, rr,dec
  n = 1<<re
  dd=mini(dx,dy) / n: If dd<1:dd=1:EndIf
  Dim t.w(dy, dx)
  Dim b.w(dx)
  RandomSeed(rnd)
  heightline(b(),dx,re,1)
  For i=0 To dx:t(0,i)=b(i):Next
  For i=0 To dx:t(dy,i)=b(i):Next
  For j=0 To dy:t(j,0)=b(j):Next
  For j=0 To dy:t(j,dx)=b(j):Next
  
  RandomSeed(rnd)
  rr = $1fff:r=rr/2
  For jj = 1 To dy/dd - 1:j=jj*dd: For ii = 1 To dx/dd - 1:i=ii*dd: t(j,i) = Random(rr) - R: Next: Next
  l = dd
  While dd > 1
    d = dd / 2
    For jj = 0 To dy/dd - 1  :j=jj*dd+d
      For ii = 0 To dx/dd - 1:i=ii*dd+d
        t(j,i) = (t(j - d,i - d) + t(j - d,i + d) + t(j + d,i + d) + t(j + d,i - d)) / 4 + Random(rr) - R
      Next
    Next
    For jj = 1 To dy/d - 1  :j=jj*d:dec=1- jj & 1
      For ii = 1-dec To dx/dd - 1:i=ii*dd+dec*d
        t(j,i) = (t(j,i - d) + t(j,i + d) + t(j - d,i) + t(j + d,i)) / 4 + Random(rr) - R
      Next
    Next
    l/2
    dd/2
    r/2:rr/2
  Wend 
EndProcedure

Procedure texture(tex,dx,dy,rnd=0,f=0,lissage=0,embos=-1000,pal.s="0,$000000/1,$ffffff")
  Protected Dim t.w(0,0)
  Protected Dim bmp.l(dy-1,dx-1)
  Protected Dim pal.l(0):gradienttoarray(pal(),1024,pal,1)
  Protected i,j,n
  
  heightmapSym(t(),rnd,dx,dy,f)
  
  If embos<>-1000:embos(t(),embos,embos):EndIf
  t2norme(t(),0,1023)
  For j=0 To dy-1:For i=0 To dx-1:bmp(j,i)=pal(t(j,i)):Next:Next
  
  n=CreateTexture(tex,dx,dy)
  If tex=-1:tex=n:EndIf
  StartDrawing(TextureOutput(tex))
  CopyMemory(@bmp(0,0),DrawingBuffer(),dx*dy*4)
  StopDrawing()
  ProcedureReturn tex
EndProcedure

Procedure affiche3d()
  Static.f MouseX,Mousey,keyx,keyy,keyz,a,  fdf.b,iu.b=1,rot.f=1
  Protected i,event,transit=200
  
  Repeat
    event=WindowEvent()  
    ExamineMouse()
    MouseX = -MouseDeltaX() *  0.05
    MouseY = -MouseDeltaY() *  0.05
    If WaitWindowEvent(1) = #PB_Event_LeftClick And IsScreenActive():iu=1-iu: ReleaseMouse(iu):EndIf
    ExamineKeyboard()
    keyx=(-Bool(KeyboardPushed(#PB_Key_Left)<>0)+Bool(KeyboardPushed(#PB_Key_Right)<>0))*0.02
    keyz=(-Bool(KeyboardPushed(#PB_Key_Down)<>0)+Bool(KeyboardPushed(#PB_Key_Up   )<>0))*0.02+MouseWheel()*0.2
    If KeyboardReleased(#PB_Key_F1):asteroide(1):transit=200:EndIf
    If KeyboardReleased(#PB_Key_F2):asteroide(2):transit=200:EndIf
    If KeyboardReleased(#PB_Key_F3):asteroide(3):transit=200:EndIf
    If KeyboardReleased(#PB_Key_F4):asteroide(4):transit=200:EndIf
    If transit>0:transit-1:CameraFollow(0,EntityID(1),0,0,10,0.05,0.05,1):EndIf
    If KeyboardReleased(#PB_Key_F12):fdf=1-fdf:If fdf:CameraRenderMode(0,#PB_Camera_Wireframe):Else:CameraRenderMode(0,#PB_Camera_Textured):EndIf:EndIf
    RotateCamera(0, MouseY, MouseX, 0, #PB_Relative):MoveCamera  (0, KeyX, 0, -keyz) :MoveCamera(0,CameraX(0),CameraY(0),CameraZ(0),#PB_Absolute)    
    RotateEntity(1,rot*0.01,rot*0.03,0,#PB_Relative)
    RenderWorld()
    DisplayTransparentSprite(0,8,8)
    FlipBuffers()
  Until event=#PB_Event_CloseWindow  Or KeyboardPushed(#PB_Key_Escape)
EndProcedure

Procedure createsphereCM(mesh,rnd,rayon.f,detail,amp.f,fraction,lissage=0,ntile=1,profil.s="",pal.s="")
  Define i,j,d=1<<detail   ,d2=d/2,n,icolor
  Dim t.svertex2(d,d)
  Dim hm.w(d,d)
  Dim pal.l(0):gradienttoarray(pal(),1024,pal,1)
  
  heightmapSym(hm(),rnd,d,d,fraction)
  t2norme(hm(),-1024,1024,profil)
  
  For j=0 To d
    For i=0 To d
      vec3d(t(i,j)\p,-Tan((i/d2-1)*#PI/4),1,Tan((j/d2-1)*#PI/4))
      norme3d(t(i,j)\p,(1+hm(i,j)/1024*amp)*rayon)
      vec2d(t(i,j)\uv,i/d*ntile,j/d*ntile)
      icolor=1023*(hm(i,j)+1024)/2048:t(i,j)\color=pal(icolor)
    Next
  Next  
  n= createsurface(-1,t())
  CreateMesh(mesh)
  addmesh(mesh,n,-1,0,0,0,1,1,1,0,0,0)
  addmesh(mesh,n,-1,0,0,0,1,1,1,0,270,270)
  addmesh(mesh,n,-1,0,0,0,1,1,1,180,0,0)
  addmesh(mesh,n,-1,0,0,0,1,1,1,0,270,90)
  addmesh(mesh,n,-1,0,0,0,1,1,1,270,90,0)
  addmesh(mesh,n,-1,0,0,0,1,1,1,90,0,270)
  FinishMesh(1)
  NormalizeMesh(mesh)
EndProcedure

Procedure asteroide(n)
  Protected past.vector3
  
  Select n
    Case 1:createspherecm(1,0,4,8,0.05,0,0,4,"0,1/0.3,0.8/0.5,0/0.6,0.5/1,1","0,$004488/1,$ffffff"):vec3d(past,1000,0,2000)
    Case 2:createspherecm(1,4,4,8,0.1,0,0,4,"0,0/1,1","0,$ffffff/1,$ffffff"):vec3d(past,-2000,0,-1000)
    Case 3:createspherecm(1,1,4,8,0.04,2,0,4,"0,0.4/0.5,0.6/0.7,1/0.8,0.1/1,0.0","0,$ff0000/0.5,$0088ff/1,$ffffff"):vec3d(past,-1000,0,1000)
    Case 4:createspherecm(1,1,4,8,0.08,2,0,4,"0,0/0.5,0.3/0.6,0.7/1,1","0,$ffffff/1,$0000ff"):vec3d(past,-1000,0,-1500)
  EndSelect
  CreateEntity(1,MeshID(1),MaterialID(1),past\x,past\y,past\z)
EndProcedure

Procedure menu()
  Protected p=8
  Macro DT(t1,t2)
    DrawText(8,p,t1)
    DrawText(100,p,t2)
    p+22
  EndMacro
  CreateSprite(0,256,180,#PB_Sprite_AlphaBlending)
  StartDrawing(SpriteOutput(0))
  DrawingMode(#PB_2DDrawing_AllChannels)
  DrawingFont(FontID(0))
  Box(0,0,256,180,$44000000)
  DrawingMode(#PB_2DDrawing_AllChannels|#PB_2DDrawing_Outlined)
  Box(0,0,256,180,$ffffffff)
  BackColor($44000000)
  FrontColor($ffffffff)
  dt("Moving:","")
  dt("Cursor + Mouse","")
  dt("","")
  dt("Commandes:","")
  dt("[F1]->[F4]","Select asteroid")
  dt("[F12]","Wireframe")
  dt("[Esc]","Quit")
  StopDrawing()
EndProcedure

Procedure test_CubeMap()
  Protected i,ex,ey,r.f=1
  ExamineDesktops()
  ex=DesktopWidth(0)
  ey=DesktopHeight(0)
  
  InitKeyboard():InitMouse():InitEngine3D():InitSprite() 
  OpenWindow(0,0,0,ex*r,ey*r,"",#PB_Window_BorderLess)
  OpenWindowedScreen(WindowID(0), 0, 0, WindowWidth(0),WindowHeight(0))
  LoadFont(0,"arial",14)
  
  menu()
  ;-------------------- scene
  CreateLight(0, $aaaaaa, -5000, 1000, 2000)
  SetLightColor(0, #PB_Light_SpecularColor, $444444)
  AmbientColor($444444)
  CreateCamera(0, 0, 0, 100, 100)
  CameraRange(0,0,100000)
  MoveCamera(0, -10,1,-10, #PB_Absolute)
  CameraLookAt(0, 0, 0, 0)
  
  ;planete
  texture(3,256,256,1,  3,0,-1000,"0,$ffffff/0.4,$446666/0.5,$6688bb/1,$446688")
  CreateMaterial(3, TextureID(3))
  createspherecm(3,0,500,5,0,0,0,1)
  CreateEntity(3,MeshID(3),MaterialID(3))
  ;anneau
  texture(4,128,128,0,  2,0,-1000,"0,$000000/1,$ffffffff")
  CreateMaterial(4, TextureID(4)):ScaleMaterial(4,1,0.1)
  MaterialFilteringMode(4,#PB_Material_Anisotropic,4)
  MaterialBlendingMode(4,#PB_Material_AlphaBlend)
  CreateTorus(4,800,180,8,64):TransformMesh(4,0,0,0,1,0.0001,1,-15,-40,0):NormalizeMesh(4)
  CreateEntity(4,MeshID(4),MaterialID(4))
  
  ;etoiles
  texture(5,256,256,4,  1,0,-1000,"0,$442222/0.1,$221111/0.5,$000000/0.7,$000000/1,$112222")
  CreateTexture(6,512,512)
  StartDrawing(TextureOutput(6)):For i=0 To 400:Circle(Random(512),Random(512),Pow(Random(3)+1,4)/200,Random(255)*$010101):Next:StopDrawing()
  CreateMaterial(5, TextureID(5))
  AddMaterialLayer(5, TextureID(6),#PB_Material_Add):ScaleMaterial(5,1/4,1/4,1)
  SetMaterialColor(5,#PB_Material_SelfIlluminationColor,$ffffff):MaterialCullingMode(5, #PB_Material_NoCulling)
  createspherecm(5,0,10000,2,0,0,0,1)
  CreateEntity(5,MeshID(5),MaterialID(5))

  ;soleil
  CreateTexture(7,2,2)
  StartDrawing(TextureOutput(7)):Box(0,0,2,2,$ffffff):StopDrawing()
  CreateMaterial(7, TextureID(7))
  SetMaterialColor(7,#PB_Material_SelfIlluminationColor,$ffffff):MaterialCullingMode(5, #PB_Material_NoCulling)
  CreateSphere(7,100)
  CreateEntity(7,MeshID(7),MaterialID(7),-5000, 1000, 2000)
  
    ;asteroide
  texture(1,512,512,0,  4,0,0,"0,$ffffff/1,$000000")
  texture(2,512,512,0,  3,0,20,"0,$ff000000/0.5,$00/1,$ffffffff")
  CreateMaterial(1, TextureID(1))
  SetMaterialColor(1, #PB_Material_SpecularColor, $ffffff):MaterialShininess(1, 10)
  AddMaterialLayer(1, TextureID(2),#PB_Material_AlphaBlend):ScaleMaterial(1,1/4,1/4,1)
  MaterialFilteringMode(1,#PB_Material_Anisotropic,4)
  SetMaterialColor(1, #PB_Material_AmbientColor,-1)
  asteroide(1)
 
  affiche3d():End
  EndProcedure
  
test_CubeMap()
Dernière modification par Guillot le mer. 14/mars/2018 1:23, modifié 1 fois.
Avatar de l’utilisateur
Micoute
Messages : 2522
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: demo 3D - Asteroïde

Message par Micoute »

C'est très joli, même si ça ressemble à une boule de pain, bien trop cuite. Merci pour le partage.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.73 PB 6.00 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
SPH
Messages : 4720
Inscription : mer. 09/nov./2005 9:53

Re: demo 3D - Asteroïde

Message par SPH »

La texture est plutot bien faite mais c'est l'objet qui n'est pas adequate (une boule)

Sinon, bravo 8)
http://HexaScrabble.com/
!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.00 - 64 bits
Avatar de l’utilisateur
Ar-S
Messages : 9471
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: demo 3D - Asteroïde

Message par Ar-S »

Je n'y connais rien en 3d pb mais je ne vois pas de CreateSphere() pour ton asteroid. Normalement on fait du bump-maping sur une sphere non ?
~~~~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
Avatar de l’utilisateur
Guillot
Messages : 516
Inscription : jeu. 25/juin/2015 16:18

Re: demo 3D - Asteroïde

Message par Guillot »

j'ai fais quelques modifs : 4 different asteroides + coloration

à Micoute : ouai, mais c'est la miche de pain la plus réaliste du forum !

à Ar-s : c'est ma fonction createsphereCM (CM pour cubemap)
non ,c'est pas du bump, helas on à pas ça en PB (sauf à utiliser les scripts), et le bump est relatif à la texture, pas à la geometrie du mesh (mais y'a des hybridations...)
comtois
Messages : 5172
Inscription : mer. 21/janv./2004 17:48
Contact :

Re: demo 3D - Asteroïde

Message par comtois »

wow c'est beau, j'aime bien l'astéroïde 3.

Le pro de la démo entièrement écrite dans le code, j'aime ça :)
http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
Avatar de l’utilisateur
Micoute
Messages : 2522
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: demo 3D - Asteroïde

Message par Micoute »

Oui, j'adore, c'est du très bon travail, merci pour le partage.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.73 PB 6.00 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
Zorro
Messages : 2185
Inscription : mar. 31/mai/2016 9:06

Re: demo 3D - Asteroïde

Message par Zorro »

Ar-S a écrit :Je n'y connais rien en 3d pb mais je ne vois pas de CreateSphere() pour ton asteroid. Normalement on fait du bump-maping sur une sphere non ?
le bump peut se faire sur toute forme de mesh
le bump agit sur la Texture uniquement , contrairement au "displacement" qui lui travail au niveau mesh

le bump utilise le niveau de gris pour determiner l'effet de relief , ça ne reste qu'un effet d'optique
les polygones ne sont pas deplacés !

en "Displacement" ce sont bien les polygones d'un mesh qui sont déplacés :)

(mes references sont uniquement lié au Soft 3d type 3dsMax,C4d,Blender etc.... ) :)
Guillot a écrit :à Micoute : ouai, mais c'est la miche de pain la plus réaliste du forum !

pas sur ;)

Image
Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: demo 3D - Asteroïde

Message par falsam »

Niveau de code élevé pour un beau rendu. Très bon travail. Merci beaucoup.
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
Kwai chang caine
Messages : 6962
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: demo 3D - Asteroïde

Message par Kwai chang caine »

Waouuuhh !! 8O
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
venom
Messages : 3071
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Re: demo 3D - Asteroïde

Message par venom »

8O En effet. Bravo, Je les trouves top moi c'est astéroïdes. 8)







@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: demo 3D - Asteroïde

Message par djes »

Wouahou ! Très très impressionnant !!! Chapeau :)

Si tu as encore envie d'améliorer, voici mes suggestions : une, deux ou trois déformations plus "globales", histoire de "patatiser" les astéroïdes et les rendre moins sphériques, et ajouter les fameux impacts donnant des cratères, ainsi que des traînées de poussière claires ou sombres.
Répondre