Page 1 of 1

Matrix and wave

Posted: Sat Sep 13, 2003 7:24 pm
by Comtois
I dont know how texture and color mesh work
Where can i find snippet or tutorial ?

Code: Select all

;-Initialisation 
If InitEngine3D()=0 
   MessageRequester("Erreur", "Impossible d'initialiser la 3D", 0) 
   End 
EndIf 

If InitSprite() = 0 Or InitKeyboard() = 0 
   MessageRequester("Erreur", "Impossible d'initialiser DirectX 7 Ou plus", 0) 
   End 
EndIf 

If OpenScreen(800,600,16,"Vagues") = 0 
   MessageRequester("Erreur", "Impossible d'ouvrir l'écran ", 0) 
   End 
EndIf 

;-Variables Globales 
Global AngleVague.f,vitesse.f,decaleX.f,decaleZ.f,hauteur.f 
AngleVague = Random(360) 
vitesse = 2.0 
decaleX = 21.0 
decaleZ = 15.0 
hauteur = 2.0 

Declare Matrice(NbpointsX.w,NbpointsZ.w) 
    
;-Constantes 
#Pi = 3.14159265 
#NbX=30 
#NbZ=30 
#PointID = 0 
#TriangleID = 1 
#TextureID = 2 

;-Mémoires Mesh 
AllocateMemory(#PointID,12*961,0) 
AllocateMemory(#TriangleID,12*1800,0) 
AllocateMemory(#TextureID,4*2,0) 
Matrice(#NbX,#NbZ) 

;-Mesh 
CreateMesh(0) 
SetMeshData(0, 0, UseMemory(#PointID) , 961) 
SetMeshData(0, 1, UseMemory(#TriangleID) , 1800) 
SetMeshData(0, 2, UseMemory(#TextureID), 1) ; là je ne sais pas encore comment faire 

;-Texture 
CreateTexture(0,256,256) 
StartDrawing(TextureOutput(0)) 
   Box(0,0,256,256,RGB(190,190,255)) 
StopDrawing() 

;-Entity 
CreateEntity(0, MeshID(0), CreateMaterial(0, TextureID(0))) 
ScaleEntity(0, 10, 10, 10) 

;-Camera    
CreateCamera(0, 0, 0, 100, 100) 
CameraLocate(0,150,180,520) 
CameraLookAt(0,150,0,0) 
CameraRenderMode(0, #PB_Camera_Wireframe) 

;-Procédures 

Procedure Matrice(FX.w,FZ.w) 
  
  adresse=UseMemory(#PointID) 
  For b=0 To FZ 
    For a=0 To FX 
      PokeF(adresse, a) : PokeF(adresse + 4, 0) : PokeF(adresse + 8, b)  
      adresse + 12 
    Next a 
  Next b 
  
  adresse=UseMemory(#TriangleID) 
  For b=0 To FZ - 1 
    For a=0 To FX - 1 
      Nb = FX + 1 
      hg=a + (b * Nb) 
      hd=a + 1 + (b * Nb) 
      bg=a + ((b + 1) * Nb) 
      bd=a + 1 + ((b + 1) * Nb) 
      PokeW(adresse     , hg) : PokeW(adresse +  2, hd) : PokeW(adresse +  4, bg) 
      PokeW(adresse +  6, hd) : PokeW(adresse +  8, bg) : PokeW(adresse + 10, bd) 
      adresse + 12 
    Next a 
  Next b 

  PokeF(UseMemory(#TextureID) , 1) : PokeF(UseMemory(#TextureID) + 4, 1) 

EndProcedure  

Procedure.w wrapvalue(angle.l) 
  While angle-360>=0 
    angle-360 
  Wend 
  ProcedureReturn angle 
EndProcedure 
    
Procedure.f Sind(angle.l) 
   a.f=angle/180.0 * #Pi 
   ProcedureReturn Sin(a) 
EndProcedure 

Procedure.f Cosd(angle.l) 
  a.f=angle/180.0 * #Pi 
  ProcedureReturn Cos(a) 
EndProcedure 
  
Procedure vagues() 
  ; adaptation d'un code darkbasic en purebasic 
  adresse = UseMemory(#PointID) + 4 
  For z = 0 To #NbZ 
   For x = 0 To #NbX 
      Sommet.f = Sind(AngleVague + (x * decaleX) + (z * decaleZ)) * hauteur 
      PokeF(adresse, Sommet) 
      adresse + 12 
    Next x 
  Next z 
  SetMeshData(0, 0, UseMemory(#PointID) , 961) 
EndProcedure 

Procedure AffAide() 
  StartDrawing(ScreenOutput()) 
    DrawingMode(1) 
    FrontColor(255,255,255) 
    Locate(0,0) 
    DrawText("[F1] / [F2] / [F3] => Change Mode affichage") 
    Locate(0,20) 
    DrawText("[PageUp] / [PageDown] => Hauteur : " + Str(hauteur)) 
    Locate(0,40) 
    DrawText("[Flèche Haut] / [Flèche bas] => DecaleZ : " + Str(decaleZ)) 
    Locate(0,60) 
    DrawText("[Flèche Gauche] / [Flèche droite] => DecaleX : " + Str(decaleX)) 
  StopDrawing()  
EndProcedure 

;-Boucle principale 

Repeat 
   ClearScreen(0, 0, 0) 
   ExamineKeyboard() 
   AffAide() 
   If KeyboardReleased(#PB_Key_F1) : CameraRenderMode(0, #PB_Camera_Plot)  : EndIf 
   If KeyboardReleased(#PB_Key_F2) : CameraRenderMode(0, #PB_Camera_Wireframe)  : EndIf 
   If KeyboardReleased(#PB_Key_F3) : CameraRenderMode(0, #PB_Camera_Textured)  : EndIf 
  
   If KeyboardReleased(#PB_Key_PageUp) : hauteur + 0.5  : EndIf 
   If KeyboardReleased(#PB_Key_PageDown) : hauteur - 0.5  : EndIf 
  
   If KeyboardReleased(#PB_Key_Up) : decaleZ + 1  : EndIf 
   If KeyboardReleased(#PB_Key_Down) : decaleZ - 1  : EndIf 
   If KeyboardReleased(#PB_Key_Left) : decaleX - 1  : EndIf 
   If KeyboardReleased(#PB_Key_Right) : decaleX + 1  : EndIf 
  
   AngleVague = wrapvalue(AngleVague + vitesse) 
   vagues() 
   RenderWorld() 
   FlipBuffers() 
    
Until KeyboardPushed(#PB_Key_Escape) 

End